好多有關B樣條插值的博客寫的只是部分內容,一上來就是基函數,沒有寫整個pipeline,一開始看的我是一臉懵逼,我大概梳理一下開發過程,細節不講,注意這個博客只針對開發需求做B樣條插值,是插值!
1. 開發需求:
基於PCL的數據結構對無序點雲自動排序;
基於PCL進行3維線條形點雲插值,要求穿過每個線條形點雲的三維點;
2. B樣條插值種類:
2.1 分段貝塞爾曲線:B樣條和NURBS的基礎;
2.2 均勻B樣條;
2.3 準均勻B樣條:首尾節點階數+1的樣條;
2.4 非均勻有理B樣條曲線(NURBS):高階玩家發明的B樣條,我也不會;
建議看下大神的博客,見參考文獻1
3. pipeline:
3.1 計算控制點[P0,..,Pn],見參考文獻2
3.1.1 求[u0,...,un]
3.1.2 求N矩陣
通過基函數和邊界求導(矩陣欠定義了,根據三點估算導數/bessel tangent)把N矩陣填好
3.1.3 求F矩陣
源點雲和邊界求導填入F矩陣
3.1.4 求控制點
最後把控制點求出來
3.2 求插值點
有了控制點Pi和節點列表ui,自己要有一個插值點列表(我的插值點是3.1.1求的Un除以某個用戶輸入的點數要求,即準均勻B樣條插值),首先判斷插值點列表的插值點在節點列表的哪個位置,然後帶到
求解C(k)
參考文獻
Fun with geometry: http://www.whudj.cn/?p=450
Fun with geometry: http://www.whudj.cn/?p=623