Geometry
polygon area
convex, concave...doesn't matter! still works!
/**
* polygon area
* @param x array of x values
* @param y array of y values
* @return the area
*/
public double polygonArea( double[] x, double[] y ){
double a = 0;
for( int i = 1; i < x.length; i++ ) a += x[i-1]*y[i] - x[i]*y[i-1];
a += x[x.length-1]*y[0] - x[0]*y[x.length-1];
a /= 2;
return Math.abs(a);
}
polygon centroid
center of mass
/**
* calculates polygon area AND centroid
* @param x array of x values
* @param y array of y values
* @return {area,x coordinate,y coordinate}
*/
public double[] polygonAreaCentroid( double[] x, double[] y ){
double[] a = new double[3];
int n = x.length;
double cross;
for( int i = 1; i < n; i++ ){
cross = x[i-1]*y[i] - x[i]*y[i-1];
a[0] += cross;
a[1] += cross*(x[i-1]+x[i]); a[2] += cross*(y[i-1]+y[i]);
}
cross = x[n-1]*y[0] - x[0]*y[n-1];
a[0] += cross;
a[0] /= 2;
a[1] += cross*(x[n-1]+x[0]); a[2] += cross*(y[n-1]+y[0]);
a[1] /= 6*a[0]; a[2] /= 6*a[0];
if( a[0] < 0 ) a[0] *= -1;
return a;
}