摘要:曲線的光滑處理技術在許多領域得到了廣泛的應用,其常用方法是將平面上欲連接的點作為控制多邊形的頂點,通過相應的數(shù)學變換,得到曲線上的點。而為了更準確地表現(xiàn)曲線,通常希望光滑后的曲線能經(jīng)過這些點。文章介紹了通過B樣條插值法使曲線經(jīng)過平面已知點的方法及其在計算機上的實現(xiàn),通過實驗得到了較好的效果。
關鍵詞:曲線光滑;B樣條;控制多邊形;頂點;B樣條插值
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2009)15-4000-02
The Technology and Application of Curve Smoothing Based on B-spline Interpolation
ZHUANG Zhong, XIAO Zheng
(Chengdu Neusoft Vocational Institute of Information Technology, Dujiangyan 611844, China)
Abstract: The curve smoothing technology has been widely used in many areas. The commonly used method is to treat the plane points as the polygon vertex, through the corresponding mathematical transform, obtain the curve’s points. But in order to accurately perform curve, people hope the smoothing curve pass the original points. The paper introduces the method by which the curve passed the original points through B-spline interpolation. Through the experimental on computer, the result is satisfactory.
Key words: curve smoothing; B-spline; control polygon;Vertex; B-spline interpolation
1 引言
傳統(tǒng)的曲線光滑處理技術是將平面上的點作為控制多邊形的頂點,通過相應的數(shù)學變換,得到曲線上的點,然后將這些點連接起來即得到光滑曲線。然而,為了更準確地表現(xiàn)曲線,我們希望光滑后的曲線能經(jīng)過平面上的已知點。我們把曲線上的點稱為型值點,構成該曲線的控制多邊形的頂點稱為頂點。于是問題就變成根據(jù)給定型值點計算多邊形的頂點問題[1]。因此,需要發(fā)展一種方法以便根據(jù)給定的點列Pi(i=1,2,…,n)計算控制頂點Vj(j=1,2,…,n+1,n+2),使其定義的曲線通過點列Pi(i=1,2,…,n)并以Pi為曲線段的結點。
2 三次B樣條插值
三次均勻B樣條曲線的矩陣表示為:
計算多邊形頂點Vj(j=1,2,…,n+1,n+2),尚需補充兩個適當?shù)倪吔鐥l件,才能使方程組有惟一解。有多種邊界條件可供選擇,最為廣泛應用的算法是:節(jié)點矢量兩端點為四重節(jié)點且給定曲線兩端點條件時的計算方法。利用重節(jié)點端點條件的基函數(shù)構造準均勻B樣條曲線有其獨特的優(yōu)點,即曲線過首、末兩個端點。對于反算情況,該法亦具有明顯的優(yōu)越性[2]。應用重節(jié)點后,基函數(shù)不再是一個統(tǒng)一的標準型式,相應地,各方程組亦有所不同。為清晰地說明算法的基本原理,我們假設曲線段數(shù)≥5。經(jīng)過一系列的推導過程,我們可以得到如公式(3):
其首端點V1=P1,末端頂點Vn+2=Pn。
3 計算機實現(xiàn)
方程組(3)實際上是一個三對角方程組,我們用追趕法可用計算機程序解該方程組。下面是該程序,通過該程序可得到控制多邊形的頂點。然后,可根據(jù)這些頂點,構造光滑曲線,則這些曲線就會經(jīng)過平面上的已知點列。
void CtttView::CaculateCtlPoint(std::vector
{vector
n=OrigPoint.size();
double l[50][50],u[50][50];
double x[50],y[50],x1[50];
double c[50],d[50],b[50],b1[50],a[50];
c[0]=-3;
c[n-2]=0.25;
c[n-1]=0;
d[0]=d[n-1]=9;
d[1]=d[n-2]=0.5833333;
a[0]=0;
a[1]=0.25;
a[n-1]=-3;
……
y[0]=b1[0]/d[0];
for(int i=1;i y[i]=(b1[i]-a[i]*y[i-1])/l[i][i]; x1[n-1]=y[n-1]; for(int i=n-2;i>=0;i--) x1[i]=y[i]-u[i][i+1]*x1[i+1]; CtlPoint.push_back(OrigPoint[0]); for(int i=0;i CtlPoint.push_back(CPoint(x[i],x1[i])); CtlPoint.push_back(OrigPoint[n-1]); } 得到的光滑曲線如圖1所示,從圖中可以看到,曲線經(jīng)過了平面上的已知點。 4 結束語 曲線的光滑處理是計算機圖形圖像處理領域非常重要的內(nèi)容。為了使曲線能準確地遵循平面已知點,通過三次均勻B樣條插值法,得到了控制多邊形的頂點,而后再構造光滑曲線,通過實驗得到了較為理想的效果。 參考文獻: [1] 施法中.計算機輔助幾何設計與非均勻有理B樣條[M].北京:高等教育出版社,2001. [2] Bowyer A. Computing Dirichlet Tesselations[J].Computer Journal,1981(24):162-166.