具有不同方向的矩形的并集相交

时间:2018-07-02 03:01:54

标签: swift math computer-vision geometry computational-geometry

我需要迅速实现一种算法,以找到二维空间中方向不同的两个矩形之间的并集(IoU)相交。我找不到任何教程或示例代码来教授如何实现这种算法。

有人可以提供相关资源吗?

2 个答案:

答案 0 :(得分:2)

您可以使用O'Rourke algorithm计算两个凸多边形的交点。 书“ Computational Geometry in C”的页面上提供了C和Java代码。

enter image description here

算法遍历多边形的边缘,直到找到相交(使用 定向测试)。相交后,从两个可能的下一个中选择“最内部”边缘以构建相交核心多边形(总是凸面)。

对顶点列表进行排序后,可以使用shoelace formula计算多边形面积。

要获得并集面积,我们可以计算(感谢伊夫·达乌斯特的提示)

Area(Union) = Area(P) + Area(Q) - Area(Intersection)

答案 1 :(得分:1)

对于MBo / O'Rourke的非常好的解决方案,您可以使用扫掠线方法。

为方便起见,假定多边形之一是轴对齐的。然后,当直线撞到对齐的矩形的顶部和底部时,将发生两个“事件”,而当直线撞到另一个矩形的顶点时,将发生四个事件(取决于方向,顶点的可能排列为8)。

矩形的交点出现在这些事件定义的垂直范围内(您执行两个事件集的合并),并且在斜边与水平线之间要计算出两个六个交点。对于每个事件线,确定两个矩形跨越的X间隔并找到它们的交点或并集是一件容易的事。而且两个事件线之间的区域是梯形。

enter image description here

要处理一般位置的矩形,您可以

  • 旋转两个多边形以对齐其中一个,

  • 使用反向旋转坐标系,

  • 始终使用水平线执行扫描,而无需移动多边形。但随后有8个事件,而不是6个,最多有8个交集计算。