Python 如何计算三角形面网格的质心?
我想为网格计算一个新的质心,如下所述。但我不想使用Blender的内置函数来计算质心,因为它们似乎没有给出我期望得到的质心。首先,我想计算网格质心的面中心(三角形)。然后我需要计算面面积。新质心是网格面中心的平均值,由其面积加权。如何在Python中做到这一点(但不一定使用Blender的Python API)?让我们用3个顶点定义每个三角形Python 如何计算三角形面网格的质心?,python,c++,math,3d,mesh,Python,C++,Math,3d,Mesh,我想为网格计算一个新的质心,如下所述。但我不想使用Blender的内置函数来计算质心,因为它们似乎没有给出我期望得到的质心。首先,我想计算网格质心的面中心(三角形)。然后我需要计算面面积。新质心是网格面中心的平均值,由其面积加权。如何在Python中做到这一点(但不一定使用Blender的Python API)?让我们用3个顶点定义每个三角形p0、p1、p2中心很简单 center = (p0+p1+p2) /3 它只是形成它的所有顶点的平均值。面积可通过叉积计算,如下所示: area = 0
p0、p1、p2
中心很简单
center = (p0+p1+p2) /3
它只是形成它的所有顶点的平均值。面积可通过叉积计算,如下所示:
area = 0.5 * | (p1-p0) x (p2-p0) |
area = 0.5 * length(cross( p1-p0, p2-p0 ))
两者都是一样的,只是符号不同。。。因此,您所描述的质心应该这样计算(在C++中):
float area\u sum=0.0;
vec3质心=vec3(0.0,0.0,0.0);
对于(int i=0;i请注意,Spektre的答案给出了网格表面积的质心,这可能是您想要的
如果希望取而代之的是网格体积的中心(如假设密度恒定的质心),则需要执行以下操作:
使用三角形的3个顶点加上原点,从每个三角形创建一个四面体
计算每个四面体的有符号体积和中心
将体积和体积加权中心相加
通过将体积加权中心之和除以总体积来获得网格中心
伪代码:
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
你的描述正是我将如何进行的,尽管我以前从未这样做过。哪一部分给你带来了麻烦?@MarkRansom我想说的是计算三角形的面积和获得质心点的最后一步。我不完全确定最后的标准化步骤。当你去展示至少一点理解和努力。没有人愿意为你做所有的工作。编辑问题以显示你已经理解的部分。