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

?

Boids算法在Unity3D開發(fā)平臺(tái)中模擬生物群組行為中的應(yīng)用研究

2019-06-05 02:51王永霞
關(guān)鍵詞:群組調(diào)用間距

◆王永霞

Boids算法在Unity3D開發(fā)平臺(tái)中模擬生物群組行為中的應(yīng)用研究

◆王永霞

(山西經(jīng)濟(jì)管理干部學(xué)院 山西 030000)

本文結(jié)合Unity3D開發(fā)平臺(tái),對(duì)Boids算法在生物群組行為中的模擬應(yīng)用展開了深入研究。并針對(duì)群組中移動(dòng)軌跡隨機(jī)更新的復(fù)雜行為模擬,提出了Boids算法的改進(jìn)策略,重點(diǎn)解決了群組行為的隨機(jī)更新問題。

Unity3D;3D模擬;群組行為;Boids算法

0 引言

Unity3D是一款3D模擬軟件開發(fā)引擎,基于Unity3D實(shí)現(xiàn)組群行為模擬控制,其提供有典型的算法參考模型是基于Craig Reynold(逃出克隆島)模擬場景的群組行為示例[2]。Boids算法就是在Craig Reynold中被首次提出的。

Boids算法中每個(gè)boid都會(huì)應(yīng)用群組行為的三個(gè)規(guī)則[3]。分離規(guī)則,保證相鄰的boid之間能夠保持適當(dāng)?shù)木嚯x,不會(huì)發(fā)生擁擠與碰撞;隊(duì)列規(guī)則,保證了群組在移動(dòng)速度和移動(dòng)方向上對(duì)各個(gè)boid的有效約束;凝聚規(guī)則,對(duì)boid的移動(dòng)位置進(jìn)行約束,避免其脫離群組行為的控制范圍。通過規(guī)則的應(yīng)用,模擬場景生成的若干boid,會(huì)自動(dòng)形成群組。

1 Boids算法設(shè)計(jì)

在Boids算法設(shè)計(jì)中首先會(huì)創(chuàng)建一個(gè)群組的核心節(jié)點(diǎn),再通過核心節(jié)點(diǎn)來生成其他的群組成員,并對(duì)其進(jìn)行行為約束。也就是說在Boids算法中主要包括兩個(gè)被控制對(duì)象:群組的領(lǐng)導(dǎo)者(核心節(jié)點(diǎn)FlockBoid)與其他boid。當(dāng)群組的領(lǐng)導(dǎo)者的移動(dòng)行為發(fā)生變化,boid也將隨之進(jìn)行調(diào)整。設(shè)計(jì)思路為:首先由FlockBoid動(dòng)態(tài)生成很多個(gè)boid,然后在每個(gè)boid上實(shí)現(xiàn)群組規(guī)則。其中分離規(guī)則用于依次檢查boid的間距,并相應(yīng)地調(diào)整速度;隊(duì)列規(guī)則通過群組的平均速度與航向、boid的隨機(jī)速度,獲得當(dāng)前boid的最速度與角度;凝聚規(guī)則是以FlockBoid為中心,預(yù)設(shè)群組的凝聚范圍和FlockBoid與各個(gè)boid的之間的向量值,用于更新當(dāng)前boid的移動(dòng)速度與方向。

2 Boids算法實(shí)現(xiàn)

Boids算法主要是運(yùn)用空間幾何的概念實(shí)現(xiàn)對(duì)群組行為的模擬控制,在核心部分需要遍歷每一個(gè)boid,分別計(jì)算當(dāng)前boid與其他相鄰節(jié)點(diǎn)的間距,再通過與預(yù)設(shè)的各個(gè)規(guī)則下所生成的約束值比對(duì),來動(dòng)態(tài)更新boid的移動(dòng)速度與角度。

假設(shè)FlockBoid為組群原點(diǎn),三維坐標(biāo)為(,,),當(dāng)前boid為,三維坐標(biāo)值為(1,1,1),相鄰任一節(jié)點(diǎn)為,三維坐標(biāo)值為(2,2,2),依據(jù)向量三角形法則及投影定律可知:

3 Boids算法在群組行為中的應(yīng)用分析

在Unity3d中,Boids算法僅實(shí)現(xiàn)了一個(gè)簡單的鳥群移動(dòng)行為,能夠適用于大部分生物類群組行為的3D模擬,但在真實(shí)環(huán)境中,很多生物群組行為要比這復(fù)雜得多,例如群組行為中障礙物的躲避、群組移動(dòng)路徑的隨機(jī)更新等。群組中個(gè)體行為通常會(huì)比較簡單,但群組行為絕不是個(gè)體行為的簡單疊加,任何一件隨機(jī)事件的產(chǎn)生都可能導(dǎo)致群組行為在結(jié)構(gòu)、模式和行為上發(fā)生變化[4]。為了使得群組行為模擬更加接近真實(shí)自然的效果,對(duì)一些較為復(fù)雜的群組行為實(shí)現(xiàn)模擬控制是非常必要的。

4 Unity3D中復(fù)雜群組行為的算法改進(jìn)策略

在Boids算法中隨機(jī)性策略的算法改進(jìn)思路主要是通過隨機(jī)生成的移動(dòng)目標(biāo)來改變?nèi)航M的移動(dòng)軌跡。

在Boids算法中,F(xiàn)lockBoid作為群組的領(lǐng)導(dǎo)者,群組中的boid都是跟隨著FlockBoid移動(dòng)的。因此在改進(jìn)算法中,隨機(jī)目標(biāo)的更新主要是針對(duì)FlockBoid的,當(dāng)FlockBoid的軌跡發(fā)生變化,群組中所有成員的軌跡也會(huì)跟著發(fā)生變化,如圖1所示:

圖1 隨機(jī)移動(dòng)軌跡中隨機(jī)策略的應(yīng)用思路

在Unity3D內(nèi)部封裝的Random類提供的Range()函數(shù)可以在用戶自定義的最小數(shù)與最大數(shù)之間隨機(jī)返回一個(gè)浮點(diǎn)型的數(shù)值,(這個(gè)范圍包含最小數(shù),但不包含最大數(shù))[5]。

float posX=Random.Range(initPos.x-bound.x,init Pos.x+bound.x);

float posY=Random.Range(initPos.y-bound.y,initPos.y+bound.y);

float posZ=Random.Range(initPos.z-bound.z,initPos.z+bound.z);

最后Range函數(shù)每被調(diào)用一次,就會(huì)對(duì)偏移量進(jìn)行一次刷新,從而實(shí)現(xiàn)目標(biāo)向量的不斷更新。因此還需要設(shè)置一個(gè)刷新機(jī)制,以確保每隔一段時(shí)間就可以對(duì)目標(biāo)向量進(jìn)行更新。

Unity3D內(nèi)置有Update()函數(shù),該函數(shù)在系統(tǒng)運(yùn)行時(shí)會(huì)被自動(dòng)調(diào)用,調(diào)用頻率為每幀調(diào)用一次,大約每秒U(xiǎn)pdate()函數(shù)會(huì)被調(diào)用千次以上。如果要在Update()內(nèi)實(shí)現(xiàn)移動(dòng)目標(biāo)的定時(shí)更新,還需要重新設(shè)定代碼的刷新頻率。具體實(shí)現(xiàn)步驟如下:

( 1 ) 獲取FlockBoid當(dāng)前的移動(dòng)位置,以三維坐標(biāo)(,,)表示;

( 2 ) 獲取FlockBoid當(dāng)前的移動(dòng)目標(biāo),以三維坐標(biāo)(,,)表示;

( 3 ) 計(jì)算FlockBoid從當(dāng)前位置到移動(dòng)目標(biāo)的間距,公式如下:

( 4 ) 設(shè)定FlockBoid從當(dāng)前位置到移動(dòng)目標(biāo)的最小間距為space,將與space進(jìn)行比較,如果>space,說明FlockBoid距離移動(dòng)目標(biāo)還比較遠(yuǎn),對(duì)移動(dòng)目標(biāo)不做位置更新;如果

當(dāng)隨機(jī)策略更新了移動(dòng)目標(biāo)后,F(xiàn)lockBoid也會(huì)隨之更新移動(dòng)軌跡,向新的目標(biāo)點(diǎn)移動(dòng),群組中所有節(jié)點(diǎn)也會(huì)通過對(duì)FlockBoid的追蹤,重新規(guī)劃各自的移動(dòng)路徑。

5 總結(jié)

本研究主要圍繞Boids算法在Unity3D模擬生物群組行為中的應(yīng)用展開深入研究,并在此基礎(chǔ)上對(duì)衍生出的復(fù)雜群組行為進(jìn)行了討論,最后針對(duì)群組行為的移動(dòng)軌跡更新問題,提出了基于Boids的隨機(jī)性改進(jìn)策略。改進(jìn)后的算法策略能夠?yàn)楹芏鄰?fù)雜的群組行為提供隨機(jī)性問題與路徑規(guī)劃問題的解決思路,從而有效改善群組行為的模擬效果。

[1]Tenney R,Hebbert R,Sandell N Jr. A tracking filterfor maneuvering sources[J]. IEEE Transactions on AutomaticControl,1977,22(2):246-251.

[2]Craig Reynolds. Boids Background and Update[EB/OL]. http://www.red3d.com/cwr/boids/,2001.

猜你喜歡
群組調(diào)用間距
開始和結(jié)束
非均勻間距的低副瓣寬帶微帶陣列天線設(shè)計(jì)
群組推薦系統(tǒng):現(xiàn)狀與展望
核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
系統(tǒng)虛擬化環(huán)境下客戶機(jī)系統(tǒng)調(diào)用信息捕獲與分析①
算距離
利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
釋放
C++語言中函數(shù)參數(shù)傳遞方式剖析