我在工作中遇到了一个任务,我需要使用 Python 在几个不同的多边形内创建三角形网格。虽然多边形是凸包的分割,但每个线段本身都是凹形的。当我尝试使用 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()
多边形形状 生成的三角形网格
例程 scipy.spatial.Delaunay(( 创建提供给算法的点的凸包的三角测量,因此这些额外的三角形是预期的。为了得到你要找的结果,(1(你需要希望删除多边形之外的三角形,(2(你需要希望多边形的边实际上都存在于Delaunay三角测量中。
另一种方法是使用Triangle,它有几个python包装器,在这里和这里。该代码构建多边形的受约束的 Delaunay 三角测量并删除外部三角形。