【发布时间】:2013-12-19 09:52:46
【问题描述】:
我正在尝试这个问题并找到了解决方案:
在每个点的右侧画一条水平线并将其延伸到无穷远
1) 计算直线与多边形边缘相交的次数。
2) 如果交点数为奇数,则点在多边形内 点位于多边形的边缘。如果没有一个条件为真,那么 点在外面。
但我认为有一个简单的解决方案:
for(所有边的顺序相同)
求 3 个点的向量积(给定点和每边的端点)
if all products are > or < 0 : point lies inside polygon or on boundary
else outside
我的解决方案不是更好更高效吗?
还有比这更简单的算法吗?
【问题讨论】:
-
这真的不是数学论坛的问题吗? math.stackexchange.com
-
您的算法是否考虑了多边形可能的中间凹度? (顶点内角 > 270 或 300 度)
-
我认为应该是
independent的凹面或凸面。我们只需要查看叉积的sign。重要的是沿同一方向移动(顺时针或逆时针)。 -
三点的向量积是什么意思? (向量(A->B)) x 向量(P)?
-
三个点形成的三角形面积:
(x2 - x1)*(y3 - y1)-(y2 - y1)*(x3 - x1)