float GetBezier(Vector2 start, Vector2 controlStart, Vector2 end, Vector2 controlEnd, float point)
{
float pointNow = GetLinear (start.x, end.x, point);
float pointTemp;
float areaNow = 0.5f;
float rangeNow = 0.5f;
float basePow1;
float basePow2;
float basePow3;
float areaNowPow2;
for (int i=0; i<8; i++) {
basePow1 = 1.0f - areaNow;
basePow2 = basePow1 * basePow1;
basePow3 = basePow2 * basePow1;
areaNowPow2 = areaNow * areaNow;
pointTemp = (basePow3 * start.x)
+ (3.0f * basePow2 * areaNow * (controlStart.x + start.x))
+ (3.0f * basePow1 * areaNowPow2 * (controlEnd.x + end.x))
+ (areaNow * areaNowPow2 * end.x);
rangeNow *= 0.5f;
areaNow += ((pointTemp > pointNow) ? (-rangeNow) : (rangeNow));
}
areaNowPow2 = areaNow * areaNow;
basePow1 = 1.0f - areaNow;
basePow2 = basePow1 * basePow1;
basePow3 = basePow2 * basePow1;
return((basePow3 * start.y)
+ (3.0f * basePow2 * areaNow * (controlStart.y + start.y))
+ (3.0f * basePow1 * areaNowPow2 * (controlEnd.y + end.y))
+ (areaNow * areaNowPow2 * end.y)
);
}