2010-05-14 2 views
6

Я знаю, как найти центроид (центр масс) правильного многоугольника. Это предполагает, что каждая часть многоугольника весит то же самое. Но как вычислить центроид невесомого многоугольника (сделанный из аэрогеля, возможно, :), где каждая вершина имеет вес?Найти центроид многоугольника со взвешенными вершинами

Упрощенная иллюстрация того, что я имею в виду, используя прямую линию:

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

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

Конечно, я знаю, как рассчитать центр тяжести на прямой линии с взвешенными вершинами, но как я могу сделать это на полигоне с взвешенными вершинами?

Спасибо за ваше время!

+0

Ну это своего рода «не-программирование», хотя мне нравятся математические вопросы. –

ответ

13

Вы хотите получить средневзвешенное значение по всем вершинам. Поэтому скажем, что ваши вершины 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) 

Это по существу тот же принцип, что и при использовании для линии.

+0

Отлично, спасибо! –

+0

На самом деле вы можете назвать это определение центроида :) –

0

формульной будет:

Mc = (sum_from_0_to_max (вершины) (m_i * P_i)/М)

где Mc является центром масс, m_i масса вершины я, P_i положение и M - общая масса.

Попробуйте Google для «твердых тел», я думаю, вы найдете много полезной информации.

Edit:

В коде было бы что-нибудь вроде этого:

Vector3D результат; // инициализируется 0, 0, 0
Vector3D temp; // сумма
long sumMasses = 0;
для (Вершины v: вершины) {
temp + = (v.mass * v.position);
sumMasses + = v.mass;
}
результат = temp/sumMasses;

5

1) Создание вектора для каждой вершины

2) Умножить каждый вектор для веса вершины

3) Сумма векторов

4) Деление на общую массу

5) Там ваш центр масс!

+0

OMG. , , , , , , –

+0

@ Камило Мартин Почему? В чем проблема? – nico

+0

Нет проблем. Я думаю, ему просто нравится простота :) – pheelicks

Смежные вопросы