可以确定曲线上某点的参数值,而不使用De Casteljau's算法,这可能更简单,但您将需要使用启发式来找到一个好的起始值,并类似地逼近结果。
一种可能的且相对简单的方法是使用牛顿法,如下所示:
tn+1 = tn - ( bx(tn) - cx ) / bx'(tn)
其中,bx(t)指的是多项式形式的某个贝塞尔曲线的x分量,具有控制点x0,x1,x2和x3,bx'(t)是一阶导数,cx是曲线上的一个点,满足以下条件:
cx = bx(t) | 0 < t < 1
bx(t)的系数为:
A = -x0 + 3x1 - 3x2 + x3
B = 3x0 - 6x1 + 3x2
C = -3x0 + 3x1
D = x0
并且:
bx(t) = At3 + Bt2 + Ct + D,
bx'(t) = 3At2 + 2Bt + C
现在找到一个好的起始值插入到牛顿法中是棘手的。对于大多数不包含环或尖点的曲线,您可以简单地使用以下公式:
t_n = ( c_x - x_0 ) / ( x_3 - x_0 ) | x_0 < x_1 < x_2 < x_3
现在您已经有了:
b_x(t_n) ≈ c_x
因此,应用一次或多次牛顿法迭代将更好地近似c_x的t。
请注意,Newton Raphson算法具有二次收敛性。在大多数情况下,一个好的起始值将在两次迭代后产生可忽略的改进,即小于半个像素。
最后值得注意的是,立方贝塞尔曲线通过寻找一阶导数的根来精确解决查找极值问题。因此,有问题的曲线可以在其极值处进行细分,以消除环或尖点,然后通过分析所得到的部分来获得更好的结果。以这种方式细分立方体将满足上述约束条件。