【发布时间】:2016-06-23 16:16:18
【问题描述】:
【问题讨论】:
标签: geometry computational-geometry geometry-surface
【问题讨论】:
标签: geometry computational-geometry geometry-surface
这是一个粗略的解决方案:
为每条边跟踪创建它的圆。
对于你找到的每个区域 R 的每个边界 E,取 E 所属的圆 C。如果 C 是 not T(红色) - 即 E 是蓝色,请检查 R 其他边缘上的点是否在 C 内:
上图中,C包含B,所以R被覆盖;但是C不包含A,所以不覆盖S
副案:
这个算法非常效率低下,我不能 100% 确定是否还有退化的情况;如果有人有任何建议,请告诉我。
【讨论】:
我认为没有简单的解决方案。
我会通过依次取每个圆圈,并对所有其他圆圈执行布尔减法来解决这个问题。 (足够远的圆圈 - R0 + R1
吃完碎片后,圆变成由圆弧或一组这样的多边形组成的曲线多边形,因为连接可能会被破坏。多边形可以由为其轮廓提供圆弧的圆列表表示,圆弧端点由两个连续邻居或目标圆和邻居的公共交点定义。请注意,同一个邻居可能会出现多次。
为了让事情更血腥一点,多边形可以有洞,你也需要表现出来。
然后一个关键的操作是从一个曲线多边形中减去一个圆。您需要检测完全在新圆圈内的弧线以及穿过它的弧线。获得弧的剩余部分后,您需要重新排列剩余的弧和新的弧。
我想所有这些操作都可以从一个单一的原语构建,该原语找到圆盘内的弧(由三个圆圈定义)部分。
【讨论】:
这看起来很简单(编辑:但不是):如果给定圆的每条弧的每个点都包含在至少一个其他圆中,则包含整个圆。然后,您必须找到所有交点 (algorithm to detect if a Circles intersect with any other circle in the same plane),并检查这些交点指定的所有弧。如果给定与圆 B 的两个交点的圆 A 的圆弧 A1-A2 的任何“内部”点(圆弧 B1-B2,其中点 A1=B1 和 A2=B2)包含在圆 B 中,则整个圆弧为包含在 B 圈中,反之亦然。如果我错了,请纠正我。
编辑:好的,我已经知道,我错了,正如 maxim1000 所示。这比我想象的要复杂。我想在我的答案中添加一些东西,但我不确定这是否是一个解决方案。不过,我希望它有所帮助。即:我想确定我们心目中的圈子与所有其他圈子之间的交集总面积。我们在我们的圆内找到所有分离的交点——所有包含相同点的部分,被所有相交的弧分开——并找到它们的区域。吴总结。如果它等于我们圆的面积,那么我们的圆包含在其他圆中。确定这个区域本身可能是一个问题,但正如我所说,它可能会导致正确的方向。让我也想想..
编辑:经过一段时间的思考。确定(多个)相交圆中的所有区域只是添加或减去三角形或......嗯......如何调用它们? ...图像上的黄色部分:)
【讨论】: