【发布时间】:2018-03-19 16:27:21
【问题描述】:
我遇到了另一个算法问题,我需要确定完成此任务的最佳方法。
对于一个简单的视图,我有 2 个多边形(多边形 A 和 B),它们可以是凸面或非凸面(凹面?),并且是“简单的”。多边形将由线或弧组成,但多边形不会自行循环。我需要确定 A 是否完全包含 B。
我目前确定多边形 A 是否包含多边形 B 的方法是查看 B 的边界框是否在 A 内。但是,我遇到了一些问题并得到了误报。为了节省解释,我的问题与这个人遇到的问题相同:https://math.stackexchange.com/questions/2273108/polygon-in-polygon-testing
在其中一个答案中,您会看到一张会导致误报的图片。答案还包含指向可能解决方案的链接: Check if polygon is inside a polygon
我不太赞成直线相交法,因为当我们处理弧线时,事情会变得有点复杂。虽然,如果有人可以发布一个很好的答案,使与弧的交叉点变得简单,我仍然愿意做线交叉点。
所以,我问社区是否有另一种更简单的方法来确定多边形 A 是否完全包围多边形 B,如果是,他们是否可以发布一些关于如何构造所述算法的资源?
编辑:
圆弧用圆弧表示
【问题讨论】:
-
您可能会探索的一种方法是确定 A 的边界框是否包含 B 的边界框,和 A 的任何线段是否与 A 的任何线段相交B. 祝你好运。
-
我认为如果不考虑交点(线弧和弧弧),您无法解决此问题,并且在我们知道您已经拥有的方法之前,我们无法建议“简单”的方法介意。
-
@Beta 当然可以。现在,让我们考虑找到 line-arc 和 arc-arc 的交点作为我的“方法”,因为它是我拥有的最佳选择。我一直在考虑采用扫描线算法,但我不确定这将如何应用于圆弧......
-
你的弧是如何定义的?
-
这是家庭作业/作业/理论作业吗?如果不是,现实世界的问题参数是什么(预期输入大小、所需精度、所需算法速度)?
标签: c++ algorithm computational-geometry