【问题标题】: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)
    

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

    【讨论】:

    • 其实你可以把这个叫做centroid的定义:)
    【解决方案2】:

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

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

    3) 对向量求和

    4) 除以总质量

    5) 这是你的重心!

    【讨论】:

      【解决方案3】:

      公式是:

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

      其中Mc 是质心,m_i 是顶点质量iP_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;
      

      【讨论】:

        猜你喜欢
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 2014-06-30
        • 1970-01-01
        • 2013-11-22
        • 2013-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多