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

Mir*_*iro 3 python delaunay scipy

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

  1. 网格有错误
  2. 网格不包括所有点

情节的代码和图像:

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

scipy.spatial.Delaunay所述:

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

但如果我使用QJ:

tri = Delaunay(points, qhull_options = "QJ")
Run Code Online (Sandbox Code Playgroud)

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

tri = Delaunay(points, qhull_options = "QJ200")
Run Code Online (Sandbox Code Playgroud)

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

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

pv.*_*pv. 5

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

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

points -= points.mean(axis=0)
tri = Delaunay(points)
Run Code Online (Sandbox Code Playgroud)