五阶 Bezier 曲线在参数 u 处的切矢与曲率计算
设五阶 Bézier 曲线有 6 个控制点:P0,P1,P2,P3,P4,P5,其中每个 Pi=(xi,yi,zi) 为三维空间中的点。
曲线的参数方程为: C(u) = ∑_(i=0)^5 P_i B_(5,i)(u), u ∈ [0, 1] 其中 Bernstein 基函数为: B_(n,i)(u) = C(n,i) u^i (1-u)^(n-i) 且二项式系数 C(n,i) = n! / (i!(n-i)!)
1. 切矢(一阶导数)
五阶 Bézier 曲线的一阶导数(切矢)为: C'(u) = 5 ∑_(i=0)^4 (P_(i+1) - P_i) B_(4,i)(u)
其中四次 Bernstein 基函数 B_(4,i)(u) 为: B_(4,0)(u) = (1-u)^4 B_(4,1)(u) = 4u(1-u)^3 B_(4,2)(u) = 6u^2(1-u)^2 B_(4,3)(u) = 4u^3(1-u) B_(4,4)(u) = u^4
端点解析解: 当 u = 0 时:C'(0) = 5(P_1 - P_0) 当 u = 1 时:C'(1) = 5(P_5 - P_4)
2. 曲率
曲率 κ(u) 的计算公式为: κ(u) = || C'(u) × C''(u) || / || C'(u) ||^3
首先计算二阶导数 C''(u): C''(u) = 20 ∑_(i=0)^3 (P_(i+2) - 2P_(i+1) + P_i) B_(3,i)(u)
其中三次 Bernstein 基函数 B_(3,i)(u) 为: B_(3,0)(u) = (1-u)^3 B_(3,1)(u) = 3u(1-u)^2 B_(3,2)(u) = 3u^2(1-u) B_(3,3)(u) = u^3
3.端点解析解: 当 u = 0 时:C''(0) = 20(P_2 - 2P_1 + P_0) 当 u = 1 时:C''(1) = 20(P_5 - 2P_4 + P_3)
然后计算叉积 C'(u) × C''(u): 设 C'(u) = (C'_x, C'_y, C'_z),C''(u) = (C''_x, C''_y, C''_z),则: C'(u) × C''(u) = ( C'_y C''_z - C'_z C''_y , C'_z C''_x - C'_x C''_z , C'_x C''_y - C'_y C''_x )
最后,计算曲率: κ(u) = √[ (C'_y C''_z - C'_z C''_y)^2 + (C'_z C''_x - C'_x C''_z)^2 + (C'_x C''_y - C'_y C''_x)^2 ] / ( √(C'_x^2 + C'_y^2 + C'_z^2) )^3
4.说明:
- 在实际编程实现中,当 u 非常接近 0 或 1 时(例如 |u| < 10^{-10} 或 |u-1| < 10^{-10}),应优先使用上述端点解析解,以避免浮点数精度误差。
- 若 || C'(u) || 接近零(速度为零),则曲率定义为 0 或未定义。