给定一组交叉矩形,是否有标准算法来查找其边界多边形? (多边形与矩形的并集完全相同的区域。)可以假设矩形都以相同的方式定向,边沿着两个正交轴。
在搜索中我找到了凸边界多边形的算法,但在这里我真的更愿意只包含 矩形所覆盖的区域,这很可能是凹的。
(如果矩形完全包围一个区域,那么它可以包含在边界多边形内。)
答案 0 :(得分:2)
我不知道是否有一种标准的方法可以做到这一点,但我发现边界多边形的顶点将是矩形的角和它们的边相交的点,并且不包括那些位于其中的点一个矩形。
要订购积分,请从集合中的一个点开始。它可以是两条边的交点,也可以是一条角,所以无论哪种方式都保证至少有两条边。只需沿着其中一条边移动,直到到达下一个点。因为我们已经删除了内部点,所以在我们最终进入内部之前,我们总是会碰到另一个顶点。
如果一个矩形的一角沿着另一个矩形的边缘,则必须小心,因为距离角落的一条路径将通向矩形的内部。所以有一些选择右边缘的元素可以追踪。但是如果你维护你排除的点数列表,因为它们位于内部,你知道进入排除点的方向是错误的。
修改强> 让我试着更明确地说明一点。
(1)从每个矩形的每一边开始。计算它们相交的位置并将边缘分开。
(2)现在你有了一个段列表。检查每个段的端点,看它们是否在任何矩形内。
(3)现在取任何一个外部端点,这是至少一个具有另一个外部端点的段的端点。从端点到另一个外部端点绘制线。
(4)该外部端点也应该是具有另一个外部端点的不同段的端点。在该外部端点上画一条线。
(5)重复直到你回到开始时的终点。
答案 1 :(得分:1)
如果需要计算矩形的并集,那么这就是计算几何中通常所说的“合并”操作。它通常可以通过扫描线算法轻松实现。
扫描线方法通常需要相当大的初始投资:实施扫描线引擎。一旦完成,引擎可以立即用于在输入几何上轻松实现任何面向集合的操作,如“merge”,“and”,“或”,“diff”等。
http://en.wikipedia.org/wiki/Boolean_operations_on_polygons
同时,为轴向(等效)几何实现扫描线引擎是一项相当简单的任务。当您需要处理大量输入时,即当矩形的数量相对较高时,这将是最佳方法。其他答案中提到的各种基于边缘遍历的方法仅适用于相对较小的输入。