我已阅读How can I determine whether a 2D Point is within a Polygon?但我不确定该解决方案是否适用于由中间区域划分的多边形。想象一下方形图8或简单地将两个方格堆叠在一起。任何一个正方形内的一个点肯定会在多边形“内部”,但是交叉计数会根据你去的方向(以及你是否越过那个内部段)而有所不同。
我认为解决这个问题的一种方法是将多边形视为两个独立的多边形...(在这种情况下,我需要一个算法将复杂多边形划分为一组更简单的多边形?)
或者是否对光线投射算法或其他多边形点算法进行了改进,以处理我描述的情况?
答案 0 :(得分:2)
所描述的算法可以正常工作,因为如果你仔细观察它,你会发现它只是重要的交叉数量。如果我们从“8”的“子多边形”开始,我们将在最坏的情况下将边缘交叉3次,通常一次。它确实在里面。否则就在外面。
但是,可以假设有一个特殊情况。如果光线完全通过交叉点。但请注意,在这种情况下,您还将获得2个交叉点:)。
答案 1 :(得分:0)
我不确定这是否是最佳解决方案;但光线投射算法适用于任何凸多边形。任何多边形都可以分解为凸起的三角形。 (双框不是凸多边形,因为如果用线段连接两个顶点,在某些情况下你会越过中心边缘。)因此,澄清一下:首先将多边形分解为三角形,然后使用光线 - 确定该点是否在三角形内。
[编辑:光线投射适用于凹多边形。对不起,我错了。]
答案 2 :(得分:0)
引用的交叉算法适用于任何闭合的多边形,即使是凹面或自相交。为了关闭双框多边形(在同一点开始和结束),必须遍历中间段两次。这意味着穿过底部的示例光线穿过三条边,因此它在内部使用奇偶规则。