在Python中使用scipy无法在凹陷的多边形中生成正确的三角形网格。

问题描述 投票:0回答:1

我在工作中遇到了一个任务,我需要用Python在几个不同的多边形内部创建三角形网格。虽然这些多边形是一个凸壳的分割,但每个分割本身是凹形的,我试着用scipy.spatial.Delaunay()来创建三角形网格。当我尝试使用scipy.spatial.Delaunay()时,似乎算法假设多边形是凸形的,最后生成的三角形在凹形体区域之外。代码和结果图如下。

for i in range(len(mp)):
    dtri = np.array(mp[i])
    plt.scatter(dtri[:,0],dtri[:,1])
    plt.plot(np.array(fdc_seg[i])[:,0],np.array(fdc_seg[i])[:,1])
    tri = Delaunay(dtri,qhull_options="QJ")
    triang = mtri.Triangulation(dtri[:, 0],dtri[:, 1],triangles=tri.simplices)
    plt.triplot(dtri[:, 0], dtri[:, 1], tri.simplices,lw=0.5, color='red')
plt.show()

多边形形状三角网

python scipy mesh delaunay
1个回答
0
投票

例程scipy.spatial.Delaunay()创建了一个提供给算法的点的凸壳的三角网,所以这些额外的三角形是预期的。为了得到你想要的结果,(1)你需要希望去除多边形之外的三角形,(2)你需要希望你的多边形的边缘都实际存在于 Delaunay 三角形中。

另一种方法是使用 三角形 其中有几个python包装器。此处此处. 该代码建立了一个多边形的约束性Delaunay三角形,并删除外部三角形。

© www.soinside.com 2019 - 2024. All rights reserved.