三次B樣條曲線插值c

2021-10-23 17:32:27 字數 1427 閱讀 7027

b樣條擬合通常把離散點集作為控制點來求擬合曲線,原理和過程可參看

如果想要求得過離散點的插值曲線,需要先用離散點反求控制點,然後用求得的控制點擬合曲線。原理在這篇文章中介紹較詳細

通過離散點集反求控制點

*/vector

bsplineinterpolate

(vector discretepoints)

mat v = mat::

zeros

(size(2

, n)

, cv_32f)

;float

* vdata =

(float

*)v.data;

int idx =0;

for_each

(discretepoints.

begin()

, discretepoints.

end(),

[&vdata,

&idx]

(point2f p2f));

v *=6

; mat p = weight.

inv(

)*v;

vector

res(discretepoints.

size()

);float

* pdata =

(float

*)p.data;

idx =0;

for_each

(res.

begin()

, res.

end(),

[&idx, pdata]

(point2f& p2f));

return res;

}求得控制點矩陣之後使用b樣條曲線擬合函式可得到插值曲線圖。

/*b樣條曲線擬合

@return 返回擬合得到的曲線

@discretepoints 輸入的離散點,至少4個點

@closed 是否擬合閉合曲線,true表示閉合,false不閉合

@stride 擬合精度

*/vector

bsplinefit

(vector discretepoints,

bool closed,

double stride)

fittingpoints.

push_back

(totalpoints);}

}return fittingpoints;

}

效果如下圖所示:

b樣條和三次樣條 樣條曲線

最近在學習軌跡規劃中的軌跡生成,涉及到樣條曲線方面的知識,總結一下。曲線的平滑性和相應的平滑性的評判準則相關,在 1 中,作者採用曲率的平方和曲率導數的平方作為評判準則 其中 是路徑點的方向角。最小化這兩個準則的軌跡分別是圓弧和三階螺旋線,並對在對稱和不對稱情況下如何生成路徑進行了分析,事實表明三階...

三次樣條曲線

include include using namespace std const int m 16 double dknowx m double dknowy m double dknowdy m double dknowddy m const int n 15 double dinsertx n...

b樣條和三次樣條 B樣條 貝塞爾曲線和b樣條曲線

在數學的子學科數值分析裡,b 樣條是樣條曲線一種特殊的表示形式。它是b 樣條基曲線的線性組合。b 樣條是貝茲曲線的一種一般化,可以進一步推廣為非均勻有理b樣.b樣條就相當於乙個函式,這個函式在係數不同時就可以變化成各種曲線形狀.在實際生產中,我們測量得到的是乙個個離散的點,那麼我們要知道相鄰兩個點之...