簡體   English   中英

在高度圖陣列中查找邊緣和頂點

[英]Finding Edges and Vertices Within Heightmap Array

可以說,我已經產生了高度圖陣列,其中為了簡單起見,將只具有在其內3個高度值: 01 ,和2 例如,它可能看起來像這樣:

000000111111110000000000000000000000000000000000
001111111111111111000000000001111111111111000000
000011111111111111100000000000000011122111110000
000000000111111100000000000000000111221110000000
000000000000000000000000000001111122222111111100
000000000000000000000000111111111111111111000000
000000000000000000000111111111100000000000001111
000000000001111111111110000000000000000001111111
000000001111222222211100000000000000000000001110
000000000011112221100000000000000011111000000000
000000000000111111100000000000001111111110000000
000000001111111110000000000000000011111000000000
000000000000000000000000000000000000000000000000

我想做的是在此高度圖中找到“頂點”,並以邏輯順序輸出它們(因此我可以畫一條線到達每個連續點,最終將跟蹤形狀的輪廓)。 例如,對於第一“的組” 1 S IN右上角:

000000111111110000000           .1------2       
001111111111111111000        8-'         `--3   
000011111111111111100  -->    `7---.        .4  
000000000111111100000               6-----5'    
000000000000000000000                           

第二張圖中的數字是我需要查找的坐標(以正確的順序),點和破折號是我從每個點開始跟蹤以獲取形狀輪廓的線。

我可以使用某種算法來找到這些頂點嗎? 如果沒有,找到它們的最有效方法是什么?

我目前正在做的事情是使用遞歸來找到數字的每個“島”或“組”,然后以該形狀的所有外點為頂點。 但是,我的方法相當慢,並且頂點的順序不正確。

感謝您的幫助,我希望這一切都有意義。

編輯:我從評論中意識到,使用頂點會使我失去某些形狀的區域。 我認為,除了頂點以外,我需要找到的是形狀邊緣上的所有點,但順序正確。 所以我的例子應該是:

000000111111110000000             12345678       
001111111111111111000         17          9,10   
000011111111111111100  -->     16,15         11  
000000000111111100000               14,13,12     
000000000000000000000                            

對困惑感到抱歉。

(針對已編輯的問題的答案:)為此需要某種形式的圖形遍歷,我將僅對其進行非常高級的描述。 從高度圖的最高層開始,對於任何島嶼,都從某個內部點開始。 向北走,直到到達島嶼的邊緣或地圖的邊緣。 以順時針(或逆時針,無論您需要的是哪種方式)的方式,僅探索那些可能屬於該島邊緣的單元。

對於較低的級別,請從與較高級別的島相鄰的單元開始,然后執行相同的操作。


(在澄清編輯之前要提問題:)聽起來像我想要每個“島”的凸包 通過圖遍歷找到連續的組(您的“島”)(我最喜歡BFS ,但是口味不同;只要兩個單元包含相同的值並且相鄰,則將兩個單元都視為屬於同一島),然后應用一些凸包算法

您可以嘗試使用Alpha形狀。 Alpha形狀定義為不超過Alpha的邊的Delaunay三角剖分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM