Geometry: Difference between revisions
Jump to navigation
Jump to search
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..." |
imported>Zq8 |
||
(One intermediate revision by the same user not shown) | |||
Line 29: | Line 29: | ||
int n = x.length; | int n = x.length; | ||
double cross; | double cross; | ||
for( int i = 1; i < | for( int i = 1; i < n; i++ ){ | ||
cross = x[i-1]*y[i] - x[i]*y[i-1]; | cross = x[i-1]*y[i] - x[i]*y[i-1]; | ||
a[0] += cross; | a[0] += cross; | ||
Line 37: | Line 37: | ||
a[0] += cross; | a[0] += cross; | ||
a[0] /= 2; | 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; | if( a[0] < 0 ) a[0] *= -1; | ||
return a; | return a; | ||
} | } |
Latest revision as of 17:13, 21 April 2016
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;
}