Saltar al contenido

Calcular el área de un polígono irregular en C #

Te recomendamos que revises esta resolución en un ambiente controlado antes de pasarlo a producción, un saludo.

Solución:

¡Usar expresiones lambda esto se vuelve trivial!

var points = GetSomePoints();

points.Add(points[0]);
var area = Math.Abs(points.Take(points.Count - 1)
   .Select((p, i) => (points[i + 1].X - p.X) * (points[i + 1].Y + p.Y))
   .Sum() / 2);

El algoritmo se explica aquí:

[This method adds] las áreas de los trapezoides definidas por los bordes del polígono cayeron al eje X. Cuando el programa considera un borde inferior de un polígono, el cálculo da un área negativa por lo que se resta el espacio entre el polígono y el eje, dejando el área del polígono.

El área calculada total es negativa si el polígono está orientado en el sentido de las agujas del reloj [so the] función simplemente devuelve el valor absoluto.

Este método da resultados extraños para polígonos no simples (donde los bordes se cruzan).

public float Area(List vertices)

    vertices.Add(vertices[0]);
    return Math.Abs(vertices.Take(vertices.Count - 1).Select((p, i) => (p.X * vertices[i + 1].Y) - (p.Y * vertices[i + 1].X)).Sum() / 2);

Algo así para un polígono simple (compilado con el bloc de notas):

static double GetDeterminant(double x1, double y1, double x2, double y2)

    return x1 * y2 - x2 * y1;


static double GetArea(IList vertices)

    if(vertices.Count < 3)
    
        return 0;
    
    double area = GetDeterminant(vertices[vertices.Count - 1].X, vertices[vertices.Count - 1].Y, vertices[0].X, vertices[0].Y);
    for (int i = 1; i < vertices.Count; i++)
    
        area += GetDeterminant(vertices[i - 1].X, vertices[i - 1].Y, vertices[i].X, vertices[i].Y);
    
    return area / 2;

Aunque su enfoque no presta atención al eje Z. Por lo tanto, aconsejaría aplicar alguna transformación para deshacerse de él: no podrá obtener el área si el polígono no es plano, mientras que si es plano, podrá deshacerse de la tercera dimensión.

Sección de Reseñas y Valoraciones

Puedes añadir valor a nuestra información tributando tu experiencia en los informes.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *