提问人:aaxx 提问时间:6/4/2022 更新时间:6/5/2022 访问量:718
初始化三角形网格,例如基于具有顶点坐标的 np 数组和具有三角形坐标的 np 数组的 VTK
Initialize triangular mesh in e.g. VTK based on np array with coordinates of vertices and np array with triangles
问:
你能告诉我如何基于具有顶点坐标的 np 数组和带有三角形的 np 数组初始化三角形网格(它包含来自第一个数组的顶点索引的三元组)?
可以在 VTK 或任何其他 Python 库中完成,最终目标是对这个网格进行抽取。
谢谢。
答:
2赞
mmusy
6/5/2022
#1
使用 vedo
的解决方案,它基于 vtk:
https://github.com/marcomusy/vedo/blob/master/examples/basic/buildmesh.py
from vedo import Mesh, show
verts = [(50,50,50), (70,40,50), (50,40,80), (80,70,50)]
faces = [(0,1,2), (2,1,3), (1,0,3)]
# (the first triangle face is formed by vertex 0, 1 and 2)
# Build the polygonal Mesh object:
mesh = Mesh([verts, faces])
#mesh.decimate()
show(mesh)
评论
0赞
aaxx
6/5/2022
谢谢!你能告诉我是否有办法从抽取的网格中获取三角形和顶点的数组吗?
1赞
mmusy
6/5/2022
是的,只需使用 和my_decimated_mesh.points()
.faces()
0赞
aaxx
6/6/2022
谢谢。该库是否提供了抽取网格与原始网格差异的度量值?
0赞
mmusy
6/6/2022
嗯,是的,你可以用方法计算与原始的距离。.distanceTo()
2赞
Ali_Sh
6/5/2022
#2
您可以使用多个库:
特里梅什
Trimesh
是最好的之一;它可以在 Colab 上用于显示:
import trimesh
verts = [[50,50,50], [70,40,50], [50,40,80], [80,70,50]]
faces = [[0,1,2], [2,1,3], [1,0,3]]
mesh = trimesh.Trimesh(vertices=verts, faces=faces)
mesh.show()
# for facet in mesh.facets:
# mesh.visual.face_colors[facet] = trimesh.visual.random_color()
# mesh.split()
# mesh.show()
科学皮
1. 凸壳
:
import scipy as sp
from scipy.spatial import ConvexHull
import matplotlib as mpl
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d as a3
verts = np.array(verts)
hull = ConvexHull(verts)
indices = hull.simplices
faces = verts[indices]
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.set_xlim([35, 85])
ax.set_ylim([35, 85])
ax.set_zlim([35, 85])
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
for f in faces:
face = a3.art3d.Poly3DCollection([f])
face.set_color(mpl.colors.rgb2hex(np.random.rand(3)))
face.set_edgecolor('k')
face.set_alpha(0.5)
ax.add_collection3d(face)
plt.show()
2. 德劳内
:
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Delaunay
verts = np.array(verts)
tri = Delaunay(verts)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')
ax.azim = 70
ax.plot_trisurf(verts[:, 0], verts[:, 1], verts[:, 2], triangles=tri.simplices, cmap=plt.cm.Spectral)
plt.show()
下一个:如何扩展或“扩展”一维数组?
评论