Из Википедии :
Центроид несамопересекающегося замкнутого многоугольника, определенного n вершинами ( x 0 , y 0 ), ( x 1 , y 1 ), ..., ( x n - 1 , y n − 1 ), является точка ( C x , C y ), где
и где A - площадь со знаком полигона,
В этих формулах предполагается, что вершины пронумерованы в порядке их появления по периметру многоугольника. Кроме того, предполагается , что вершина ( x n , y n ) совпадает с ( x 0 , y 0 ), что означает, что i + 1 в последнем случае должно повторяться до i = 0 . Обратите внимание, что если точки нумеруются по часовой стрелке, область A , вычисленная, как указано выше, будет иметь отрицательный знак; но координаты центроида будут правильными даже в этом случае.
- Учитывая список вершин по порядку (по часовой стрелке или против часовой стрелки), найдите центр тяжести несамопересекающегося замкнутого многоугольника, представленного вершинами.
- Если это помогает, вы можете считать, что вводом является только CW или только CCW. Скажи так в своем ответе, если вам это нужно.
- Координаты не обязательно должны быть целыми числами и могут содержать отрицательные числа.
- Ввод всегда будет действительным и содержать как минимум три вершины.
- Входные данные должны обрабатываться только в соответствии с типом данных с плавающей запятой вашего языка.
- Вы можете предположить, что входные числа всегда будут содержать десятичную точку.
- Вы можете предположить, что входные целые числа заканчиваются на
.
или.0
. - Вы можете использовать комплексные числа для ввода.
- Вывод должен быть точным с точностью до тысячных.
Примеры
[(0.,0.), (1.,0.), (1.,1.), (0.,1.)] -> (0.5, 0.5)
[(-15.21,0.8), (10.1,-0.3), (-0.07,23.55)] -> -1.727 8.017
[(-39.00,-55.94), (-56.08,-4.73), (-72.64,12.12), (-31.04,53.58), (-30.36,28.29), (17.96,59.17), (0.00,0.00), (10.00,0.00), (20.00,0.00), (148.63,114.32), (8.06,-41.04), (-41.25,34.43)] -> 5.80104769975, 15.0673812762
Чтобы увидеть каждый многоугольник на координатной плоскости, вставьте координаты без квадратных скобок в меню «Правка» этой страницы .
Я подтвердил свои результаты, используя этот многоугольный калькулятор точек центроида , который ужасен. Я не смог найти тот, в который можно было бы ввести все вершины одновременно, или который не пытался стереть свой -
знак при первом его вводе . Я опубликую свое решение Python для вашего использования после того, как у людей будет возможность ответить.
x
s и y
s помещает весь вес в вершины, а не распределяется по телу. Первый из них работает, потому что он регулярный, поэтому оба метода оказываются в центре симметрии. Второй работает, потому что для треугольников оба метода приводят к одной и той же точке.