我在PyVista中使用Delaunay 3D函数生成了一个三角形网格。我想计算网格的表面积,将所有三角形的面积相加。有没有办法从Delaunay结果中获得单纯形三角形的索引?
import pyvista as pv
cloud = pv.PolyData(points)
volume = cloud.delaunay_3d(alpha = 2.5)
shell = volume.extract_geometry()
shell.plot()
我知道我可以用Scipy来做这件事,但不管出于什么原因,Scipy生成了一个不正确的网格(并且没有我可以在Delaunay方法中调整的属性):
from scipy.spatial import Delaunay
tri = Delaunay(points)
print(tri.simplices)
[[386 466 377 613]
[159 386 377 613]
[159 386 466 613]
...
[696 709 695 691]
[696 710 711 691]
[696 697 711 691]]
我的目标是遍历三角形并计算网格的表面积。
1条答案
按热度按时间bfnvny8b1#
PyVista
PolyData
对象已经有一个area
属性,该属性可以将单元格区域相加。例如,考虑单位球面上的随机点:
对我来说这印
第一个值是球体上三角点云的总面积,第二个值是完美单位球体的精确表面。看起来不错。
此外,还有其他类似的属性,例如,
volume
表示无间隙曲面(您拥有的):换句话说,如果只查找总面积,则不需要顶点索引。
(If如果你 * 确实 * 还想要顶点,那么可以通过
triangulated.faces
来获取信息。我的建议是查看triangulated.faces.reshape(-1, 4)[:, 1:]
,它是(n_cells, 3)
形状的二维数组,其中每行对应一个给定的三角形,该行中的三个整数是构成相应三角形的三个点的索引。)