01
基本邏輯
用八叉樹來表示三維形體,並研究這種表示下的各種操作以及應用,是進入80年代後開展起來的一種方法。這種方法,既可以看成是四叉樹方法在三維空間的推廣,也可以認為是三維體素陣列表示形體方法的一種改進。
假設要表示的形體v可以放在乙個充分大的正方體c中,c的邊長為2n。
八叉樹的每乙個節點與c的乙個子立方體對應,樹根與c本身相對應。如果v=c,那麼v的八叉樹只有樹根。如果v不等於c,則將c等分為8個子立方體,每個子立方體與樹根的乙個子節點相對應。只要某個子立方體不是完全空白,或者完全為v所佔據,就要被八等分,從而對應的節點也就有了八個子節點。這樣的遞迴判斷,分割一直要進行到節點所對應的立方體完全為空,或是完全為v所佔據,或是其大小已經是預先定義的體素大小,並且對他與v之交作一定的「捨入」,使體素或認為是空白的,或認為是v佔據的。
八叉樹空間結構
02cloudcompare中的八叉樹
cloudcompare中使用的dgmoctree作為八叉樹資料結構,具體實現過程如下:
八叉樹將空間分割成八塊,根據2進製,3位2進製即可表示8個數字,3位中的順序:zyx順序區分,從小遞增到大,如:011,即z為0,x為1,y為 1的塊位置。所以64位作業系統最多可分割為64/3 =21級,32位作業系統最多可分割為32/3 =10級。1、建立單維索引(
cellcode)
將原有的1位2進製轉為3位,如:001(1)轉為000 000 001,010(2) 轉為 000 001 000,以此類推。另外兩個維度的code分別左移1位和2位即可。軟體初始化時就計算完了所有cellcode。
//we compute all possible values for cell codes //(along a unique dimension, the other ones are just shifted) for (int value = 0; value < value_count; ++value) } values[value] = code; }
2、判斷點所在位置(
cellpos)
會預設計算最高層級下的位置,按照矩形索引的方式推算到3維,其他層級的pos,則計算當前點在最高層級下的pos,然後右移(最高層級-當前層級)位。
const pointcoordinatetype& cs = getcellsize(max_octree_level); //dgm: if we admit that cs >= 0, then the 'floor' operator is useless (int cast = truncation) cellpos.x = static_cast(/*floor*/(thepoint->x - m_dimmin.x)/cs); cellpos.y = static_cast(/*floor*/(thepoint->y - m_dimmin.y)/cs); cellpos.z = static_cast(/*floor*/(thepoint->z - m_dimmin.z)/cs)
3、
cellpos與cellcode的轉換
cellpos先左移(最高層級-當前層級)位,再將y左移1位,z左移2位,對xyz取或處理,然後右移3*(最高層級-當前層級)位。
//最高層級-當前層級const unsigned char dec = max_octree_level - level;//pre_computed_pos_codes 為軟體初始化時建立的單維cellcodecellcode code = (pre_computed_pos_codes.values[cellpos.x > (3 * (max_octree_level - level));
4、cloudcompare中八叉樹的應用(查詢給定立方體內的點)
a.計算出給定立方體的最大角點和最小角點
b.判斷最大角點和最小角點所在給定層級的pos
c.判斷當前層級是否有在給定立方體相交的pos
d.迴圈所有pos中的點
e.判斷點是否在立方體內
點雲智慧型分類研究進展與展望點雲催化劑,催化你的點雲(上)
點雲催化劑,催化你的點雲(下)基於實體的點雲智慧型處理催化從點雲資料到資訊的行業應用程序
資料立方體
總體介紹 首先模擬乙個資料分析場景,某企業積累了如下 所示的銷售資料 中每一行表示某個時間段內某種商品在某個地區的銷售情況。很明顯,這些資料涉及到了時間 地區 產品三個業務角度。在對這樣的資料進行分析時,不同的角色都會基於自己所感興趣的業務角度提出問題 銷售經理關心各個地區的銷售情況,希望找出銷售增...
資料立方體 解密
資料立方體和傳統資料庫的差別在於資料立方體即cube把很多原來要用資料庫的group by操作來達到的效果通過其獨有的儲存形式予以加速,使用者可以方便地下鑽,切面 看到各種聚合的資料的結果。試想一下,如果乙個cube擁有3個維度,為了計算在各個維度上的聚合,就要進行2 3次計算,如果有10個維度就要...
資料立方體技術
1.資料立方體的概念和計算。資料立方體 資料立方體只是多維模型的一種形象的說法,它只有三維,但多維資料模型不僅限於三維,它可以是n維的。之所以這麼叫是為了讓使用者更容易想象,方便解釋和說明,同時也為了和傳統的關聯式資料庫中的二維表進行區分。完全物化是指計算資料立方體格中的所有方體 部分物化是指選擇性...