4 votos

Qué rápido se nos olvida: la trigonometría básica. Calcular el área de un polígono

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:

  1. Calcula los ángulos interiores del polígono como interior_angle = 180 - (360 / num_sides) .
  2. 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.

3voto

Matt Puntos 11

Encontrará fórmulas sencillas en http://en.wikipedia.org/wiki/Polygon . Busque las distintas fórmulas A = ... en la sección Área y centroide . Encontrarás la fórmula adecuada dependiendo de si conoces las coordenadas cartesianas de los vértices del polígono o las longitudes de los lados y los ángulos (exteriores) en los vértices.

2voto

Justin Standard Puntos 15312

La fórmula trigonométrica clásica para el área del triángulo general ABC, con $\overline{AB} = a$ , $\overline{BC} = b$ y $\widehat{ABC} = \gamma$ es $$A=\frac{1}{2}ab\sin \gamma$$

Sólo deja que $AB$ sea el siguiente lado de su polígono convexo y que $C$ ser cualquier punto dentro de ella. Iterar sobre los lados y deberías obtener lo que quieres.

Si su polígono es convexo, tendrá que asegurarse de detectar los solapamientos entre sus triángulos para poder descontarlos adecuadamente. Incluso en ese caso, es posible que acabes sobrestimando el área de la forma (perdona la horrible imagen):

enter image description here

Incluso si detecta el solapamiento entre los triángulos rojo, amarillo y naranja y elimina las áreas solapadas de la suma el número correcto de veces, sigue contando una vez el área blanca fuera de la forma L pero dentro del triángulo rojo.

Lo que se debe intentar con los polígonos convexos es dividir la forma en triángulos y luego sumar esas áreas. (Personalmente no he estudiado ningún algoritmo de este tipo).

1voto

Beni Bogosel Puntos 15173

Para los polígonos regulares, la fórmula es bien conocida. Prueba el siguiente enlace: http://www.mathopenref.com/polygonregulararea.html

O hazlo tú mismo. Considera todos los triángulos determinados por el centro y dos vértices vecinos. Entonces (si el polígono tiene $n$ lados) tiene $n$ triángulos isósceles congruentes. Halla el área de uno de estos triángulos y multiplícala por $n$ .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X