【问题标题】:Fail to generate correct triangle mesh inside of a concaved polygon using scipy in Python无法在 Python 中使用 scipy 在凹多边形内生成正确的三角形网格
【发布时间】:2020-08-30 09:22:27
【问题描述】:

我在工作中遇到了一个任务,我需要使用 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()

polygon shapes resulted triangle mesh

【问题讨论】:

    标签: python scipy mesh delaunay


    【解决方案1】:

    例程 scipy.spatial.Delaunay() 创建提供给算法的点的凸包的三角剖分,因此这些额外的三角形是预期的。要获得您正在寻找的结果,(1)您需要希望删除多边形外部的三角形,(2)您需要希望多边形的边缘都实际存在于 Delaunay 三角剖分中。

    另一种方法是使用Triangle,它有几个python 包装器herehere。该代码构建了一个多边形的约束 Delaunay 三角剖分并删除了外部三角形。

    【讨论】:

    • 谢谢亚历克斯,这非常有用。我使用 Shapely 库解决了这个问题,通过将每个三角形形成为一个单独的多边形并查看它是否在原始多边形中来删除多边形外部的三角形。感谢您分享 Triangle 和 Meshpy,虽然我遇到上述问题的原因是试图将 Meshpy 替换为三网格生成器,因为它反复崩溃(由于某些原因,它在 Linux 系统下效果更好)。如果你知道 Meshpy 崩溃这么多的原因,也请告诉我。再次感谢您的帮助。
    猜你喜欢
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2012-11-05
    相关资源
    最近更新 更多