Вычислите центроид 3D плоского полигона

Это - подобный вопрос этому здесь.

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

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

alt text

alt text

alt text

Что относительно 3D аналога?

6
задан Community 23 May 2017 в 12:33
поделиться

3 ответа

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

2
ответ дан 8 December 2019 в 18:35
поделиться

Пусть точки будут равны 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 - v 0 ) × (v i + 1 - v 0 ) | ÷ 2 , где × - векторное произведение, а | · | - длина вектора.

Возможно, вам придется сделать площадь отрицательной, чтобы компенсировать вогнутые части. Простая проверка - вычислить (v i - v 0 ) × (v i + 1 - v 0 ) · (V 1 - v 0 ) × (v 2 - v 0 ) . Область должна иметь такой же знак, что и результат.

Поскольку соотношение площадей 2D-фигур при параллельной проекции является постоянным, вы можете выбрать единичный вектор (например, z), не параллельный плоскости, тракт (v i - v 0 ) × (v i + 1 - v 0 ) · 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 = ½ | v i −v 0 | | v i + 1 −v 0 | sin θ i , где cos θ i = (v i −v 0 ) · (v i + 1 −v 0 ).)

4
ответ дан 8 December 2019 в 18:35
поделиться

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

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

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

7
ответ дан 8 December 2019 в 18:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: