It is well-known that a $d$-dimensional polynomial Bézier curve of degree $n$ can be subdivided into two segments using the famous de Casteljau algorithm in $O(dn^2)$ time. Can this problem be solved more efficiently? In this paper, we show that it is possible to do this in $O(dn\log{n})$ time using the fast Fourier transform and its inverse. Experiments show that the direct application of the new method performs well only for small values of $n$, as the algorithm is numerically unstable. However, a slightly modified version -- which still has $O(dn\log{n})$ computational complexity -- offers good numerical quality, which is confirmed by numerical experiments conducted in \textsf{Python}. Moreover, the new method has a nice property: if a Bézier curve is extended by an additional control point, the subdivision can be updated in $O(d)$ time. A similar idea can be applied to speed up the subdivision of rational Bézier curves and rectangular Bézier surfaces, as well as to compute the derivatives of Bézier curves more efficiently.
翻译:众所周知,一条$n$次$d$维多项式Bézier曲线可通过著名的de Casteljau算法在$O(dn^2)$时间内细分为两段。该问题能否更高效地解决?本文表明,利用快速傅里叶变换及其逆变换,可在$O(dn\log{n})$时间内完成细分。实验显示,新方法的直接应用仅在$n$值较小时表现良好,因为算法存在数值不稳定性。然而,一种略微修改的版本——仍保持$O(dn\log{n})$计算复杂度——实现了良好的数值质量,这一点已通过用\textsf{Python}进行的数值实验得到验证。此外,新方法具有一个优良性质:若Bézier曲线增加一个控制点,其细分可在$O(d)$时间内更新。类似思想可应用于加速有理Bézier曲线和矩形Bézier曲面的细分,以及更高效地计算Bézier曲线的导数。