Da Wikipedia :
Il centroide di un poligono chiuso non autointersecante definito da n vertici ( x 0 , y 0 ), ( x 1 , y 1 ), ..., ( x n - 1 , y n − 1 ) è il punto ( C x , C y ), dove
e dove A è l'area firmata del poligono,
In queste formule si presume che i vertici siano numerati in ordine di occorrenza lungo il perimetro del poligono. Inoltre, si presume che il vertice ( x n , y n ) sia lo stesso di ( x 0 , y 0 ), il che significa che i + 1 nell'ultimo caso devono essere circondati da i = 0 . Notare che se i punti sono numerati in senso orario, l'area A , calcolata come sopra, avrà un segno negativo; ma le coordinate del centroide saranno corrette anche in questo caso.
- Dato un elenco di vertici in ordine (in senso orario o antiorario), trova il centroide del poligono chiuso non autointersecante rappresentato dai vertici.
- Se aiuta, puoi supporre che l'input sia solo CW o solo CCW. Dillo nella tua risposta se lo richiedi.
- Le coordinate non devono essere numeri interi e possono contenere numeri negativi.
- L'input sarà sempre valido e conterrà almeno tre vertici.
- Gli input devono essere gestiti solo per adattarsi al tipo di dati in virgola mobile nativo della tua lingua.
- Si può presumere che i numeri di input conterranno sempre un punto decimale.
- Si può presumere che gli interi di input finiscano in
.o.0. - È possibile utilizzare numeri complessi per l'input.
- L'output deve essere accurato al millesimo più vicino.
Esempi
[(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
Per vedere ogni poligono su un piano di coordinate, incolla le coordinate senza le parentesi quadre nel menu "Modifica" di questa pagina .
Ho confermato i miei risultati usando questo poligono Centroid Point Calculator , che è terribile. Non sono riuscito a trovarne uno in cui è possibile inserire tutti i vertici contemporaneamente o che non ha tentato di cancellare il -segno quando lo si digita per primo. Pubblicherò la mia soluzione Python per il tuo uso dopo che le persone avranno avuto la possibilità di rispondere.
xs ymette tutto il peso nei vertici invece che distribuito sul corpo. Il primo funziona perché è regolare, quindi entrambi i metodi finiscono nel centro di simmetria. Il secondo funziona perché per i triangoli entrambi i metodi portano allo stesso punto.

