想象一下,您有一个2D多边形(2D closed polygonal chain更精确)。你如何检查它是否包含自交叉?它可以是凸面或凹面,顺时针或逆时针方向。
现在,我可以运行一个标准O(N log N)
算法来检查是否有任何两个段交叉。但我相信,因为我们有一些额外的结构 - 段的顺序以及每两个连续段在端点处相遇的事实 - 可以设计出更简单,更快(可能O(N)
?)的算法。
有什么想法吗?
答案 0 :(得分:3)
您是否只需检查自我交叉点,或找到所有这些?后者比O(N log N)
更难,因为您可以与O(n^2)
段进行n
交叉。
如果您只需要查明是否存在自我交叉点,或者找到少量自交叉点,那么请查看here。本文似乎只是声称你需要什么,特别是在多边形平面化部分。我怀疑实现所描述的算法将是简单的,或任何合理大小的问题是值得的。但是这样的算法确实存在。免责声明:我没有尝试完成论文并理解它。