Creo que la forma más fácil de hacerlo es con trigonometría, pero he olvidado la mayoría de las matemáticas que aprendí en la escuela. Estoy escribiendo un programa (con fines demostrativos) que define una Forma, y calcula los ángulos interiores de la forma, en función del número de lados.
Ahora intento calcular el área en función de la longitud de cada uno de esos lados.
Así que dado un cuadrado, sabemos que tiene 4 lados. Y dado que la longitud de cada uno de esos lados es 8, deberíamos ser capaces de calcular el área (sé que un cuadrado es fácil... pero la misma fórmula tiene que funcionar para polígonos con más/menos lados).
Lo que he hecho, es esto:
- Calcula los ángulos interiores del polígono como
interior_angle = 180 - (360 / num_sides)
. - Dividimos el polígono en igual número de triángulos isósceles y luego dividimos cada uno de ellos en 2 triángulos rectángulos, suponiendo que esto simplifica la lógica. Aquí es donde estoy atascado.
Como el ángulo interior del polígono es conocido, lo he dividido por 2 para obtener el ángulo de una esquina de estos triángulos, sabiendo que hay otro ángulo de 90º. Así que mi lógica me dice
# Polgygon: sides = 4, length = 8
interior_angle = 180 - (360 / sides) = 90
a = interior_angle / 2 = 45
# Given that tan(a) = height / base
base = length / 2 = 4
tan(a) = height / base
# therefore
height = tan(a) * base = tan(45) * 4
Esto me da 6.47
como la altura (creo que es incorrecto... ¿no debería ser sólo una ronda 3?).
Ahora, para obtener el área de todo el polígono, sólo tengo que calcular el área de cada triángulo y multiplicarla por el número de lados:
area = 0.5 * height * length * sides
Para mi cuadrado de 8 * 8, esto me da 51.83
Así que está claro que me he equivocado de lógica. Si hay una forma más sencilla de calcular el área de un polígono uniforme, basada en el número de lados y la longitud de cada lado, por favor, instrúyeme :) Sólo necesito convertir las matemáticas en código para un programa de ordenador.