我的问题很简单,但解决方案可能非常棘手。我有一组三角形,我想找到他们的联盟。三角形以标准方式给出:通过坐标点列表(每个点2个坐标)和连接列表,其中每条线是由其顶点索引给出的三角形:
分:
[ 15.02716923 81.72425842]
[ 21.42242702 79.91459549]
[ 24.87068939 79.0222168 ]
[ 29.25767326 77.96657562]
[ 34.07667923 76.65890503]
三角形:
7 8 9
8 18 20
8 20 10
8 10 9
9 10 11
9 11 108
我可以使用cascaded_union
非常有效地找到联合:
import shapely.geometry as geometry
from shapely.ops import cascaded_union, polygonize
polys = [geometry.Polygon([[points[point, 0], points[point, 1]] for point in triangle]) for triangle in triangles]
result = cascaded_union (polys)
问题是,这给出了结果多边形的坐标。然而,我希望result
的周长作为初始points
数组中的索引。到目前为止,我还没有找到办法做到这一点。一种方法可能是编写我自己的组合函数,它会吐出点索引而不是坐标本身。
答案 0 :(得分:0)
如果联合始终返回带有列表中点数的多边形,则可以只查找索引。构建一个字典,其中一个坐标元组指向您使用的索引(在代码中名为coord_to_pointer
),然后您可以轻松获取索引:
polys = [geometry.Polygon([[points[point, 0], points[point, 1]]
for point in triangle]) for triangle in triangles]
result = cascaded_union (polys)
geom_indexes = [coord_to_pointer[p] for p in list(result.exterior.coords)]