7.8. Centroide.

El centro de masas es el punto en una figura donde toda la masa actúa como si estuviera concentrada. Dicho de otra forma, es el punto en el cuál podríamos balancear a la figura si la sostuviéramos con un dedo. El centro de masa no necesariamente coincide con el centro geométrico de la figura.

El centroide, también conocido en física como centro de gravedad y en geometría como baricentro, es el caso especial del centro de masas en el que el objeto tiene su peso uniformemente distribuido, o si la figura y densidad del objeto son simétricas en ese punto. Si todas las masas son iguales, o si no las tomamos en cuenta, al centroide también se le conoce como isobaricentro.

Para calcular el centroide podemos utilizar las fórmulas:

Si queremos calcular el centroide de una figura compleja, podemos dividir la figura en varias partes para después combinarlas mediante las fórmulas:

Si en un polígono tenemos que el peso se concentra en los vértices, donde un vértice k tiene peso mk, y el peso total del sistema es de M, el centroide está definido por:

Y si todos los pesos son iguales, entonces el centroide lo encontramos en el promedio de los vértices:

En cambio, si en el polígono tenemos que el peso se distribuye uniformemente a través del cuerpo, tenemos que:

Donde A es el área del polígono, y al igual que con el cálculo del área, el primer punto se repite al final. En el caso especial del triángulo, esta fórmula nos da el lugar donde se cortan las medianas.


Problema ejemplo


Centro de Masas

Problema
Encuentra el centro de masas de un polígono convexo.

Entrada
Una serie de polígonos convexos, definidos mediante un número n (n ≤ 100) que indica la cantidad de puntos del polígono, seguido por n pares únicos de enteros (en ningún orden en particular), denotando las componentes x e y de las coordenadas de cada punto. La entrada termina con un “polígono” falso con m (m < 3) puntos, el cual no deberá ser procesado. Ningún polígono contendrá tres puntos alineados.

Salida
Para cada polígono, una línea con las coordenadas x e y del centro de masas del polígono, redondeado a tres dígitos decimales.

Solución: Nos piden el centro de masas de un polígono convexo, y como no se mencionan pesos, supondremos que el peso a través del polígono es uniforme por lo que podemos encontrar el centro de masas calculando el centroide, utilizando las últimas dos fórmulas.


Código



En la primera líneas declaramos la estructura de un punto. Después tenemos las variables que vamos a utilizar. En el arreglo p guardamos las coordenadas de los puntos, en n la cantidad de vértices del polígono, en c el centroide y utilizamos i para los ciclos.

En seguida tenemos la función turn y quicksort que son prácticamente iguales a la de la sección anterior. El único cambio en la ordenación es que utilizamos c en lugar de a[0].

En la función mass_center calculamos el centroide (líneas 15 a 40). Sabemos que se trata de un polígono convexo, pero los puntos no se encuentran necesariamente en orden. Para ordenarlos, vamos a utilizar un punto que esté dentro del polígono y utilizándolo como referencia, vamos a ordenar por giros (al igual que en problema anterior). También podemos ordenar por pendientes como en el problema de la sección 7.2, con la diferencia de que necesitaríamos calcular las pendientes con respecto al punto con menor valor en y (desempatamos con el valor en x). El punto que vamos a utilizar para calcular los giros, es el promedio de todos los vértices (líneas 19 a 25). Una vez que están ordenados, agregamos el primer vértice al final del arreglo (línea 27) y utilizamos las fórmulas. Podemos ver que las dos fórmulas tienen una parte en común, y que esta parte es la que utilizamos para obtener el área en secciones anteriores. Teniendo esto en cuenta, calculamos la parte en común de las fórmulas en t (línea 30), y en s vamos guardando el acumulado. Después calculamos las componentes en x e y. Por último, dividimos las componentes entre tres veces s, ya que s va a tener el valor del doble del área.

Entre las líneas 39 y 49 tenemos la parte principal del código. Empezamos leyendo la cantidad de puntos que contiene el polígono y mientras sean igual o mayores que tres procesamos la entrada. Después leemos las coordenadas de todos los puntos (líneas 43 y 44), calculamos el centro de masa (línea 45) e imprimimos el resultado (línea 46). Terminamos leyendo la cantidad de puntos del siguiente polígono.


Caso ejemplo

Entrada: 4 0 1 1 1 0 0 1 0
3 1 2 1 0 0 0
7
-4 -4
-6 -3
-4 -10
-7 -12
-9 -8
-3 -6
-8 -3
1
Desarrollo: orden: (0,0), (1,0), (1,1), (0,1)
i   t   s   cx  cy
1:  0;  0;  0;  0
2:  1;  1;  2;  1
3:  1;  2;  3;  3
4:  0;  2;  3;  3
cx= 3/(3*2)= 0.5; cy= 3/(3*2)= 0.5

orden: (0,0), (1,0), (1,2)
i   t   s   cx  cy
1:  0;  0;  0;  0
2:  2;  2;  4;  4
3:  0;  2;  4;  4
cx= 4/(3*2)= 0.667; cy= 4/(3*2)= 0.667

orden: (-6,-3), (-8,-3), (-9,-8), (-7, -12), (-4, -10),
(-3, -6), (-4, -4)
i   t    s     cx     cy
1:  -6;  -6;    84;    36
2:  37;  31;  -545;  -371
3:  52;  83; -1377; -1411
4:  22; 105; -1619; -1895
5:  -6;  99; -1577; -1799
6: -12;  87; -1493; -1679
7: -12;  75; -1373; -1595
cx= -1373/(3*75)= -6.102; cy= -1595/(3*75)= -7.089
Salida: 0.500 0.500
0.667 0.667
-6.102 -7.089


Código en C



Tiempo de ejecución

Lenguaje Fecha Tiempos [s] Memoria [Kb]
Ejecución Mejor Mediana Peor
Pascal 06-Jun-2006 0.777 0.316 1.258 9.131 324
C 06-Jun-2006 0.738 404





© Pier Paolo Guillen Hernandez
World of πer