如何用scipy.spatial.Delaunay将所有点包含在无差错三角网格中?

时间:2015-06-16 13:04:06

标签: python scipy delaunay

我正在测试 scipy.spatial.Delaunay 并且无法解决两个问题:

  1. 网格有错误
  2. 网格不包括所有点
  3. 情节的代码和图像:

    default-ssl

    enter image description here

    scipy.spatial.Delaunay

    所述

    “除非您传入Qhull选项”QJ“,否则Qhull不保证每个输入点在Delaunay三角剖分中显示为顶点。”

    但如果我使用QJ:

    import numpy as np
    from scipy.spatial import Delaunay,delaunay_plot_2d
    import matplotlib.pyplot as plt    
    #input_xyz.txt contains 1000 pts in "X Y Z" (float numbers) format
    points = np.loadtxt("input_xyz.txt", delimiter=" ", usecols=(0, 1))
    tri = Delaunay(points)
    delaunay_plot_2d(tri)
    plt.plot(points[:,0], points[:,1], 'o')
    plt.show()
    

    我得到Qhull错误,如果我使用QJn(n =某个高数字):

    tri = Delaunay(points, qhull_options = "QJ")
    

    要克服这个错误,生成的网格看起来很糟糕 - 整个地方的三角形相互交叉。

    如何使用scipy.spatial.Delaunay将所有点包含到无差错三角网格中?

1 个答案:

答案 0 :(得分:5)

问题是您的数据集未居中。 Qhull(用于进行Delaunay三角测量)不会在默认选项下为您设置数据集中心,因此它会运行以远离原点舍入错误。

你可以在三角测量之前自己居中

points -= points.mean(axis=0)
tri = Delaunay(points)