本文介紹了用matlab進行樣條曲線的建立操作與繪製;樣本給出了樣條曲線的建立,求值,求導,繪製
Matlab樣條工具箱中的函數提供了樣條的建立,操作,繪製等功能;
一. 樣條函數的建立
第一步是建立一個樣條函數,曲線或者曲面。這裡的樣條函數,根據首碼,分為4類:
cs* 三次樣條
pp* 分段多項式樣條,係數為t^n的係數
sp* B樣條, 係數為基函數B_n^i(t)的係數
rp* 有理B樣條
二. 樣條操作
樣條操作包括:函數操作:求值,算術運算,求導求積分等等
節點操作:主要是節點重數的調節,設定,修改等等
三. 簡單樣本
% step1: load ctrlpoints and knots
load data_example
% step 2: create the spline
sp = spmak(knots,ctrlpoints');
fnplt(sp,[knots(5),knots(42)]);
% step 3: get points on the curve
dt = knots(5):3:knots(42);
p = fnval(sp,dt);
plot(p(1,:),p(2,:),'.g')
% step 4: get dir draw normals
dp1 = fnder(sp);
dp = fnval(dp1,dt);
len = size(dt,2);
for i = 1:len
dir = dp(:,i);
scale = 1/sqrt(dir(1)^2+dir(2)^2);
dir = dir*scale;
plot([p(1,i),p(1,i)+dir(2)],[p(2,i),p(2,i)-dir(1)],'r');
end
樣本結果
附:樣條工具箱函數
1. 三次樣條函數
csapi 插值產生三次樣條函數
csape 產生給定約束條件下的三次樣條函數
csaps 平滑產生三次樣條函數
cscvn 產生一條插入參數的三次樣條曲線
getcurve 動態產生三次樣條曲線
2. 分段多項式樣條函數
ppmak 產生分段多項式樣條函數
ppual 計算在給定點處的分段多項式樣條函數值
3. B樣條函數
spmak 產生B樣條函數
spcrv 產生均勻劃分的B樣條函數
spapi 插值產生B樣條函數
spap2 用最小二乘法擬合產生B樣條函數
spaps 對產生的B樣條曲線進行光滑處理
spcol 產生B樣條函數的配置矩陣
4. 有理樣條函數
rpmak 產生有理樣條函數
rsmak 產生有理樣條函數
5. 樣條操作函數
fnval 計算在給定點處的樣條函數值
fmbrk 返回樣條函數的某一部分(如斷點或係數等)
fncmb 對樣條函數進行算術運算
fn2fm 把一種形式的樣條函數轉化成另一種形式的樣條函數
fnder 求樣條函數的微分(即求導數)
fndir 求樣條函數的方嚮導數
fnint 求樣條函數的積分
fnjmp 在間斷點處求函數值
fnplt 畫樣條曲線圖
fnrfn 在樣條曲線中插入斷點。
fntlr 產生tarylor係數或taylor多項式
6. 樣條曲線端點和節點處理函數
augknt 在已知節點數組中添加一個或多個節點
aveknt 求出節點數組元素的平均值
brk2knt 增加節點數組中節點的重次
knt2brk 從節點數組中求得節點及其重次
knt2mlt 從節點數組中求得節點及其重次
sorted 求出節點數組的元素在另一節點數組中屬於第幾個分量
aptknt 求出用於產生樣條曲線的節點數組
newknt 對分段多項式樣條函數進行重分布
optknt 求出用於插入的最優節點數組
chbpnt 求出用於產生樣條曲線的合適節點數組
原帖:http://hi.baidu.com/ck436/blog/item/ffd71c4ceba65af4d72afc82.html