确定一个2D点是否在四边形内
Determine if a 2D point is within a quadrilateral
我正在做一个JS程序,我需要确定点是否在坐标系统的四个角内。
谁能给我指出一个答案的方向?我在看一个我认为叫做凸四边形的东西。也就是说,四个非常随机选择的角位置,所有角度都小于180°。
谢谢。
有两种相对简单的方法。第一种方法是绘制一条从点到"无限"的射线(实际上,到多边形外的任何点),并计算光线与多边形的多少条边相交。当且仅当计数为奇数时,该点在多边形内。
第二种方法是按顺序绕过多边形,对于每一对顶点vi和vi+1(必要时绕到第一个顶点),计算数量(x - xi) * (yi+1 - yi) - (xi+1 - xi) * (y - yi)。如果这些量都有相同的符号,则该点在多边形内。(这些量是向量(vi+1 - vi)和(p - vi)叉积的Z分量。它们都具有相同符号的条件与p在每条边的同一侧(左或右)的条件相同。两种方法都需要处理点恰好在边或顶点上的情况。你首先需要决定是否要将这些点计算为在多边形内。然后你需要相应地调整测试。请注意,轻微的数字舍入误差都可能导致错误的答案。这是你必须忍受的。
既然你有一个凸四边形,还有另一种方法。选择任意三个顶点,并计算该点和第四个顶点相对于由三个所选顶点组成的三角形的质心坐标。如果该点的质心坐标均为正,且均小于第四个顶点的质心坐标,则该点在四边形内。
注:我在这里找到了一个不错的页面,上面列出了很多策略。
您需要使用绕线或光线追踪方法。
使用绕线,您可以确定任何点是否在由线段构成的任何形状内。
基本上,你取每条线段与该点的叉乘,然后将所有结果相加。这就是我确定一颗恒星是否在星座中的方法,给出一组星座线。我知道还有其他方法……
http://en.wikipedia.org/wiki/Point_in_polygon必须有一些代码在一些地方。
更容易看出一个点是否在三角形内。
任何四边形都可以分成两个三角形。
如果该点在组成四边形的两个三角形中的任何一个三角形中,则该点在四边形内。
相关文章:
- 访问布局信息是否也会导致浏览器重排
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何检测是否有溢出
- jQuery中是否内置了任何字符串格式化函数
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 测试索引值是否等于某个数字的倍数
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 是否可以禁用jquery中的单个单选按钮
- 是否可以从父类访问子类的属性
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 如何让程序检查所选单词中是否有按键
- 用于检查数组中是否存在元素的javascript自定义方法
- 如何使用jquery确定用户是否年满18岁
- 确定一个2D点是否在四边形内