Universidad de Costa Rica. Escuela de Computación. CI-0202 Principios de informática
2018a. Grupo 04. **Examen 02** [14-Jun-2018]. Profesor [Jeisson Hidalgo-Céspedes](mailto:jeisson.hidalgo@ucr.ac.cr).
---
# Centro de gravedad (centroide)
Supóngase que en un complejo siderúrgico se quiere construir una máquina troqueladora que marque o perfore en las piezas laminadas su centro de gravedad (centroide) a diferentes diámetros. Las piezas metálicas deben tener formas poligonales. Actualmente los obreros calculan la ubicación del centroide manualmente, pero es un cálculo muy tedioso y propenso a errores que frecuentemente provoca el desecho de piezas que estaban en buen estado. Se quiere que el cálculo del centro de gravedad lo haga la máquina misma.
El diseño de la máquina se ha dividido en varias etapas. Un equipo diseña el mecanismo de medición de la pieza. Consiste en una escáner óptico. El obrero desliza la pieza debajo del escáner y éste identifica los bordes de la pieza. Una vez concluido el escaneo, el mecanismo de medición pasa las coordenadas de los vértices de la pieza metálica al segundo módulo, el cual usted debe implementar.
El segundo módulo recibe la cantidad de vértices y las coordenadas `(x, y)` de cada uno de ellos, y debe calcular la coordenada del centro de gravedad de la pieza. Esta coordenada será usada por el tercer módulo que marca o perfora el centroide en la pieza metálica. Si un polígono consta de `n` vértices ubicados en las coordenadas $(x\_1, y\_1), (x\_2, y\_2), ..., (x\_n, y\_n)$, su centroide ubicado en $(x\_c, y\_c)$ se puede obtener con las relaciones:
$$x\_c = \frac{1}{6A} \sum\_{i=0}^{n-1}{\left(x\_i + x\_{i+1}\right) \left(x\_i y\_{i+1} - x\_{i+1} y\_i\right)}$$
$$y\_c = \frac{1}{6A} \sum\_{i=0}^{n-1}{\left(y\_i + y\_{i+1}\right) \left(x\_i y\_{i+1} - x\_{i+1} y\_i\right)}$$
donde $A$ es el área con signo del polígono y se obtiene mediante la relación:
$$A = \frac{1}{2} \sum\_{i=0}^{n-1}{\left(x\_i y\_{i+1} - x\_{i+1} y\_i\right)}$$
Si el recorrido de los vértices se hace en sentido de las manecillas del reloj, se obtendrá un área negativa, pero no afecta para el cálculo del centroide. Dado que el polígono es cerrado, se debe cumplir que el último vértice es el mismo que se usó como primero del recorrido, es decir, $(x\_n, y\_n) == (x\_0, y\_0)$.
**Entrada de ejemplo**:
5
0 2
-2 8
-6 1
-4 -6
6 2
**Salida de ejemplo**:
(-1.66, 0.49)
La ilustración representa en el plano el polígono del ejemplo de entrada. Las coordenadas del polígono podrían ser números reales. Sugerencia: Represente el polígono como una matriz de coordenadas.
## Evaluación
1. [30%] Utiliza arreglos o matrices para representar el polígono.
2. [30%] Divide la solución en subrutinas, por ejemplo, para leer el polígono, calcular el área, calcular el centroide.
3. [30%] Implementa correctamente las fórmulas para calcular el área y el centroide.
4. [10%] Aplica buenas prácticas de programación: identificadores significativos (por ejemplo: `vértice` en lugar de `i`), indentación (sangría), y paréntesis balanceados.
5. [10% extra] Transcribe su solución a HackerRank y la corrige para pasar los casos de prueba.