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

  • 相关阅读:
    windown reids
    redis 类型、方法
    nginx 路由配置
    http status code
    beego orm mysql
    thinkphp5
    beego
    MAC 更新brew 镜像源
    php session存入redis
    ios项目开发— iOS8 定位功能API改变
  • 原文地址:https://www.cnblogs.com/flyuz/p/9497258.html
Copyright © 2020-2023  润新知