必威电竞|足球世界杯竞猜平台

八叉樹
來源:互聯(lián)網(wǎng)

八叉樹(Octree)是一種樹形數(shù)據(jù)結(jié)構(gòu),每個內(nèi)部節(jié)點都正好有八個子節(jié)點。它用于分割三維空間,將其遞歸細(xì)分為八個卦限,是四叉樹在三維空間中的對應(yīng)。八叉樹在3D軟件、三維游戲引擎等領(lǐng)域有廣泛應(yīng)用,如場景管理、碰撞檢測和可視范圍判斷等。通過八叉樹,可以在Log8(房間內(nèi)的所有物品數(shù))的時間內(nèi)快速定位物體位置。

簡介

八叉樹是一種用于描述三維空間的樹狀數(shù)據(jù)結(jié)構(gòu)。八叉樹的每個節(jié)點表示一個立方體的體積元素,每個節(jié)點有八個子節(jié)點,將八個子節(jié)點所表示的體積元素加在一起就等于父節(jié)點的體積。八叉樹的節(jié)點可以代表一個空間,對應(yīng)的八個子節(jié)點則將這個空間細(xì)分為八個卦限

歷史

八叉樹的概念最早可以追溯到1980年,由倫斯勒理工學(xué)院的唐納德·馬爾(Donald Meagher)在其報告《八叉樹編碼:使用計算機(jī)表示、操作、顯示任意三維對象的新技術(shù)》(Octree Encoding: A New Technique for the 表征, Manipulation and Display of Arbitrary 3-D Objects by 計算機(jī))中提出。

實現(xiàn)原理

(1). 設(shè)定最大遞歸深度。

(2). 找出場景的最大尺寸,并以此尺寸建立第一個立方體

(3). 依序?qū)?a href="/hebeideji/3198551135583695723.html">單位元元素丟入能被包含且沒有子節(jié)點的立方體。

(4). 若沒有達(dá)到最大遞歸深度,就進(jìn)行細(xì)分八等份,再將該立方體所裝的單位元元素全部分擔(dān)給八個子立方體。

(5). 若發(fā)現(xiàn)子立方體所分配到的單位元元素數(shù)量不為零且跟父立方體是一樣的,則該子立方體停止細(xì)分,因為跟據(jù)空間分割理論,細(xì)分的空間所得到的分配必定較少,若是一樣數(shù)目,則再怎么切數(shù)目還是一樣,會造成無窮切割的情形。

(6). 重復(fù)3,直到達(dá)到最大遞歸深度。

存儲結(jié)構(gòu)

八叉樹的存儲結(jié)構(gòu)用一個有(若干+八)個字段的記錄來表示樹中的每個結(jié)點。其中若干字段用來描述該結(jié)點的特性(本例中的特性為:節(jié)點的值和節(jié)點坐標(biāo)),其余的八個字段用來作為存放指向其八個子結(jié)點的指針。此外,還有線性存儲和1托8式存儲。

叉樹對比

a) BSP樹將場景分割為1個面,而八叉樹分割為3個面。

b) BSP樹每個節(jié)點最多有2個子結(jié)點,而八叉樹最多有8個子結(jié)點

因此BSP樹可以用在任意維度的場景中,而八叉樹則常用于三維空間場。

表示空間

八叉樹的節(jié)點可以按照不同的方式來表示空間。點域(小數(shù)點 region,簡稱PR)八叉樹的節(jié)點中都存儲著一個三維點,即該節(jié)點對應(yīng)區(qū)域的“中心”,也是八個子節(jié)點對應(yīng)區(qū)域中的一個角落。矩陣(matrix based,簡稱MX)八叉樹中,節(jié)點只記錄區(qū)域范圍,對應(yīng)的中心點坐標(biāo)需要從區(qū)域范圍推算。PR八叉樹的根節(jié)點可以表示無限大的空間;而MX八叉樹的根節(jié)點只能表示有限空間,這樣才可以得到隱含的中心點。

主要用途

八叉樹在三維計算機(jī)圖形學(xué)中有多種用途,包括但不限于:

- 細(xì)節(jié)層次渲染(LOD,Level of Detail):在三維場景中根據(jù)視點和重要性來動態(tài)調(diào)整對象的細(xì)節(jié)層次。

- 最鄰近搜索:在三維空間中快速找到最接近某個點的其他點。

- 高效碰撞檢測:在三維空間中快速判斷物體是否發(fā)生碰撞。

- 稀疏體素八叉樹:用于存儲和處理稀疏數(shù)據(jù)集,如體素化的三維模型。

- 狀態(tài)估計:在機(jī)器人學(xué)和自動化領(lǐng)域,用于估計物體的狀態(tài)或位置。

參考資料 >

生活家百科家居網(wǎng)