【发布时间】:2010-10-19 16:23:42
【问题描述】:
假设在一个平面上有许多凸多边形,也许是一张地图。这些多边形可以相互碰撞并共享一条边,但不能重叠。
要测试两个多边形 P 和 Q 是否重叠,首先我可以测试 P 中的每条边,看看它是否与任何一个相交Q 中的边。如果找到一个交集,我声明 P 和 Q 相交。如果没有相交,那么我必须测试 P 完全被 Q 包含的情况,反之亦然。接下来是 P==Q 的情况。最后,有些情况共享一些边缘,但不是全部。 (这最后两种情况可能被认为是相同的一般情况,但这可能并不重要。)
我有一个算法可以检测两条线段相交的位置。如果这两个线段是共线的,则出于我的目的,它们不被视为相交。
我是否正确列举了这些案例?对这些案例的测试有什么建议吗?
请注意,我不是要找到作为交叉点的新凸多边形,我只想知道是否存在交叉点。找到交叉点的算法很多,但我不需要费尽心思。
【问题讨论】:
-
在决定非垂直、非水平线段的共线性时要注意浮点精度问题,如果您选择这样做的话。