假设我们有以下 4 个矩形,它们都是用x
and y
它们所有顶点的坐标(从左上角开始按顺时针方向)。所有矩形的边均平行于 x 轴和 y 轴。Note:我愿意使用任何现有的库(如果存在)。
蓝色矩形示例:
[(20, 50), (40, 50), (40, 110), (20, 110)]
我如何计算它们覆盖的总面积(下面用蓝色标记)?
Here are some random rectangles I drew up:
![Random rectangles on an image](https://i.stack.imgur.com/z1Yex.png)
为了形象化此方法,如果您在矩形的每个垂直边缘上绘制一条横跨整个屏幕的垂直线,您可以看到每条线都标记出一个新矩形。您可以通过创建所有点的 x 坐标的排序列表并删除重复项来找到这些点。
新的矩形被加阴影:
现在你的问题变成了通过乘以宽度和高度来找到该区域中每个矩形的面积。
此方法解决了三个矩形重叠的问题 - 如果您使用包含排除方法(添加区域并减去重叠),则需要添加回三个重叠的区域,减去四个重叠的区域等。
请注意,在某些情况下(在最后一张照片中可见)一个区域中存在两个矩形。您需要检查一个矩形在下一个矩形开始之前结束的情况。您也可以通过在 y 轴上划分网格来解决此问题,但随后您必须测试每个区域是否包含矩形的一部分,这需要时间。
这是一个例子 http://twocentstudios.com/2016/08/16/calculating-the-area-of-multiple-intersecting-rectangles-with-swift/,代码本身是用 Swift 完成的,而不是 Python,但有图表和文章可能会有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)