Find the centroid of a polygon with weighted verti

2019-06-17 03:56发布

I know how to find the centroid (center of mass) of a regular polygon. This assumes that every part of the polygon weighs the same. But how do I calculate the centroid of a weightless polygon (made from aerogel perhaps :), where each vertex has a weight?

Simplified illustration of what I mean using straight line:

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

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

Of course, I know how to calculate the center of gravity on a straight line with weighted vertices, but how do I do it on a polygon with weighted vertices?

Thanks for your time!

3条回答
劫难
2楼-- · 2019-06-17 04:38

The formula would be:

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

where Mc is the center of the masses, m_i is the mass of vertex i, P_i the position and M the overall mass.

Try to google for "rigid bodies", I guess you will find a lot helpfull information.

Edit:

In code it would be something like this:

   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;
查看更多
Bombasti
3楼-- · 2019-06-17 04:51

You want take a weighted average over all the vertices. So say your vertices are v1, v2, v3 .... vn with masses m1, m2 ...mn and have x and y coordinates v1x, v1y, v2x, v2y etc then to get the center of mass (cx, cy) you want:

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

It's essentially the same principle as when you do it for a line.

查看更多
我只想做你的唯一
4楼-- · 2019-06-17 04:52

1) Generate a vector for each vertex

2) Multiply each vector for the weight of the vertex

3) Sum the vectors

4) Divide for total mass

5) There's your center of mass!

查看更多
登录 后发表回答