Пусть точки будут 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 ).)