使用加权顶点查找多边形的重心

11
我知道如何找到正多边形的重心(质心),这假设多边形的每一部分重量相同。但是如果我要计算一个无重量的多边形(例如由气凝胶制成的多边形), 其中每个顶点都有一个权重,该怎么办呢?
以下是使用直线简单说明我所说的内容:
5kg-----------------5kg
           ^center of gravity

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

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

感谢您的时间!

3个回答

23

你希望对所有顶点进行加权平均。假设你的顶点是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)

这其实跟你为一行代码实现此功能的原理是一样的。


事实上,你可以称之为质心的定义 :) - Aryabhatta

6

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

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

3)对向量求和

4)除以总质量

5)这就是你的质心!


1

公式如下:

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

其中Mc是质心,m_i是顶点i的质量,P_i是位置,M是总质量。

尝试在谷歌上搜索“刚体”,我想你会找到很多有用的信息。

编辑:

在代码中,它应该是这样的:

   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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接