|
Area de un polígono irregular: producto en cruz |
|
martes, 16 de enero de 2007 |
|
Página 5 de 5
Bueno... con esta última fórmula, ya tenemos bien sencillo utilizarla en cualquier programa.
Por ejemplo, observa cómo la hemos utilizado en esta clase Poligono, programada en C#. Básicamente, ésta clase contiene una lista de puntos ordenada. Cada punto representa a un vértice del polígono. Por supuesto, este ejemplo no es funcional, sólo es una mini demostración de cómo implementar el algoritmo descrito en éste artículo.
class Punto
{
public double x, y;
public Punto(double x, double y)
{
this.x=x;
this.y=y;
}
} //Punto
//-------------
class Poligono
{
//lista de vértices
//Suponemos que siguen sentido horario o
//antihorario y que ningún segmento cruza a
//otro. Cada vértice aparece una sola vez
//en la lista. El último se une al primero
List<punto> vertices = new List<punto>();
public void nuevoVertice(Punto p)
{
vertices.Add(p);
}
public double area()
{
double suma=0;
int i;
//Sólo calculamos si el polígono tiene
//al menos tres vértices
if (vertices.Count>=3) {
//producto en cruz desde 1 hasta n-1
for(i=0;i<vertices.Count-1;i++) {
suma+=vertices[i].x*vertices[i+1].y-
vertices[i].y*vertices[i+1].x;
}//for
//ahora el último con el primero
i=vertices.Count-1;
suma+=vertices[i].x*vertices[0].y-
vertices[i].y*vertices[0].x;
}//if
return Math.Abs(suma) / 2;
}//area
}//class
Para probar, basta crear un polígono, y añadir unos cuantos vértices.
//ejemplo utilización
Poligono p = new Poligono();
p.nuevoVertice(new Punto(2, 3));
p.nuevoVertice(new Punto(7, 1));
p.nuevoVertice(new Punto(5, 7));
Console.WriteLine(p.area());
|