国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于OpenGL與IFS的牡丹植株仿真研究

2021-01-13 05:42:18許艷凰王其棣
關(guān)鍵詞:分枝枝干牡丹

許艷凰,王其棣

(漳州城市職業(yè)學(xué)院,福建 漳州 363000)

當(dāng)前,主要從基于視覺真實(shí)感和基于植物學(xué)知識這兩個方面,對植物形態(tài)進(jìn)行計(jì)算機(jī)仿真。第一類仿真的側(cè)重點(diǎn)是視覺上的逼真性,主要從視覺上對植物幾何特點(diǎn)進(jìn)行研究與構(gòu)造,模擬不同植物的形態(tài)發(fā)生模型,繪制出植物外部形態(tài)。如淮永建、楊猛等通過采集植物三維點(diǎn)云或拍攝圖片提取數(shù)據(jù),進(jìn)行花瓣形態(tài)及生長模擬[1-2];孫海洪實(shí)現(xiàn)了基于OpenGL的虛擬林場漫游[3]。第二類仿真的側(cè)重點(diǎn)是以植物的生物學(xué)特征為基礎(chǔ),結(jié)合大量的實(shí)驗(yàn)數(shù)據(jù)定量地模擬植物的自然生長過程,有專門針對花卉植物形態(tài)與生長可視化的仿真研究[4-5],還有基于L-系統(tǒng)的植物形態(tài)模擬方法的研究與應(yīng)用[6-8],這些研究主要應(yīng)用于農(nóng)業(yè)方面。在植物仿真建模方面,目前最常用的方法是L-System[7-9],以及在此基礎(chǔ)上提出的改進(jìn)算法Open-L系統(tǒng)和隨機(jī)L-系統(tǒng)[10-11]。在樹木生成方面,主要有基于IFS迭代系統(tǒng)的改進(jìn)算法[12]。素有 “國色天香” 之稱的牡丹是中國歷史悠久的傳統(tǒng)花卉,具有一定的代表性,又不失一般性,國內(nèi)暫無學(xué)者對其進(jìn)行仿真實(shí)驗(yàn)研究。本文基于VR技術(shù),對牡丹植株形態(tài)和開花過程進(jìn)行研究與模擬,可應(yīng)用于以牡丹為代表的灌木植物的植物學(xué)研究、園林園藝展銷與植物教學(xué)交互。

1 模擬

1.1 牡丹花朵和葉的建模

1.1.1 牡丹花朵的建模

花的形態(tài)仿真重點(diǎn)在于花瓣形態(tài)的描述。每朵花都由若干個花瓣組成,不同品種的牡丹花的花瓣形態(tài)各不相同,但都可以視為一個在三維空間中的曲面。貝塞爾曲面的算法相對比較成熟,具有顯示的圖形平滑、控制參數(shù)少等特點(diǎn),OpenGL中有專用的函數(shù)支持。當(dāng)我們獲得若干特征點(diǎn)后,便可使用相應(yīng)的圖形庫方便地顯示出其曲面。繪制一個貝塞爾曲面可用公式(1)表示:

牡丹有千余個品種,不同品種的花朵形態(tài)與結(jié)構(gòu)有很大差別。牡丹花的類型主要有:單瓣型、荷花型、菊花型、薔薇型、托桂型、金環(huán)型、皇冠型、繡球型、千層臺閣型、樓子臺閣型?,F(xiàn)以薔薇型牡丹為例進(jìn)行模擬。首先,利用貝塞爾曲面,結(jié)合該類牡丹花瓣較圓的特點(diǎn),將牡丹花瓣形成的曲面用4×6個區(qū)域,共35個關(guān)鍵點(diǎn)來模擬。然后通過關(guān)鍵點(diǎn)的調(diào)節(jié),讓模型盡可能接近真實(shí)的花瓣形態(tài)。圖1所示的是初始狀態(tài)的花瓣,彎曲度較大,第一行的關(guān)鍵點(diǎn)z軸的值從負(fù)到正變化,使得花瓣的最上端成S形彎曲。隨著花朵綻放,花瓣在一定范圍內(nèi)變寬變長且彎曲度變小。為了表達(dá)這種變化,設(shè)置花瓣關(guān)鍵點(diǎn)的x和y軸坐標(biāo)值隨花朵開放而按比例變大,z軸坐標(biāo)值按比例縮小,可用函數(shù)來表示:

glScalef(sx,sy,sz);

sx=sx+0.005; sy=sy+0.004; sz=sz-0.005;

if(sx>1) sx=1;

if(sy>1.2) sy=1.2;

if(sz<0.8) sz=0.8;

1.1.2 牡丹葉的建模

牡丹常見的葉型有大圓葉、小圓葉、大長葉、小長葉和中形葉型5類。中國牡丹的羽狀復(fù)葉除了極個別為一回的,大多數(shù)是二回三出,長和寬以及各小葉的形狀、大小多數(shù)不相同。根據(jù)牡丹葉的這一形態(tài)特點(diǎn),使用15個關(guān)鍵點(diǎn)來建立貝塞爾曲面進(jìn)行葉片建模?,F(xiàn)以常見的葉型為例(如圖2所示),通過3D建模后獲得葉的關(guān)鍵點(diǎn)(如圖3所示)。

圖1 三維牡丹花瓣模型的關(guān)鍵點(diǎn)

圖2 牡丹常見的葉型

圖3 牡丹仿真葉子

1.2 牡丹花朵開放模擬

牡丹的花瓣是多層的,系統(tǒng)中設(shè)置為5層,每層5個花瓣,每層花瓣的初始傾角和最終傾角的取值范圍不同,內(nèi)層的值比外層小。隨著花的開放,花瓣傾角變化的加速度呈現(xiàn)先大后小的趨勢。牡丹花瓣存在自相似性,在生長過程中也存在花瓣形態(tài)的迭代過程。因此,可設(shè)置狀態(tài)庫對花瓣生長狀態(tài)進(jìn)行存放,并將庫中的對象加入隨機(jī)數(shù)以模擬現(xiàn)實(shí)中的性狀差異,使牡丹開花仿真效果更佳。

在繪制花瓣的時候,因人眼視網(wǎng)膜視覺暫留現(xiàn)象,即使只繪制最外層的花瓣,仍可產(chǎn)生花瓣連續(xù)綻放的視覺效果。花朵在完全綻放前,內(nèi)層花瓣被外層花瓣包裹,在最內(nèi)層花瓣分開前,可只繪制最外層花瓣的形態(tài),從而減少計(jì)算機(jī)性能開銷。當(dāng)最內(nèi)層花瓣開始分離時,再將各層花瓣進(jìn)行長、寬和角度變化的計(jì)算及繪制,并根據(jù)花瓣與花中心Y軸夾角判斷花瓣生長快慢??捎靡韵滤惴ū磉_(dá):

Step1:設(shè)定花瓣的初始狀態(tài)坐標(biāo)點(diǎn),并放入狀態(tài)庫Petal;設(shè)定花瓣層Layer=0;

Step2:通過Petal的旋轉(zhuǎn)變化,得出第一層花瓣:

n=0;

for(n<5)

P=Petal沿 y軸旋轉(zhuǎn) 360。 /5×n+Rand;

Draw(P);

存入狀態(tài)庫數(shù)組a[Layer][n]中;

n=n+1;

Step3:利用視覺暫存現(xiàn)象,用迭代的方法將當(dāng)前最外層花瓣進(jìn)行長、寬及與花中心Y軸夾角的變換,繪制新的最外層的花瓣,最終得到第2~5層花瓣:

for(layer<4)

layer=layer+1;

n=0;

for(n<5)

將狀態(tài)庫數(shù)組a[Layer-1][n]中的花瓣l=l+△l;w=w+△w;g=g+dgk;

Draw(P);

存入狀態(tài)庫數(shù)組a[Layer][n]中;

n=n+1;

Step4:當(dāng)花朵處于開放期時,即g不超過90°時,將花瓣的長、寬、與花中心Y軸的夾角g分別增加相應(yīng)的數(shù)值,得到下一時間點(diǎn)花瓣的狀態(tài)。在繪制時,先繪制外層花瓣,再繪制內(nèi)層花瓣:

for(layer>=0 and g<90。 )

n=0;

for(n<5)

將狀態(tài)庫數(shù)組a[Layer][n]中的花瓣l=l+△l;w=w+△w;g=g+dgs;

Draw(P);

存入狀態(tài)庫數(shù)組a[layer][n]中;

n=n+1;

layer=layer-1;

Step5:g>90°花朵停止綻放,退出繪制程序。

其中,l代表花瓣長度,△l代表花瓣長度變化值,w代表花瓣寬度,△w代表花瓣寬度變化值,g代表當(dāng)前傾角的值,dgk代表傾角快速變化值,dgs代表傾角慢速變化值。

根據(jù)花朵生長規(guī)律,花瓣與花中心Y軸的夾角變化速度以g=angle/2為分界點(diǎn),先快速變化,再趨緩,最終停止(圖4)。所以在步驟3用了dgk,而在步驟4用了dgs。

圖4 花瓣與花中心Y軸的夾角示意圖

1.3 牡丹枝干和形態(tài)的建模

從宏觀上看,花木枝干結(jié)構(gòu)一般由主干、分枝及葉三個部分組成,且呈現(xiàn)層次結(jié)構(gòu),如圖5、圖6所示。主干是第一層,分枝是在主干的基礎(chǔ)上生成的,為第二層,在前兩層的基礎(chǔ)上生成最后一層——葉。枝干的生長過程是一個迭代的過程,新的分枝生成過程與前一層分枝生成方式相同,這是一種自相似的分形結(jié)構(gòu)。根據(jù)這一特點(diǎn),可通過傳遞參數(shù)的方式,來建立枝干的整體模型[13]。

圖5 真實(shí)的牡丹枝干形狀

圖6 仿真枝干的分枝模型

牡丹枝干的特點(diǎn)與一般的花木枝干類似,其生長受許多外力因素影響,每個枝干衍生出的分枝存在差異。根據(jù)枝干生長的規(guī)律,可以得出枝干生長的算法,具體如下:

(1)定義一個三維坐標(biāo)系,坐標(biāo)系Y軸方向表示樹木主干0級主軸的生長方向。

(2)定義模型的各種屬性,并通過合適的字母來表示相關(guān)屬性。用R表示主干,用B來代表分枝的屬性,L表示每一段枝干的長度,S表示該枝段的半徑,C表示每一段枝段的彎折程度,A表示枝段的扭轉(zhuǎn)程度。

(3)生成一段新分枝時,分枝先在平面XZ面進(jìn)行,同時考慮重力、光源等因素對枝干生長過程的影響,使模型能描述同一個主干的不同分枝的長度、半徑變化情況。分枝的扭轉(zhuǎn)和彎折角度順序是:先扭轉(zhuǎn)一定角度,再繞向量[Cos(T′),0,Sin(T′)]轉(zhuǎn)動一定角度[14]。

(4)要實(shí)現(xiàn)新分枝的衍生,可根據(jù)概率,設(shè)置、選擇不同的產(chǎn)生式。同時,為了更好地實(shí)現(xiàn)對枝干的模擬,當(dāng)層數(shù)較大時,應(yīng)當(dāng)考慮頂端優(yōu)勢帶來的影響,并給予適當(dāng)?shù)目刂?,即在?cè)枝加入控制參數(shù),調(diào)整后的函數(shù)如公式(2):

另外,兩種新分枝的調(diào)整算法是不一樣的,其中一種與枝干模型的調(diào)整算法相同,另一種調(diào)整算法如公式(3):

從公式(2)(3)可以發(fā)現(xiàn),算法中增加了3個常數(shù), 即 SideScaleDepth、SideScale和 Eside。 參 數(shù)SideScaleDepth用于削減側(cè)枝的段數(shù),使左右分叉的生長規(guī)模有區(qū)別;參數(shù)SideScale用于控制分叉的左右枝變,使其大小不相同;參數(shù)Eside用于控制每一個分叉展開的角度,即與其主枝的夾角[15]。

使用符號來替代分枝的對應(yīng)屬性,見表1。

枝干的初始結(jié)構(gòu)設(shè)置完成之后,建立一些生成規(guī)則P(規(guī)則被選擇概率之和等于1),最后通過概率選擇相應(yīng)的生成規(guī)則。

表1 系統(tǒng)中出現(xiàn)的符號及含義

當(dāng)N=i時,調(diào)用分枝規(guī)則,此時:

r1=Lsun表示主枝長度的縮短比例

r2=SideScale表示分枝長度的縮短比例

α1=Tg表示分枝與主枝間的夾角

α2=Tg+180表示分枝上各分枝間的夾角

d=Eg表示分枝與分枝間的夾角

R=(Li+1/Li)*Rscale*Rad 分枝半徑的縮放比例

ω=F(d)=F(Li,Ri,Ti,Ei)

P1: A(w) →! (w)F(i) [&(a1)B(1×r2,w×wr)] / (d)A(1×r2,w×wr);

P2: B(w) →! (w)F(i) [- (a2)$C(1×r2,w×wr)] C(1×r2,w×wr);

P3: C(w) →! (w)F(i) [+(a2)$B(1×r2,w×wr)] B(1×r2,w×wr);

同時為每個產(chǎn)生式設(shè)置調(diào)用概率。

新的分枝算法如下:

Step1:在主枝頂端的側(cè)邊生出兩個側(cè)枝;

Step2:將這兩個側(cè)枝當(dāng)成新的主枝;

Step3:當(dāng)級數(shù)等于4的時候,就隨機(jī)調(diào)用分枝上述的產(chǎn)生式。

本算法中分枝的生成方法,采用確定性和隨機(jī)性兩種算法相結(jié)合的辦法。同時,每個字母的取值是根據(jù)樹枝所在的層次,通過表達(dá)式計(jì)算出這個分枝的旋轉(zhuǎn)角度和縮放尺度,也是非固定值。

2 系統(tǒng)設(shè)計(jì)

依據(jù)上述算法思想,基于Win7系統(tǒng),在Visual Studio2012集成開發(fā)環(huán)境中,使用C++語言,借助OpenGL圖形渲染引擎和MFC框架,研發(fā)了虛擬現(xiàn)實(shí)三維牡丹花開仿真系統(tǒng)。

該系統(tǒng)主要有牡丹展示區(qū),控制面板和右鍵菜單(圖7)??蓪?shí)現(xiàn)的功能如下:

(1)點(diǎn)擊系統(tǒng)可執(zhí)行文件,打開導(dǎo)航畫面,待系統(tǒng)載入后,進(jìn)入主程序界面;

(2)點(diǎn)擊右鍵選擇全屏顯示系統(tǒng)界面;

(3)點(diǎn)擊右鍵選擇牡丹花種類,調(diào)取相應(yīng)牡丹開花過程;

圖7 系統(tǒng)主界面功能區(qū)分布圖

(4)點(diǎn)擊右鍵打開控制面板,對牡丹枝干的數(shù)量、長度、半徑、扭曲程序、展開角度進(jìn)行適當(dāng)?shù)恼{(diào)整;

(5)點(diǎn)擊右鍵選擇自動旋轉(zhuǎn),查看牡丹不同角度的形態(tài)特點(diǎn);

(6)點(diǎn)擊關(guān)閉按鈕退出程序。

3 實(shí)驗(yàn)結(jié)果分析

通過虛擬現(xiàn)實(shí)三維牡丹花開仿真系統(tǒng)的開發(fā)實(shí)現(xiàn),模擬了3種牡丹的生長與開花形態(tài)。通過圖8及圖9的比較可發(fā)現(xiàn),系統(tǒng)使用本文的算法實(shí)現(xiàn)的牡丹仿真,能較真實(shí)地模擬出牡丹植株形態(tài)和花朵開放。用戶可通過對控制面板中各參數(shù)的調(diào)節(jié),達(dá)到對畫面中牡丹形態(tài)的控制,亦可通過鍵鼠改變用戶視角,或以牡丹植株為中心進(jìn)行自動旋轉(zhuǎn),方便用戶對牡丹進(jìn)行全方位的觀察。

4 總結(jié)與展望

圖8 牡丹花朵繪制效果對比圖

圖9 牡丹植株仿真展示圖

本文根據(jù)現(xiàn)實(shí)世界中植物的自相似性與差異性等特征,對牡丹生長進(jìn)行仿真研究。首先,分析牡丹生長過程中各器官的特點(diǎn),對其進(jìn)行分類。其次,重點(diǎn)研究牡丹花開形態(tài)及植株生長形態(tài),對花瓣及葉使用了貝塞爾曲面進(jìn)行模擬。對牡丹花開放過程的研究,主要是通過分析花朵綻放過程中各階段的器官形態(tài)特征,建立器官模型庫,通過模型調(diào)用并作隨機(jī)數(shù)變換,減少反復(fù)建模的系統(tǒng)開銷。最后,對于植株枝干部分,在考慮重力、頂端優(yōu)勢等因素的影響下,采用改良的IFS算法,即確定性和隨機(jī)性相結(jié)合的辦法,進(jìn)行分枝的生成。同時,加入用戶交互部分,可以得到各種極端條件下植株的形態(tài)特征。在未來的工作中,還將探索改良剪枝算法,及對頂端優(yōu)勢控制的參數(shù)設(shè)置。

猜你喜歡
分枝枝干牡丹
何 芳
一株吊蘭
樹葉一片片落下
牡丹(2021年11期)2021-07-20 06:54:53
“三不夠”牡丹節(jié)
玫瑰或刺
意林(2020年9期)2020-06-01 07:26:22
玫瑰或刺
牡丹的整形修剪
綠牡丹
帶移民和拯救的二次加權(quán)分枝過程的有關(guān)性質(zhì)
受控兩性分枝過程
呼玛县| 手机| 遂平县| 黄陵县| 福泉市| 修武县| 印江| 潜山县| 资源县| 武山县| 广水市| 泸州市| 抚宁县| 吉林市| 涪陵区| 乌拉特前旗| 双桥区| 茂名市| 黎平县| 巫山县| 平果县| 原阳县| 建湖县| 米泉市| 鹤壁市| 晋州市| 西林县| 涞源县| 通海县| 塔河县| 巴东县| 若羌县| 乾安县| 岳阳市| 子长县| 古田县| 北海市| 竹溪县| 治县。| 兴国县| 抚松县|