package advanced.gestureSound;
import java.awt.geom.Point2D;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public class Geometry {
// A class for some geometric global functions
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// returns the euclidian distance between two Point2Ds
public static double dist(Point2D p0, Point2D p1) {
double dx = p1.getX() - p0.getX();
double dy = p1.getY() - p0.getY();
double sum = dx*dx + dy*dy;
return Math.sqrt((double)sum);
}
// returns the linear interpolation of two Point2Ds
public static Point2D interpolate(Point2D p0, Point2D p1,double t) {
double x = t * p1.getX() + (1-t) * p0.getX();
double y = t * p1.getY() + (1-t) * p0.getY();
return new Point2D.Double(x,y);
}
// evaluates a bezier defined by the control polygon
// which Point2Ds are given in the array at the value t
public static Point2D evalBezier(Point2D arr[],double t) {
for (int iter = arr.length ; iter > 0 ; iter--) {
for (int i = 1 ; i < iter ; i++) {
arr[i-1] = interpolate(arr[i-1],arr[i],t);
}
}
return arr[0];
}
// evaluates a bezier defined by the control polygon
// which Point2Ds are given in the array at the value t
// Note: this function is recursive
public static Point2D evalBezierRec(Point2D arr[],double t,int iter) {
if (iter == 1)
return arr[0];
for (int i = 1 ; i < iter ; i++) {
arr[i-1] = interpolate(arr[i-1],arr[i],t);
}
return evalBezierRec(arr,t,iter-1);
}
}