@Override
	public float interpolate( float fraction ) {
		if( fraction <= 0 || fraction >= 1 )
			return fraction;

		// use binary search
		float low = 0;
		float high = 1;
		while( true ) {
			float mid = (low + high) / 2;
			float estimate = cubicBezier( mid, x1, x2 );
			if( Math.abs( fraction - estimate ) < 0.0005f )
				return cubicBezier( mid, y1, y2 );
			if( estimate < fraction )
				low = mid;
			else
				high = mid;
		}
	}
Creates a cubic bezier easing interpolator with the given control points.
The start point of the cubic bezier curve is always 0,0 and the end point 1,1.

@param x1 the x coordinate of the first control point in range [0, 1]
@param y1 the y coordinate of the first control point in range [0, 1]
@param x2 the x coordinate of the second control point in range [0, 1]
@param y2 the y coordinate of the second control point in range [0, 1]
flatlaf-core/src/main/java/com/formdev/flatlaf/util/CubicBezierEasing.java