Вычислить центроид трехмерного плоского многоугольника - PullRequest
6 голосов
/ 01 марта 2010

Этот вопрос похож на этот один здесь .

Учитывая список трехмерных координат, определяющих поверхность (Point3D1, Point3D2, Point3D3 и т. Д.), Как рассчитать центроид поверхности?

В 2D вычисление дается следующей формулой :

alt text

alt text

alt text

А как насчет 3D-аналога?

Ответы [ 3 ]

7 голосов
/ 02 марта 2010

Просто используйте уравнения, которые у вас есть дважды, но во второй раз поменяйте местами z на y .

То есть вычислите центроиды двух проекций, одна на плоскость x-y , а другая на плоскость x-z . Центроиды проекций будут проекциями реального центроида, поэтому ответом будут значения x , y и z , которые вы найдете в этих двух расчетах .

Более конкретно: если ваши точки (x1, y1, z1), (x2, y2, z2), ..., чтобы получить центроид xy, (Cx, Cy), сделайте вычисление, используя (x1, y1), (x2, y2), ... и для получения центроида xz, (Cx, Cz) используйте точки (x1, z1), (x2, z2), .... - просто выполните второй расчет с той же 2D формулой, рассматривая значения z как y в уравнении. Тогда ваш 3D-центроид будет (Cx, Cy, Cz). Это будет работать до тех пор, пока ваша поверхность плоская и не параллельна плоскостям x-y, x-z или y-z (но если она параллельна, это просто 2D-уравнение).

4 голосов
/ 01 марта 2010

Пусть точки будут v 0 , v 1 , ..., v N против часовой стрелки, где v i = (x i , y i , z i ).

Затем триплеты (v 0 , v 1 , v 2 ), (v 0 , v 2 , v 3 ), ..., (v 0 , v i , v i + 1 ),. .., (v 0 , v N-1 , v N ) образуют N-1 треугольники, которые создают многоугольник.

Площадь каждого треугольника | (v i & minus; v 0 ) & times; (v i + 1 & minus; v 0 ) | &делить; 2 , где & раз; это перекрестный продукт и | & Мидот; | длина вектора.

Возможно, вам придется сделать область отрицательной, чтобы компенсировать вогнутые части. Простая проверка состоит в том, чтобы вычислить (v i & minus; v 0 ) & times; (v i + 1 & minus; v 0 ) & middot; (v 1 & minus; v 0 ) & times; (v 2 & minus; v 0 ) . Область должна иметь тот же знак, что и результат.

Поскольку отношение площади двухмерных фигур при параллельной проекции является постоянным, вы можете выбрать единичный вектор (например, z), не параллельный плоскости, значение (v i & minus; v 0 ) & times; (v i + 1 & minus; v 0 ) & middot; z как площадь. При этом вам не нужно выполнять дорогой квадратный корень, и проверка знака автоматически выполняется.

Центроид каждого треугольника равен (v 0 + v i + v i + 1 ) & делить; 3 .

Следовательно, центр тяжести всего многоугольника, при условии равномерной плотности,

                1       N-1
centroid = ——————————    ∑  ( centroid-of-triangle-i × area-of-triangle-i )
           total-area   i=1

(Для размеров ≥ 4D площадь должна быть вычислена с помощью A i = & frac12; | v i & minus; v 0 | | v i + 1 & minus; v 0 | sin & theta; i , где cos & theta; i = (v i & minus; v 0 ) & middot; (v i + 1 & minus; v 0 ).)

2 голосов
/ 01 марта 2010

Если это плоская поверхность, вы можете преобразовать ее в локальную по отношению к плоскости систему координат, рассчитать центроид, используя представленные вами формулы, а затем преобразовать обратно, чтобы получить его координаты в трехмерном пространстве.

...