Da Wikipedia :
O centróide de um polígono fechado sem interseção, definido por n vértices ( x 0 , y 0 ), ( x 1 , y 1 ), ..., ( x n - 1 , y n − 1 ) é o ponto ( C x , C y ), onde
e onde A é a área assinada do polígono,
Nestas fórmulas, supõe-se que os vértices sejam numerados em ordem de ocorrência ao longo do perímetro do polígono. Além disso, presume-se que o vértice ( x n , y n ) seja o mesmo que ( x 0 , y 0 ), o que significa que i + 1 no último caso deve fazer um loop em torno de i = 0 . Observe que, se os pontos forem numerados no sentido horário, a área A , calculada como acima, terá um sinal negativo; mas as coordenadas do centróide estarão corretas, mesmo neste caso.
- Dada uma lista de vértices em ordem (no sentido horário ou anti-horário), encontre o centróide do polígono fechado não interceptado por si e representado pelos vértices.
- Se ajudar, você pode assumir que a entrada seja apenas CW ou apenas CCW. Diga isso na sua resposta, se precisar.
- As coordenadas não precisam ser números inteiros e podem conter números negativos.
- A entrada sempre será válida e conterá pelo menos três vértices.
- As entradas só precisam ser manipuladas que se encaixem no tipo de dados de ponto flutuante nativo do seu idioma.
- Você pode assumir que os números de entrada sempre conterão um ponto decimal.
- Você pode assumir que números inteiros de entrada terminam em
.
ou.0
. - Você pode usar números complexos para entrada.
- A saída deve ser precisa até o milésimo mais próximo.
Exemplos
[(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
Veja também cada polígono em um plano de coordenadas, cole as coordenadas sem colchetes no menu "Editar" desta página .
Confirmei meus resultados usando esta Calculadora de pontos centróides do polígono , que é terrível. Não foi possível encontrar um em que você possa inserir todos os vértices de uma só vez ou que não tentou apagar seu -
sinal quando você o digita primeiro. Vou postar minha solução Python para seu uso depois que as pessoas tiverem a chance de responder.
x
s e y
s coloca todo o peso nos vértices em vez de distribuídos ao longo do corpo. O primeiro funciona porque é regular, então os dois métodos acabam no centro de simetria. O segundo funciona porque, para triângulos, os dois métodos levam ao mesmo ponto.