Bueno, aún me quedan por hacer algunas pruebas para certificar su funcionamiento. Lo pongo aquí porque, con las fiestas, lo mismo me quedo sin el código fuente.
Código C++:
Ver original#include <iostream>
struct Punto
{
double x;
double y;
};
double areaPoligono(struct Punto puntos[], int max, int i )
{
struct Punto* p0 = &puntos[ i ];
struct Punto* p1;
++i;
if ( i < max )
p1 = &puntos[ i ];
else
p1 = &puntos[ 0 ];
double factor1 = ( p1->y - p0->y ) / ( p1->x - p0->x );
double factor2 = p0->y - factor1 * p0->x;
factor1 *= 0.5;
double v0 = ( factor1 * p0->x + factor2 ) * p0->x;
double v1 = ( factor1 * p1->x + factor2 ) * p1->x;
double area = v1 - v0;
if ( i < max )
return area + areaPoligono( puntos, max, i );
else
return area;
}
double areaPoligono(struct Punto puntos[], int n)
{
return fabs( areaPoligono
( puntos
, n
, 0 ) ); }
int main(int , char **)
{
struct Punto puntos[] = { {3,20}, {15,20}, {6,10}, {9,30}, {12,10} }; // Estrella de 5 puntas
int n = sizeof( puntos ) / sizeof( struct Punto );
std::cout << "Area del polígono: " << areaPoligono( puntos, n ) << std::endl;
return 0;
}
Un saludo