为了在给定的行程百分比(t) 上沿三次曲线获得一个单独的点(x, y),以及给定的控制点(x1, y1)、(x2, y2)、(x3, y3) 和(x4, y4),我扩展了De Casteljau 的算法并重新排列方程以最小化指数:
//Generalized code, not C++
variables passed to function: t, x1, y1, x2, y2, x3, y3, x4, y4
variables declared in function: t2, t3, x, y
t2 = t * t
t3 = t * t * t
x = t3*x4 + (3*t2 - 3*t3)*x3 + (3*t3 - 6*t2 + 3*t)*x2 + (3*t2 - t3 - 3*t + 1)*x1
y = t3*y4 + (3*t2 - 3*t3)*y3 + (3*t3 - 6*t2 + 3*t)*y2 + (3*t2 - t3 - 3*t + 1)*y1
(t) 是一个介于 0 和 1 之间的十进制值 (0 <= t <= 1),表示沿曲线行驶的百分比。
x 和 y 的公式相同,您可以编写一个函数来获取一组通用的 4 个控制点或将系数组合在一起:
t2 = t * t
t3 = t * t * t
A = (3*t2 - 3*t3)
B = (3*t3 - 6*t2 + 3*t)
C = (3*t2 - t3 - 3*t + 1)
x = t3*x4 + A*x3 + B*x2 + C*x1
y = t3*y4 + A*y3 + B*y2 + C*y1
对于二次函数,类似的方法产生:
t2 = t * t
A = (2*t - 2*t2)
B = (t2 - 2*t + 1)
x = t2*x3 + A*x2 + B*x1
y = t2*y3 + A*y2 + B*y1