旋转矩形的近似重叠面积

Posted

技术标签:

【中文标题】旋转矩形的近似重叠面积【英文标题】:Approximate area of overlap of rotated rectangles 【发布时间】:2016-09-17 22:52:39 【问题描述】:

我需要估计两个任意大小和方向的矩形的重叠率。

我知道如何使用 Sutherland-Hodgman 算法进行精确计算,该算法可以针对这种情况进行优化。

无论如何,由于我需要集中使用该功能并且不需要完美的准确性(比如可以容忍 10% 的误差),我想知道是否不能以更快的方式评估它,最好是无分支的。

如果有帮助,可以假设两个矩形的纵横比相同,并且区域的比例不超过 4。


更新

    对于未旋转的矩形,公式为

    (min(W0,DX+W1) - max(-W0,DX-W1)).(min(H0,DY+H1) - max(H0,DY-H1))

    如果两个因素中的任何一个为负数,则为零,其中DXDY 是中心坐标之间的差异,WH 表示各自的一半大小。

    当您改变相对旋转角度时,可能值得查看给定中心位置和给定尺寸的公共区域曲线。

【问题讨论】:

只是推测,抽样怎么样?也就是说,如果变换 A 将轴对齐的 0 居中矩形映射到其中一个矩形,而 B 映射到另一个,那么对于来自第二个轴对齐矩形的样本点 p 的集合,您计算 inv(A) 的次数(B(p)) 在第一个轴对齐的矩形中;命中数与样本数的比率将近似于相交区域与第二个轴对齐矩形区域的比率。 @dmuir:完全正确。现在的目标是减少计算成本,以便允许的样本数量非常有限(我猜不到十个)。 如果您的语言允许,您可以并行进行大量抽样计算 @dmuir:是的,向量化可能是可能的,因为计算非常有规律。由于粒度非常细,多线程或 GPU 是不可想象的。 【参考方案1】:

Sutherland-Hodgman 算法用于凸剪辑多边形与任意一个的交集。我希望专门为凸凸情况设计的算法更快。

我在解决类似问题的 O'Rourke 算法 (O(m+n)) 方面有很好的实践经验(两组数千个旋转矩形之间的交叉区域)

Code link is here - convconv。 AFAIR,矩形可以进行一些简化。

Another algorithm

我怀疑任何近似方法都可以显着更快地找到结果并具有可控的准确性。

【讨论】:

Mh,这里 m=n=4,因此与遭受更多测试和分支的复杂算法相比,优化好的蛮力可能是最好的。 (对于确切的方法,我将使用具有四个阶段的递归 SH,使剪裁矩形轴平行并对边方程进行硬编码。)我更多的是寻找一个封闭的公式,例如通过切换到其他形状(椭圆? )。 是的,我以为您想要圆形或椭圆形,但如果不确定交叉区域顶点或至少交叉类型(角-角、角-边、十字、两个角),则无法想象良好的近似值里面等等)

以上是关于旋转矩形的近似重叠面积的主要内容,如果未能解决你的问题,请参考以下文章

矩形面积 HDU - 5251 (旋转卡壳)

HDU 5251 矩形面积(二维凸包旋转卡壳最小矩形覆盖问题) --2015百度之星题目

OpenCV中的图像处理 —— 轮廓入门+轮廓特征

计算旋转矩形中的最大矩形

计算旋转矩形中的最大矩形

旋转体表面积公式推导及证明错误