З Вікіпедії :
Центроїд замкнутого багатокутника, що не перетинається, визначений n вершинами ( x 0 , y 0 ), ( x 1 , y 1 ), ..., ( x n - 1 , y n − 1 ) є точка ( C x , C y ), де
і де А - підписана площа полігону,
У цих формулах вершини вважають нумерованими в порядку їх виникнення по периметру багатокутника. Крім того, вершина ( 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 додає всю вагу у вершини, а не розподіляється по тілу. Перший трапляється, тому що він працює регулярно, тому обидва методи закінчуються в центрі симетрії. Другий працює, тому що для трикутників обидва методи ведуть до однієї точки.