Geometry

From programming_contest
Revision as of 03:59, 16 February 2015 by imported>Kmk21 (Created page with "=polygon area= convex, concave...doesn't matter! still works! <syntaxhighlight line lang="java"> /** * polygon area * @param x array of x values * @param y array of y value...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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 < x.length; 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;
	if( a[0] < 0 ) a[0] *= -1;
	a[1] += cross*(x[n]+x[0]); a[2] += cross*(y[n]+y[0]);
	a[1] /= 6*a[0]; a[2] /= 6*a[0];
	return a;
}