【问题标题】:Polygon inside polygon with arcs带弧的多边形内的多边形
【发布时间】: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


【解决方案1】:

一种适用于所有情况的合理方法是将曲线多边形展平,即将表示它们的平面多边形转换为一定程度的准确度。这可以通过递归细分来完成。

然后使用扫描线方法检测交叉点。


请注意,您也可以预先使用扫描线方法,并将弧线分解为单调的部分。无论如何要注意,两条不处于交叉配置中的单调弧无论如何都可能相交。

【讨论】:

  • 我一直在玩弄这个想法。我现在遇到的一个问题是当扫掠线在2个位置截取圆弧时如何处理
  • @philm:这对于单调的弧线是不可能的。
  • 当然,我认为到目前为止,您的解决方案是最好的,所以我会接受并继续前进
  • @philm:你不想多说你的弧线到底是什么,所以我们无法进一步帮助你。
  • 我对这个说法感到困惑。我只是将弧建模为带有开始/结束节点和弧角的弧。我没有将其建模为样条曲线。只是一个简单的弧线
猜你喜欢
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
  • 2015-09-06
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
相关资源
最近更新 更多