A continuación una pequeña función que te ayudará a calcular el área de cualquier polígono a partir de la lista de puntos (Punto3D ya conocido). Al final se devuelve el área como un valor absoluto, el signo del resultado del área también puede servirte para conocer la dirección del polígono (horaria o trigonométrica).
/// <summary>
/// Obtiene el área de un polígono
/// </summary>
/// <param name=”Coords“>Lista de vértices del polígono</param>
/// <returns>El área calculada del polígono</returns>
public static double GetArea (List<Point3D> Coords)
{
double area = 0;
int i = 0;
if (Coords.Count > 0)
{
for (i = 0; i <= Coords.Count – 2; i++)
{
area += Coords[i].x * Coords[i + 1].y – Coords[i].y * Coords[i + 1].x;
}
i = Coords.Count – 1;
area += Coords[i].x * Coords[0].y – Coords[i].y * Coords[0].x;
}
return Math.Abs(area) / 2;
}
Para ponerlo a prueba puedes escribir un método parecido al siguiente:
private void areaDePolígonoToolStripMenuItem_Click(object sender, EventArgs e)
{
List<Point3D> pts = new List<Point3D>();
pts.Add(new Point3D(10, 5, 0));
pts.Add(new Point3D(10, 10, 0));
pts.Add(new Point3D(12.5, 10, 0));
pts.Add(new Point3D(15, 12.5, 0));
pts.Add(new Point3D(17.5, 12.5, 0));
pts.Add(new Point3D(17.5, 5, 0));
pts.Add(new Point3D(15, 5, 0));
pts.Add(new Point3D(15, 7.5, 0));
pts.Add(new Point3D(12.5, 5, 0));
MessageBox.Show(“Area obtenida: “ + MyClase.GetArea(pts).ToString(), “Text”,
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Si todo va bien deberías recibir un resultado parecido al siguiente para estas coordenadas:
Ponlo a prueba, piensa en cómo mejorarlo y comparte con nosotros tus progresos.