一個四叉樹的簡單實現

來源:互聯網
上載者:User

最近利用OpenGL實現了一個簡單的四叉樹,對視窗進行分割。

資料結構:

AreaType m_bounds;<br />rectContainer m_contents;<br />pointerType m_nodes[4];

m_bounds是節點的矩形包圍盒, m_nodes數組儲存四個孩子的節點指標, m_contents儲存那些不包含於四個孩子但是包含於當前節點的地區,也就是那些我們插入的地區(假設使用的是矩形)。

如:是一個節點的內容:

 

 

 

 

 

寫成一般的樹狀圖是:

 

 

演算法描述:

插入一個矩形地區到四叉樹中:

1 將當前節點細分,添加四個孩子節點:

 m_nodes[LUp] = new QuadTreeNode( TRectanglef(m_bounds.GetPos(),<br />Vec2f(halfWidth, halfHeight)) );<br />m_nodes[LDown] = new QuadTreeNode( TRectanglef(Vec2f(m_bounds.m_Left,<br />m_bounds.m_Top + halfHeight), Vec2f(halfWidth, halfHeight)) );<br />m_nodes[RUp] = new QuadTreeNode( TRectanglef(Vec2f(m_bounds.m_Left + halfWidth,<br />m_bounds.m_Top), Vec2f(halfWidth, halfHeight)) );<br />m_nodes[RDown] = new QuadTreeNode( TRectanglef(<br />Vec2f(m_bounds.m_Left + halfWidth,<br />m_bounds.m_Top + halfHeight), Vec2f(halfWidth, halfHeight)) );<br />

2 如果要插入的矩形屬於地區某個孩子節點,則遞迴深入,繼續細分該孩子節點。

3 直到該地區不屬於任何孩子節點時候,直接存放到當前節點的content數組中。

 

查詢一個矩形地區在四叉樹中:

返回所有與該地區相交或者包含的地區,以一個vector的新式。

程式:

滑鼠左鍵拖出橢圓,地區同時將這些地區插入到四叉樹中:

 

 

右鍵拖出一個白色框選擇地區,進行查詢:

查詢結果為:

 

 

這裡沒法上傳檔案。具體demo可以到我的資源裡下載。

http://download.csdn.net/source/1239943

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.