Python 计算三个矩形中至少一个所覆盖的面积

Python 计算三个矩形中至少一个所覆盖的面积,python,computational-geometry,Python,Computational Geometry,我有一个问题,我需要计算三个矩形中至少一个所覆盖的面积 我定义了一个函数calculate,如下所示(为清楚起见,为冗余变量道歉): 然而,这似乎不起作用。我在公式中遗漏了什么area 12、area 13和area 23是由末尾最后两位数字表示的相交三角形区域,例如area 12是rec1和rec2的相交区域 对于输入((x1,y1)表示左上角,(x2,y2)表示右下角) 我应该得到12的输出,但是我得到13,简单地将+1添加到返回值在其他测试用例中不起作用。您要寻找的是矩形并集的面积 在两个

我有一个问题,我需要计算三个矩形中至少一个所覆盖的面积

我定义了一个函数
calculate
,如下所示(为清楚起见,为冗余变量道歉):

然而,这似乎不起作用。我在公式中遗漏了什么
area 12
area 13
area 23
是由末尾最后两位数字表示的相交三角形区域,例如
area 12
rec1
rec2
的相交区域

对于输入((x1,y1)表示左上角,(x2,y2)表示右下角)


我应该得到
12
的输出,但是我得到
13
,简单地将
+1
添加到返回值在其他测试用例中不起作用。

您要寻找的是矩形并集的面积

在两个矩形的情况下,该面积是单个面积减去交点面积的总和。有趣的是,交叉点也是一个矩形(或空)。如果我们用
&
表示交集,用
|
表示并集,那么

Area(A | B) = Area(A) + Area(B) - Area(A & B).
为了推广到三个矩形,我们可以想象上面的并集由两个正矩形和一个负矩形组成。因此

Area(A | B | C) = Area((A | B) | C)
 = Area(A) + Area(C) - Area(A & C) + Area(B) + Area(C) - Area(B & C) - Area(A & B) - Area(C) + Area(A & B & C)
 = Area(A) + Area(B) + Area(C) - Area(B & C) - Area(C & A) - Area(A & B) + Area(A & B & C).

找到两个矩形交点的面积,就可以考虑两个左边的最右边和两个右边的最左边。如果交叉,则交叉口为空。否则,它们的距离就是交叉点的宽度。类似的推理给出了高度。

输入是否正确ordinates@coderoftheday是的。更新。您是如何仅从两组坐标创建矩形的。@coderoftheday这可能会有帮助()这是一个类似的问题。
我通常会在返回值中添加+1来解决所有问题
Area(A | B) = Area(A) + Area(B) - Area(A & B).
Area(A | B | C) = Area((A | B) | C)
 = Area(A) + Area(C) - Area(A & C) + Area(B) + Area(C) - Area(B & C) - Area(A & B) - Area(C) + Area(A & B & C)
 = Area(A) + Area(B) + Area(C) - Area(B & C) - Area(C & A) - Area(A & B) + Area(A & B & C).