B樣條(B-spline)
如果三次樣條是一條平滑曲線,那麼 B 樣條是製作這種曲線的一組巧妙「積木」——一個基底。每個 B 樣條是一個只在少數幾個相鄰區間上非零的小凸包狀函數;你把這些凸包的加權拷貝堆疊起來,就能建出任何樣條曲線。「B」代表基底(basis)。
固定一串結點(斷點)與一個次數,該次數的 B 樣條基底函數 B_i 由 Cox-de Boor 遞迴定義:0 次 B 樣條是單一區間上簡單的方塊(指示)函數,而每提高一次,就以兩個較低次鄰居的加權混合建成,把方塊黏成越來越平滑的凸包。三個事實使它們強大。它們有「局部支撐」:每個 B_i 只在少數幾個結點上非零,所以當你移動一個係數 c_i 時,曲線 sum_i c_i B_i(x) 只有局部改變——對互動式設計再完美不過。它們構成「單位分割」(處處相加為 1 且非負),這給出凸包性質:曲線停留在其控制點的凸包內,絕不劇烈過衝。而透過 de Boor 演算法——樣條版的霍納法則——計算既快又數值穩定。
B 樣條是電腦輔助幾何設計的語言:字型、車身、動畫路徑與 CAD 曲面幾乎全由 B 樣條或其加權表親 NURBS(非均勻有理 B 樣條)建成。三次樣條以二階導數表達的同一條曲線,B 樣條以控制點係數表達——同一族平滑曲線,但這個表示法是為塑形與編輯而調校,而非為精確穿過量測資料。一個誠實的區別:預設情況下,B 樣條曲線「不」插值其控制點(它「逼近」它們,停留在其凸包內);要讓 B 樣條恰好穿過給定的點,你得為係數解一個插值方程組。
一個均勻三次 B 樣條基底函數是一個橫跨四個區間的單一平滑凸包,升起又降到零。在每個結點放一個這樣的凸包,各以一個控制點的高度縮放,再相加——你就得到一條平滑曲線,可藉拖曳個別控制點來操控其形狀,每個控制點只影響其局部鄰域。
以控制點權重相加的局部凸包——改一個,動一處。
B 樣條曲線通常「逼近」其控制點(停留在其凸包內),預設並不穿過它們。要用 B 樣條「插值」給定的資料點,你必須先解出控制係數。