Z Wikipedii :
Środek ciężkości nie-przecinającego się zamkniętego wielokąta zdefiniowanego przez n wierzchołków ( x 0 , y 0 ), ( x 1 , y 1 ), ..., ( x n - 1 , y n − 1 ) to punkt ( C x , C y ), gdzie
i gdzie A jest obszarem podpisanym wielokąta,
W tych wzorach zakłada się, że wierzchołki są ponumerowane w kolejności ich występowania wzdłuż obwodu wielokąta. Ponadto zakłada się , że wierzchołek ( x n , y n ) jest taki sam jak ( x 0 , y 0 ), co oznacza, że i + 1 w ostatnim przypadku musi zapętlić się wokół i = 0 . Zauważ, że jeśli punkty są ponumerowane w kolejności zgodnej z ruchem wskazówek zegara, obszar A , obliczony jak powyżej, będzie miał znak ujemny; ale współrzędne środka ciężkości będą prawidłowe nawet w tym przypadku.
- Biorąc pod uwagę listę wierzchołków w kolejności (zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara), znajdź środek ciężkości zamkniętego wielokąta zamkniętego reprezentowanego przez wierzchołki.
- Jeśli to pomoże, możesz założyć, że dane wejściowe to tylko CW lub tylko CCW. Powiedz to w swojej odpowiedzi, jeśli tego potrzebujesz.
- Współrzędne nie muszą być liczbami całkowitymi i mogą zawierać liczby ujemne.
- Dane wejściowe zawsze będą prawidłowe i będą zawierać co najmniej trzy wierzchołki.
- Dane wejściowe muszą być obsługiwane tylko w przypadku rodzimego typu danych zmiennoprzecinkowych w Twoim języku.
- Możesz założyć, że liczby wejściowe zawsze będą zawierały przecinek dziesiętny.
- Możesz założyć, że wejściowe liczby całkowite kończą się na
.
lub.0
. - Możesz używać liczb zespolonych do wprowadzania danych.
- Dane wyjściowe powinny być dokładne z dokładnością do jednej tysięcznej.
Przykłady
[(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
Aby zobaczyć każdy wielokąt na płaszczyźnie współrzędnych, wklej współrzędne bez nawiasów kwadratowych w menu „Edytuj” na tej stronie .
Potwierdziłem swoje wyniki za pomocą tego kalkulatora punktów wielokąta , który jest okropny. Nie mogłem znaleźć takiego, w którym można wprowadzić wszystkie wierzchołki naraz, lub który nie próbował wymazać twojego -
znaku przy pierwszym wpisaniu. Opublikuję moje rozwiązanie Python do użytku po tym, jak ludzie będą mieli okazję odpowiedzieć.
x
si i y
s umieszcza cały ciężar w wierzchołkach zamiast rozkładać je na ciele. Pierwszy przypadek działa, ponieważ jest regularny, więc obie metody kończą się w centrum symetrii. Drugi działa, ponieważ w przypadku trójkątów obie metody prowadzą do tego samego punktu.