我正在开发一个JS程序,需要确定坐标系中的点是否在四个角之内。我在寻找一个答案。我所说的可能是一个凸四边形。也就是说,四个相对随意选择的顶点位置使得所有角度小于180°。谢谢。
这两种方法都需要处理点恰好在边缘或顶点上的情况。首先,您需要决定是否将这些点视为多边形内部的点。然后,您需要相应地调整测试。请注意,轻微的数值舍入误差可能会导致错误答案。这只是您必须面对的问题。
由于您有一个凸四边形,还有另一种方法。选择任意三个顶点,并计算该点和第四个顶点相对于由三个选定顶点形成的三角形的重心坐标。如果该点的重心坐标全部为正且全部小于第四个顶点的重心坐标,则该点位于四边形内部。
P.S.刚刚发现 这里 有一页不错的页面,列出了许多策略。其中一些非常有趣。
你需要使用绕线法或光线追踪方法。
通过绕线法,你可以确定任何点是否在由线段构建的任何形状内部。
基本上,你需要将每个线段与该点进行叉积运算,然后将所有结果相加。这是我用来判断星座中的恒星是否在一组星座线中的方法。我知道还有其他方法...
http://en.wikipedia.org/wiki/Point_in_polygon
在几个地方一定有相关代码。
判断一个点是否在三角形内要容易得多。
任何四边形都可以分成两个三角形。
如果该点位于构成四边形的两个三角形中的任意一个内部,则该点位于四边形内部。
if (Math.inpolygon(5,6,[1,22,13,1],[1,1,21,31])){ return "是的"; }
- Henrik