找到具有加权顶点的多边形的质心

时间:2010-05-14 08:28:16

标签: algorithm math geometry

我知道如何找到正多边形的质心(质心)。这假设多边形的每个部分都重量相同。 但是我如何计算失重多边形的质心(也许是由气凝胶制成:),每个顶点都有一个重量?

简化说明我的意思是使用直线:

5kg-----------------5kg
           ^center of gravity

10kg---------------5kg
        ^center of gravity offset du to weight of vertices

当然,我知道如何计算带有加权顶点的直线上的重心,但是如何在具有加权顶点的多边形上进行重心?

谢谢你的时间!

3 个答案:

答案 0 :(得分:17)

您想要对所有顶点进行加权平均。所以说你的顶点是v1,v2,v3 .... vn,质量为m1,m2 ... mn,并且有x和y坐标v1x,v1y,v2x,v2y等然后得到质心(cx,cy)你想要的:

cx = (v1x*m1 + v2x*m2 + ... vnx*mn) / (m1 + m2 .... mn) 
cy = (v1y*m1 + v2y*m2 + ... vny*mn) / (m1 + m2 .... mn)

这与你为一条线做的基本相同。

答案 1 :(得分:6)

1)为每个顶点生成一个向量

2)将每个向量乘以顶点的权重

3)求和矢量

4)除以总质量

5)这是你的中心!

答案 2 :(得分:1)

公式为:

Mc = ( sum_from_0_to_max(vertices)( m_i * P_i ) / M )

其中Mc是质量的中心,m_i是顶点质量iP_i位置和M总质量。< / p>

尝试google“僵尸”,我想你会发现很多有用的信息。

编辑:

在代码中它会是这样的:

   Vector3D result; // initialized with 0, 0, 0  
   Vector3D temp; // sum  
   long sumMasses = 0;  
   for( Vertex v : vertices ) {  
      temp += (v.mass * v.position);  
      sumMasses+=v.mass;  
   }  
   result = temp / sumMasses;