在不使用 De Casteljau 算法的情况下确定曲线上某个点的参数值是可能的,而且可能更简单,但是您必须使用启发式方法来找到一个好的起始值并类似地近似结果。
一种可能且相当简单的方法是使用牛顿法,这样:
t n+1 = t n - ( b x (t n ) - c x ) / b x '(t n )
其中b x (t)是指多项式形式的某个贝塞尔曲线的x分量,控制点为x 0、x 1、x 2和x 3,b x '(t)是一阶导数,c x是一个点在曲线上使得:
c x = b x (t) | 0 < t < 1
b x (t)的系数为:
A = -x 0 + 3x 1 - 3x 2 + x 3
B = 3x 0 - 6x 1 + 3x 2
C = -3x 0 + 3x 1
D = x 0
和:
b x (t) = At 3 + Bt 2 + Ct + D,
b x '(t) = 3At 2 + 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 算法具有二次收敛性。在大多数情况下,一个好的起始值在两次迭代后将导致可以忽略不计的改进,即小于半个像素。
最后值得注意的是,三次贝塞尔曲线具有通过找到一阶导数的根来找到极值的精确解。因此,有问题的曲线可以简单地在它们的极值处细分以去除环或尖点,然后通过分析有问题的结果部分可以获得更好的结果。以这种方式细分三次方将满足上述约束。