段 - 多边形交集

时间:2010-09-18 16:09:18

标签: computational-geometry

问候,

我想检测一个片段是否只是“触及”一个多边形还是跨过它。

alt text

解释了我的疑问。如何知道案例A和B之间的区别? 请注意,在这两种情况下,红线在两个顶点中穿过多边形,一个在外面触摸,另一个在内部交叉。我有一个段段交叉算法,但我不知道如何正确使用它。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:4)

我认为可能没有比在低级别计算细节容易得多的方法。 首先,您需要强大的代码来计算两个段之间的交集。 这将讨论(使用代码)here。一旦你有交叉点,你需要 计算多边形边界如何与那些区域中的线段相互作用 交点。这本质上是 使用我书中的符号重复LeftOf( )次计算。 在图像中,线段通过顶点 b ,而相邻顶点 a c (在连续序列中( a,b,c ))都在 b 的同一侧。因此,细分市场 不会穿透 b 附近的多边形内部。但是如果 a c 在该段的两侧,然后它必须穿透。

答案 1 :(得分:0)

概括,交叉点可能包含许多点。例如,请参阅讨论平面曲线如何相交的http://cagd.cs.byu.edu/~557/text/ch7.pdf,并说切线曲线在“正确计数”的两个点相交,这是违反直觉的。在具有放牧线的凸多边形的情况下,交叉点是否具有“正确计数?”的两个点?在你的情况下,是否有两个交叉点,每个交叉点有两个点?

所以O'Rourke教授给出了一种计算交叉点数的算法,可以这么说。实际上,计算交叉点的包是否应该返回每个交叉点的点数?