【发布时间】:2018-06-07 11:41:32
【问题描述】:
我正在使用 python 来解决这样的几何问题: [a geometry problem where one is required to express the shaded area as a sum /difference of the shapes in the figure]
在这个问题中,需要将阴影区域表示为形状的和/差,并据此计算面积。
例如,
阴影区域 = 子区域 A + C + E
大半圆 = A + B + C
小半圆 = C + D + E
三角形 = B + C + D
因此,阴影面积 = A + B + C + (C + D + E) - (B + C + D)
因此,为了解决这些问题,我需要一种算法,它可以将由子区域 (A,C,E....) 组成的查询集表示为多个子区域的和或差(不需要联合或交集) shape字典中的集合(如B、C、D)
我打算通过蛮力的方式来做(尝试检测到的所有形状的所有组合),但是,当图形变得复杂时,就像这里一样, Figure with many small shapes,复杂度可能会失控。
有没有解决这个问题的有效方法?
非常感谢
【问题讨论】:
-
(与问题无关)三角形的 4 和 8 边之间有 90º 角?还如何存储形状(由曲线分隔的形状)?
-
是的。它是一个直角三角形。我首先使用区域分割算法找到子区域(即找到以黑线为界的白色空间/阴影空间)。然后我使用一些形状检测算法(如霍夫圆)找到形状。我找到每个形状的足迹(即形状占据的像素)并将它们与 subregions 的足迹进行比较。如果一个子区域中的所有像素都包含在一个形状中,那么它就包含在一个形状中。从那时起,我只需将形状的子区域定义存储为集合。
标签: python sum set combinations