我正在尝试这个问题并找到了解决方案:
在每个点的右侧绘制一条水平线并将其延伸到无穷大
1)计算线与多边形边相交的次数 2)如果交叉点的数量是奇数或者,则点在多边形内部 点位于多边形的边缘。如果没有条件成立,那么 点在外面。
但我认为有一个简单的解决方案:
(所有方面的顺序相同)
找到3个点的矢量积(每边的给定点和终点)
if all products are > or < 0 : point lies inside polygon or on boundary
else outside
我的解决方案不是更好更有效吗? 有没有比这更简单的算法?
答案 0 :(得分:2)
使用叉积检查的算法仅适用于凸多边形。对于非凸多边形,很容易找到一个不起作用的例子。在给定的多边形中尝试任意点c
,d
或e
。
答案 1 :(得分:0)
您建议的算法仅适用于凸多边形和&amp;事实上,用于计算凸包,但凹陷会失败,这再次通过凸包算法的正确性得到证实。
使用此算法的另一种方法是将多边形划分为凸多边形,然后将算法应用于分割的部分,以查看该点是否在其中任何一个内部