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算体积的话,会有误差,可能适合模型封闭性有关。

原文地址:https://www.cnblogs.com/flyuz/p/9497258.html