于雪濤,奚硯濤,朱金燦,牛坤,于書媛
(1.中國礦業(yè)大學(xué)資源與地球科學(xué)學(xué)院,江蘇徐州 221008; 2.航天星圖科技(北京)有限公司,北京 100029)
拋物樣條算法在等值線平滑中的應(yīng)用
于雪濤1?,奚硯濤1,朱金燦2,牛坤1,于書媛1
(1.中國礦業(yè)大學(xué)資源與地球科學(xué)學(xué)院,江蘇徐州 221008; 2.航天星圖科技(北京)有限公司,北京 100029)
在深入研究分段拋物樣條算法的基礎(chǔ)之上,采用Visual Basic.NET2005開發(fā)語言,最終設(shè)計(jì)并實(shí)現(xiàn)了基于該算法的閉合和不閉合的平滑拋物樣條曲線繪制方法。并將該算法應(yīng)用到雨量等值線的平滑中,取得了較為理想的效果。并采用均勻添加型值點(diǎn)的方式,使最終等值線的繪制更加科學(xué)化,避免相交情況的出現(xiàn)。
拋物樣條算法;等值線;閉曲線;開曲線
由于等值線圖用于表示三維空間或可以認(rèn)為是三維空間的現(xiàn)象,看起來非常直觀、形象,因此在天氣預(yù)報(bào)、氣候預(yù)測(cè)分析等方面用得非常多,已成為預(yù)報(bào)員不可缺少的工具之一。如各等壓面層的位勢(shì)高度圖、高空環(huán)流、溫度及降水分布圖等等[1,2]。
在追蹤等值線的過程中,一般都是得到一系列的點(diǎn)集,然后按順序連接這些點(diǎn),生成閉合和不閉合的等值線。此時(shí)得到的等值線,如果不經(jīng)過平滑處理,則最終生成的每條等值線是由多段折線組成,雖然表達(dá)精確,然而并不美觀。尤其在雨量等值線的繪制過程中,習(xí)慣上在繪制雨量等值線圖時(shí)希望略微犧牲一些準(zhǔn)確性而保持曲線的光滑性[3]。
在等值線的平滑算法中,平滑的方法有T-N方法、Bezier方法、B樣條方法、三次樣條方法、拋物樣條方法以及最小二乘法等[4]。其中使用比較多的是B樣條曲線、Bezier曲線和三次樣條曲線方法,而對(duì)于拋物樣條曲線方法,研究和使用的還比較少。
拋物樣條算法的基本原理是選擇較為簡單的拋物線作為基本曲線,來擬合給定離散點(diǎn)所生成的曲線。設(shè)有不在同一直線上的3點(diǎn):p1、p2和p3,則通過3點(diǎn)用矢量表達(dá)式表示的拋物曲線表達(dá)式為:p(t)=A1+A2t+A3t2(0≤t≤1),然后再設(shè)定3個(gè)獨(dú)立條件:
(1)拋物線段以p1點(diǎn)為始點(diǎn),即當(dāng)參變量t=0時(shí),曲線過p1點(diǎn);
(2)拋物線段以p3點(diǎn)為終點(diǎn),即當(dāng)參變量t=1時(shí),曲線過p3點(diǎn);
(3)當(dāng)參變量t=0.5時(shí),拋物線過p2點(diǎn),并且該點(diǎn)的切矢量等于p3-p1。
在這3個(gè)條件下,構(gòu)造的拋物線段如圖1所示。根據(jù)3個(gè)條件建立方程并聯(lián)立求解,計(jì)算得到3個(gè)系數(shù)A1、A2和A3并帶入拋物線的表達(dá)式最后得:
圖1 過三點(diǎn)定義拋物線
圖2 重疊區(qū)間
設(shè)有一離散型值點(diǎn)列Pi(i=1,2,…,n),每經(jīng)過相鄰3點(diǎn)做一段拋物線,由于有n個(gè)型值點(diǎn),故可以做n-2條拋物線段。第i條拋物線段的表達(dá)式為:
同理,得第i+1條拋物線段Si+1(ti+1)。一般來說,每兩段曲線之間的重疊區(qū)間,兩條拋物線是不可能完全重合的,如圖2所示。為此,采用加權(quán)合成法讓兩條曲線按照一定的規(guī)則結(jié)合成一條曲線。設(shè)定共同區(qū)間的函數(shù)為:pi+1(t)=(1-T)?Si(ti)+T?Si+1(ti+1),其中1-T和T為具有互補(bǔ)性的一次權(quán)函數(shù),式中的3個(gè)參數(shù)T、ti和ti+1可以統(tǒng)一參變量為:T=2t,ti=0.5+t,ti+1=t(0≤t≤0.5),代入Si(ti)和Si+1(ti+1)的表達(dá)式,最終整理得到的函數(shù)表達(dá)式為:
從幾何意義上說,pi+1(t)表示的是圖2中的點(diǎn)Pi+1到點(diǎn)Pi+2之間的線段,這種方法只能從n個(gè)點(diǎn)中得到n-3段曲線,但是n個(gè)型值點(diǎn)應(yīng)有n-1段曲線,為了解決這個(gè)問題,采用添加輔助點(diǎn)方法。對(duì)于不閉合的曲線,可以添加兩個(gè)輔助點(diǎn),即P0和Pn+1,令P0=P1和Pn+1=Pn。對(duì)于閉合曲線,可以添加三個(gè)輔助點(diǎn),即P0、Pn+1和Pn+2,令P0=Pn、Pn+1=P1和Pn+2=P2。
通過這種方法,就為平滑閉合的和不閉合的等值線奠定了理論的基礎(chǔ)。通過驗(yàn)證可知,這種方法可以保證達(dá)到C1連續(xù)。對(duì)于一般的應(yīng)用場(chǎng)合,達(dá)到C1連續(xù)就滿足了實(shí)際要求[5~7]。
作者在充分理解并分析上述算法的原理基礎(chǔ)之上,采用Visual Basic.NET 2005編程語言,最終很好地實(shí)現(xiàn)了該算法,完成了閉合和不閉合的拋物樣條曲線的繪制。以不閉合的拋物樣條曲線為例,其算法的偽代碼如下:
(1)定義存儲(chǔ)拋物樣條曲線上的點(diǎn)集 interList-Points和步長變量t=0.5/10,
(2)for(i=0 to 10)
①計(jì)算拋物樣條曲線的a、b、c和d四個(gè)參數(shù),四個(gè)參數(shù)的計(jì)算表達(dá)式如下:
②添加輔助點(diǎn)P0=Pn,以P0、P1、P2和P3四個(gè)點(diǎn)構(gòu)造拋物樣條曲線函數(shù),計(jì)算平滑點(diǎn)TmpPnt的坐標(biāo)。
③按先后順序添加TmpPnt點(diǎn)到interListPoints點(diǎn)集中。
①計(jì)算拋物樣條曲線的a、b、c和d四個(gè)參數(shù),計(jì)算方法同上。
②以Pi、Pi+1、Pi+2和Pi+3四個(gè)點(diǎn)構(gòu)造拋物樣條曲線函數(shù),計(jì)算平滑點(diǎn)TmpPnt的坐標(biāo)X和Y,方法同上。
③按先后順序添加TmpPnt點(diǎn)到interListPoints點(diǎn)集中。
(4)for(i=0 to 10)
①計(jì)算拋物樣條曲線的a、b、c和d四個(gè)參數(shù),計(jì)算方法同上。
②添加輔助點(diǎn)Pn+1=P1,以Pn-2、Pn-1、Pn和Pn+1四個(gè)點(diǎn)構(gòu)造拋物樣條曲線函數(shù),計(jì)算平滑點(diǎn)TmpPnt的坐標(biāo)X和Y,方法同上。
③按先后順序添加TmpPnt點(diǎn)到interListPoints點(diǎn)集中。
(5)返回interListPoints,得到拋物樣條曲線上的所有點(diǎn)。
閉合的拋物樣條曲線算法與其類似,所不同的是它須添加三個(gè)輔助點(diǎn),即P0、Pn+1和Pn+2,其中P0=P1、Pn+1=Pn和Pn+2=P2,即需在兩端和兩端連接處各構(gòu)造一段拋物線。采用上述方法,生成的拋物樣條曲線如圖3和圖4所示,圖3為閉合的拋物樣條曲線,圖4為不閉合的拋物樣條曲線[5]。
圖3 閉合的拋物樣條曲線
圖4 不閉合的拋物樣條曲線
從以上可以看出,該算法計(jì)算簡單,容易編程實(shí)現(xiàn)。因?yàn)樵撍惴ㄖ皇潜WC了C1連續(xù),而三次樣條插值算法可以保證達(dá)到C2連續(xù),故其光滑性和柔性沒有三次樣條插值算法好,但其時(shí)間效率還是相當(dāng)高的,相比三次樣條插值算法而言[6]。將該算法應(yīng)用到等值線的平滑中,其平滑效果已經(jīng)能夠達(dá)到雨量等值線的繪制要求。在作者直接把該算法應(yīng)用到等值線的平滑中時(shí),發(fā)現(xiàn):對(duì)于相對(duì)稀疏的等值線,其平滑效果比較美觀,但當(dāng)?shù)戎稻€相對(duì)稠密時(shí),其平滑效果雖達(dá)到要求,但是有時(shí)會(huì)出現(xiàn)等值線相交的情況。對(duì)于此種情況,筆者的解決方法是對(duì)未經(jīng)平滑的型值點(diǎn)序列進(jìn)行加密處理,處理的方法是:在兩點(diǎn)之間的1/5、2/5、3/5和4/5處,添加4個(gè)型值點(diǎn),并按順序插入到等值點(diǎn)序列中。經(jīng)過上述方法處理,一般情況下是不會(huì)出現(xiàn)等值線相交的現(xiàn)象。如圖5和圖6所示,圖5為未經(jīng)過加點(diǎn)處理直接采用拋物樣條曲線算法生成的某市的雨量等值線圖,圖6為經(jīng)過加點(diǎn)處理后采用拋物樣條曲線算法生成的某市的雨量等值線圖。
圖5 未經(jīng)加點(diǎn)處理生成的雨量等值線圖
圖6 經(jīng)加點(diǎn)處理生成的雨量等值線圖
作者在深入研究拋物樣條插值算法的基礎(chǔ)上,設(shè)計(jì)并實(shí)現(xiàn)了拋物樣條算法,并將該算法用到雨量等值線的繪制中,解決了等值線的平滑問題,并且效果較為理想。該算法在應(yīng)用到等值線的平滑的過程中,也發(fā)現(xiàn)存在一些小的問題,即在拐點(diǎn)附近出現(xiàn)凸包現(xiàn)象,故該算法對(duì)于如何恰當(dāng)?shù)剡x擇輔助點(diǎn)、端點(diǎn)條件怎么確定以及在什么樣的情況下適用等問題還有待做進(jìn)一步的研究。
[1]呂勇平,戴景茹.離散點(diǎn)插值方法,等值線的繪制及平滑技巧[J].廣東氣象,1998,(S2):69~71,73
[2]賈國憲,劉新江,陳勤勤.MapX下繪制等值線圖的一種簡易方法[J].北京測(cè)繪,2004,(2):35~39
[3]陳松喬,狄立勛.雨量等值線圖繪制的算法優(yōu)化及實(shí)現(xiàn)[J].湖南水利,1999(1):30~33
[4]孫桂茹,馬亮,路登平等.等值線生成與圖形填充算法[J].天津大學(xué)學(xué)報(bào),2000,33(6):816~818
[5]朱金燦.拋物樣條曲線的原理說明及畫拋物曲線的一個(gè)類.http://blog.csdn.net/clever101/archive/2006/06/03/ 771160.aspx,2006-6-3
[6]張永利.分段二次拋物樣條插值法.中國科技論文在線(http://www.paper.edu.cn).2009.07.16
[7]陸潤民.計(jì)算機(jī)繪圖原理及應(yīng)用[M].北京:清華大學(xué)出版社,1996,142~150
Application of Parabola-Spline Algorithm in Smoothing Contour
Yu XueTao1,Xi YanTao1,Zhu JinCan2,Niu Kun1,Yu ShuYuan1
(1.School of Resources and Earth Science,China University of Mining&Technology,Xuzhou 221008,China;2.ImageInfo Company Limited,Beijing 100029,China)
Based on studying the parabola-spline Algorithm fully,this paper completed designing and releasing the algorithm of drawing close and unclose parabola-spline curves,by using Visual Basic.NET2005.This Algorithm has been applied to smooth rain-contour lines,and obtained the ideal effect.Besides,it made the contour-drawing more Scientific to add data points,avoiding the phenomenon that contour lines intersect with others.
parabola-spline algorithm;contours;close curve;unclose curve
1672-8262(2010)05-135-03
P209
B
2010—04—16
于雪濤(1984—),男,碩士研究生,從事地理信息系統(tǒng)理論及相關(guān)應(yīng)用研究。
中國礦業(yè)大學(xué)青年科研基金項(xiàng)目(A2006018)和中國礦業(yè)大學(xué)資源與地球科學(xué)學(xué)院科研基金項(xiàng)目資助。