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

  • 相关阅读:
    系统改造/升级项目的注意点
    phpunit相关
    IE浏览器:定义文档兼容性
    pptx,docx,xlsx 文件下载问题
    常用linux命令
    oracle 子查询写法
    QQ上传大文件为什么这么快
    decimal tostring 格式
    2020HDU多校第三场 1005 Little W and Contest
    火车进栈(进出栈的模拟,dfs爆搜)
  • 原文地址:https://www.cnblogs.com/flyuz/p/9497258.html
Copyright © 2011-2022 走看看