如何计算具有三角形面的网格的质心?

Ami*_*mir 3 c++ python math 3d mesh

我想根据以下描述计算网格的新质心。但我不想使用 Blender 的内置函数来计算质心,如此处所述,因为它们似乎没有给我我期望获得的质心。首先,我想计算网格的网格质心的面(三角形)的中心。然后我需要计算面部面积。新的质心是网格面中心的平均值,按其面积加权。我如何在 Python 中执行此操作(但不一定使用 Blender 的 Python API)?

Sir*_*s 5 5

请注意,Spektre 的答案给出了网格表面积的质心,这可能就是您想要的。

如果您想要网格体积的中心(例如假设密度恒定的质心),则需要执行以下操作:

  1. 使用三角形的 3 个顶点加上原点,从每个三角形创建一个四面体。
  2. 计算每个四面体的有符号体积和中心
  3. 将体积和体积加权中心相加
  4. 通过将体积加权中心之和除以总体积来获取网格中心

伪代码:

meshVolume = 0
temp = (0,0,0)

for each triangle in mesh (with vertices v1, v2, v3)
  center = (v1 + v2 + v3) / 4          // center of tetrahedron
  volume = dot(v1, cross(v2, v3)) / 6  // signed volume of tetrahedron
  meshVolume += volume
  temp += center * volume

meshCenter = temp / totalVolume
Run Code Online (Sandbox Code Playgroud)