三階(三次)Bezier曲線的曲率極值及其對應的參數 u 的計算是一個復雜的非線性優化問題。由于三階Bezier曲線是參數化曲線,其曲率表達式較為復雜,通常無法通過解析方法直接求得所有極值點,但可以通過求解曲率導數為零的方程來獲得極值點對應的參數u∈[0,1]。
1. 三階 Bezier 曲線定義
設控制點為 P?, P?, P?, P?,則曲線表達式為:
B(u) = (1-u)^3*P_0 + 3*(1-u)^2*u*P_1 + 3*(1-u)*u^2*P_2 + u^3*P_3, u ∈ [0,1]
2. 一階與二階導數
- 一階導數(速度向量):
B′(u) = 3*(1-u)^2*(P_1 - P_0) + 6*(1-u)*u*(P_2 - P_1) + 3*u^2*(P_3 - P_2)
- 二階導數(加速度向量):
B″(u) = 6*(1-u)*(P_2 - 2*P_1 + P_0) + 6*u*(P_3 - 2*P_2 + P_1)
3. 平面曲線的曲率公式(假設在二維平面)
設曲線為平面曲線,記:
- B′(u) = (x′(u), y′(u))
- B″(u) = (x″(u), y″(u))
則曲率 κ(u) 為:
κ(u) = |x′(u)*y″(u) - y′(u)*x″(u)| / (x′(u)^2 + y′(u)^2)^(3/2)
4. 曲率極值條件
曲率極值出現在導數 dκ/du = 0 處。令分子為:
N(u) = x′(u)*y″(u) - y′(u)*x″(u)
分母為:
D(u) = (x′(u)^2 + y′(u)^2)^(3/2)
則 κ(u) = |N(u)| / D(u)。忽略絕對值(考慮符號變化),令導數為零:
dκ/du = 0 ? [N′(u)*D(u) - N(u)*D′(u)] / D(u)^2 = 0 ? N′(u)*D(u) - N(u)*D′(u) = 0
代入后可得一個關于 u 的 5 次多項式方程:
F(u) = 0, u ∈ [0,1]
其中 F(u) 是由 x′, y′, x″, y″ 及其導數構成的多項式,最高次數為 5。
5. 計算步驟(實用方法)
給定控制點 P?, P?, P?, P?,寫出 B′(u) 和 B″(u) 的 x, y 分量。
計算:
- N(u) = x′(u)*y″(u) - y′(u)*x″(u)
- D(u) = (x′2 + y′2)^(3/2)
計算N′(u) 和 D′(u)(對 u 求導)。
構造方程:N′(u)*(x′2 + y′2)^(3/2) - N(u)*(3/2)*(x′2 + y′2)^(1/2)*(2*x′*x′′ + 2*y′*y′′) = 0
兩邊同除 (x′2 + y′2)^(1/2)(當速度非零時),得:N′(u)*(x′2 + y′2) - 3*N(u)*(x′*x′′ + y′*y′′) = 0
展開后得到一個?5 次多項式:a_5*u^5 + a_4*u^4 + a_3*u^3 + a_2*u^2 + a_1*u + a_0 = 0
在區間 [0,1] 內求解該方程的所有實根 u_i。
將u_i 以及端點 u=0, u=1 代入 κ(u),比較得到最大/最小曲率及其對應 u 值。
6. 注意事項
- 當 B′(u) = 0(速度為零)時,曲率無定義,需單獨判斷(如尖點)。
- 5 次方程無解析解,建議使用數值方法(如牛頓法、MATLAB 的?
roots
、Python 的?numpy.roots
)求解。 - 實際應用中可使用離散化采樣 + 插值法近似極值。