public static double biLerp(double x, double y, double q00, double q01,
                                double q10, double q11, double x1, double x2, double y1, double y2) {
    """
	Calculates the value at x,y using bilinear interpolation
	
	@param x the X coord of the value to interpolate
	@param y the Y coord of the value to interpolate
	@param q00 the first known value (x1, y1)
	@param q01 the second known value (x1, y2)
	@param q10 the third known value (x2, y1)
	@param q11 the fourth known value (x2, y2)
	@param x1 the X coord of q00 and q01
	@param x2 the X coord of q10 and q11
	@param y1 the Y coord of q00 and q10
	@param y2 the Y coord of q01 and q11
	@return the interpolated value
    """
        double q0 = lerp(x, x1, x2, q00, q10);
        double q1 = lerp(x, x1, x2, q01, q11);
        return lerp(y, y1, y2, q0, q1);
    }
public static double biLerp(double x, double y, double q00, double q01,
                                double q10, double q11, double x1, double x2, double y1, double y2) {
        double q0 = lerp(x, x1, x2, q00, q10);
        double q1 = lerp(x, x1, x2, q01, q11);
        return lerp(y, y1, y2, q0, q1);
    }
public static double biLerp ( double x , double y , double q00 , double q01 , double q10 , double q11 , double x1 , double x2 , double y1 , double y2 ) { double q0 = lerp ( x , x1 , x2 , q00 , q10 ) ; double q1 = lerp ( x , x1 , x2 , q01 , q11 ) ; return lerp ( y , y1 , y2 , q0 , q1 ) ; }
Calculates the value at x,y using bilinear interpolation

@param x the X coord of the value to interpolate
@param y the Y coord of the value to interpolate
@param q00 the first known value (x1, y1)
@param q01 the second known value (x1, y2)
@param q10 the third known value (x2, y1)
@param q11 the fourth known value (x2, y2)
@param x1 the X coord of q00 and q01
@param x2 the X coord of q10 and q11
@param y1 the Y coord of q00 and q10
@param y2 the Y coord of q01 and q11
@return the interpolated value
Calculates the value at x y using bilinear interpolation