给定一个表示2D中多边形的点列表,如何确定该点是否在多边形内。
请注意,多边形可以是凹面或凸面。您还可以对点的顺序做出任何假设。
答案 0 :(得分:7)
执行此操作的最佳方法是从您的点向任意方向绘制一条线,并计算您穿过对象边界的次数。如果你偶数次碰到边界,你就在对象之外,如果是奇怪的,你就在里面。通常最容易沿着其中一个轴来做出这个决定。
基本上,你只需找到一种方法来确定你是否越过了一个点。使用线方程(m=(y1-y2)/(x1-x2)
,y=m*x(x-x1)+y1
的斜率,看看你是否在该点有效的边界内交叉。给定这些点之间的线的等式,确定你的线穿过这个的位置线,并弄清楚它是否在线的范围内。
顺便提一下,同样的方法适用于任何任意维度,只是确定你是否会变得更加困难。
为了展示几个例子,我画了一个简单的插图,展示了内部和外部发生的事情,即使是一个奇怪的形状。
顺便提一下,如果你碰到了一个角落,它会计算你从内到外过渡的次数。
答案 1 :(得分:2)
选择多边形外部的点。在你和外面的点之间划一条线。如果线与多边形相交奇数次,则其内部,否则其外部。零交叉点也在外面。但是,这仅适用于非重叠多边形
答案 2 :(得分:1)
这是许多解决方案的已知问题,只是google它。 读到这个: http://en.wikipedia.org/wiki/Point_in_polygon
答案 3 :(得分:0)
从您的点开始,任意线以外的任何点(即边界外)。检查该线与多边形的一条边相交的次数。如果该值为奇数,则该点在内部。
检查时,请注意穿过顶点的线条,您的测试可能指示两条边缘交叉点。