vtk-py求3d模型表面积

Posted flyuz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vtk-py求3d模型表面积相关的知识,希望对你有一定的参考价值。

模型格式:.obj

环境:python3.6+vtk7.1

vtk版:

 1 import vtk
 2 
 3 filename = "XXXX.obj"
 4 reader = vtk.vtkOBJReader()
 5 reader.SetFileName(filename)
 6 reader.Update()
 7 triangleFilter = vtk.vtkTriangleFilter()
 8 triangleFilter.SetInputData(reader.GetOutput())
 9 triangleFilter.Update()
10 
11 polygonProperties = vtk.vtkMassProperties()
12 polygonProperties.SetInputData(triangleFilter.GetOutput())
13 polygonProperties.Update()
14 
15 area = polygonProperties.GetSurfaceArea()
16 print(area)

自己写的版本:

先将文件数据读入数组face,和vertices

 1 #计算3d 面片面积
 2 def getarea(a, b, c):
 3     ab = np.sqrt((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2 + (a[2] - b[2]) ** 2)
 4     ac = np.sqrt((a[0] - c[0]) ** 2 + (a[1] - c[1]) ** 2 + (a[2] - c[2]) ** 2)
 5     bc = np.sqrt((b[0] - c[0]) ** 2 + (b[1] - c[1]) ** 2 + (b[2] - c[2]) ** 2)
 6     s = (ab + ac + bc) / 2.0
 7     area = np.sqrt(s * (s - ab) * (s - ac) * (s - bc))
 8     return area
 9 def getarea(self):   #总片面面积
10     for index in self.faces:
11         self.area = self.area + getarea(self.vertices[index[0]-1], self.vertices[index[1]-1], self.vertices[index[2]-1])

经测试,两个算出来的误差非常小,可以使用。

但是如果用vtk算体积的话,会有误差,可能适合模型封闭性有关。

 

以上是关于vtk-py求3d模型表面积的主要内容,如果未能解决你的问题,请参考以下文章

unity3d里面想利用贴图实现模型表面有凹凸质感具体如何操作?

计算机视觉:在表面上生成液滴的 3D 模型

892. Surface Area of 3D Shapes

3D模型

洛谷 P1187 3D模型

Unity中Shader的三种基本类型