【问题标题】:Find the centroid of a polygon with weighted vertices找到具有加权顶点的多边形的质心
【发布时间】:2018-12-11 21:07:05
【问题描述】:
我知道如何找到正多边形的质心(质心)。这假设多边形的每个部分的重量相同。
但是我如何计算一个失重多边形的质心(也许是由气凝胶制成的:),每个顶点都有一个权重?
使用直线的简化说明:
5kg-----------------5kg
^center of gravity
10kg---------------5kg
^center of gravity offset du to weight of vertices
当然,我知道如何在具有加权顶点的直线上计算重心,但是如何在具有加权顶点的多边形上计算呢?
感谢您的宝贵时间!
【问题讨论】:
标签:
algorithm
math
geometry
【解决方案1】:
您想对所有顶点进行加权平均。所以说你的顶点是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)
这与你为一条线做的原理基本相同。
【解决方案2】:
1) 为每个顶点生成一个向量
2) 将每个向量乘以顶点的权重
3) 对向量求和
4) 除以总质量
5) 这是你的重心!
【解决方案3】:
公式是:
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;