matplotlib 立方体上的Delaunay三角剖分

cigdeys3  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(202)

我必须创建一个三维立方体与一组点的学校。但是当我尝试使用Delaunay三角测量时,我得到了一个不好的结果。有人知道怎么解决吗?我真的是一个初学者与这种工具,对不起,如果这是一个明显的错误。

import matplotlib.pyplot as plt
from scipy.spatial import Delaunay
import numpy as np

ax = plt.axes(projection='3d')
ax.view_init(15, -30)
points = np.vstack([x, y, z]).T
tri = Delaunay(points)
ax.plot_trisurf(x,y,z, triangles = tri.simplices ,
    linewidth=0.5, facecolors='cyan', linewidths=1, edgecolors='r', alpha=.70, antialiased=True)

浊点:

三角测量后:

我已经尝试改变Delaunay函数中的一些参数,但似乎没有任何效果。

ne5o7dgx

ne5o7dgx1#

Delaunay细分生成单形:二维的三角形三维的四面体所以这里你得到了四面体。您可以提取它们的面(三角形),然后继续使用ax.plot_trisurf

import matplotlib.pyplot as plt
from scipy.spatial import Delaunay
import numpy as np

# extract the four triangular faces of a tetrahedron
def simplex2triangles(sx):
    return np.array([
      [sx[0], sx[1], sx[2]],  
      [sx[0], sx[1], sx[3]],  
      [sx[0], sx[2], sx[3]],  
      [sx[1], sx[2], sx[3]]  
    ])

# cube vertices
points= np.array([
    [0,0,0],
    [4,0,0],
    [4,4,0],
    [0,4,0],
    [0,0,4],
    [4,0,4],
    [4,4,4],
    [0,4,4]
])

# apply Delaunay tetrahedralization
tri = Delaunay(points)
# extract tetrahedra
tetrahedra = tri.simplices
# extract all triangles
triangles = np.vstack(np.apply_along_axis(simplex2triangles, 1, tri.simplices))
# there are duplicated triangles, remove them (remark: it could remain some dups up to the order...)
triangles = np.unique(triangles, axis = 0)

# plot
x = points[:, 0]
y = points[:, 1]
z = points[:, 2]
ax = plt.axes(projection='3d')
ax.view_init(15, -30)
ax.plot_trisurf(x, y, z, triangles = triangles, 
    linewidth=0.5, linewidths=1, edgecolors='r', alpha=.70, antialiased=True)

我不知道为什么facecolors不工作。


还要注意我在Python中相当新手。

相关问题