我想生成多個六邊形存在的扁平島。到目前爲止,我已經能夠用代碼創建六邊形網格,但無法弄清楚如何將它們放置在一組中,從而創建一個隨機形狀的島。 (任何形狀都不是完美的圓形,正方形等)我想我需要一種算法,將六邊形貼磚放置在現有貼磚的多邊旁邊。如果你能幫助我一個算法的想法,那就太好了。生成六角形島
生成六角形島
回答
你在找這樣的嗎?
Place 1 hexagon.
for i in (islandSize-1):
Scan all hexagons for open sides. Place open sides in a list named hexBorders
Choose a random index in hexBorders, attach a new hexagon there
該算法應該給你一個相當圓的島嶼,大致集中在原始的十六進制,因爲舊的hexes有更多的機會被選中。
您可以通過選擇較新或較舊的六邊形(例如,您可以在hexBorders中包括六邊形時間,並調整隨機選擇以便更喜歡年輕的六邊形)來調整此形狀。
謝謝盧克,我沒有想過每次放置時都檢查所有開放邊的六邊形。我只考慮檢查新放置的六邊形的開放邊,這將導致太多的線。我要試試這個。再次感謝! – user2255273
最近我還在做基於瓦片的地圖的隨機地圖生成器,並且在嘗試添加更多高級特徵(在瓦片空間中)時輸出牆的真實性並不好。我決定創建一個基於圖像的地圖2D/3D,然後將其轉換爲平鋪地圖。還沒與添加所有我想要的功能完成,但結果已經是一個更好的幅度則前:
地圖生成
看到我simple random map generator in C++。它基於Diamond & Square算法,通過一些調整來獲得島狀地圖。
轉化爲瓷磚地圖
笛卡爾像素簡單地映射到你的六邊形網格佈局。您還可以計算某個區域的平均值,而不是每個單元格/瓦片使用單個像素。
對於3D瓦片地圖,所以你需要添加額外的濾波看到
- How to procedurally generate tile map的一些想法,這將產生「體素ated」輸出。
既然是一個相當開放式的問題,this article by Red Blob Games about hexagonal data structures將是一個很好的開端。作者描述瞭如何使用二維數組來存儲六邊形,以及如何遍歷它們。
一旦你理解了六邊形之間的關係,你可以開始以有趣的方式遍歷它們。
可能產生一個「島」的最簡單的方法是用SIR型模型,也被稱爲流行病模型。這是研究人員通常用來模擬傳染病傳播的模型,但我發現你也可以用它來生成僞自然形狀(像一個島!)。 SIR代表易感染 - 感染 - 恢復。這些是「細胞」的三種狀態,在這種情況下是六邊形。在該算法的任何給定步驟中,受感染的細胞可感染相鄰細胞。想想這樣:在算法開始時,一個六邊形是「感染」(陸地),其餘的不是(水)。在算法的每次迭代中,與感染細胞相鄰的細胞有機會(例如,10分之一)被感染(變成土地)。經過多次迭代後,您會發現受感染的六邊形組的形狀非常隨意,但它們都很感人。 For a grid-bsed example, here's some images I've uploaded to imgur。下面是該算法的僞代碼。
cellsToDo = [originCell]
for 100 iterations:
for each cell in cellsToDo:
for each neighbor to the current cell:
if randomValueBetween(0, 10) == 1:
set the current cell as infected
add the current cell to the cellsToDo list
確實有其他的算法,但我會開始學習六邊形如何相互關聯並可以存儲。
- 1. 如何在隨機生成的六角形地圖中查找島嶼?
- 2. 生成六邊形背景?
- 3. 六角形生命遊戲Swing實現
- 4. 在Java中自動生成一個六角形網格
- 5. 生成蜂窩狀六角形的百通在軸向座標
- 6. 六角形格柵在生成流出框架時被切斷
- 7. CSS3圓角六角形
- 8. 六角形圖像
- 9. 繪製六角形
- 10. 如何旋轉我生成的六角形點或生成六角形點,以便第一個點位於中心頂點?
- 11. 非空六邊形的六角中心
- 12. 十六進制到六角形速記
- 13. 3D六角形地圖
- 14. 試圖學習六角形
- 15. 居中CSS六角形
- 16. openGL ES 2.0六角形
- 17. CSS3或帆布圓角六角形
- 18. 六角形/形狀中的隨機點
- 19. 使用jQuery繪製六角形形狀
- 20. 以六角形的形狀裁剪UIImage?
- 21. 如何將一個六角形網格變成一個擠壓的六角形網格?
- 22. 在六角形網格中創建六角形按鈕的最佳方式
- 23. 平頂六角形六角形網格座標以像素座標
- 24. 在六角形網格中捕捉到最近的六角形中心
- 25. 如何設置使用Javascript和六角形瓷磚的六角形地圖?
- 26. 在Matlab中生成三角形分佈
- 27. 生成pascal三角形時出錯
- 28. java中的鏡像三角形生成
- 29. 如何繪製一個完美的三角形六角形?
- 30. 六角形關節圖的Seaborn成對矩陣
你已經提出了一個非常廣泛的問題(有很多生成六邊形圖案的方法!),沒有一個明確的目標(什麼樣的島形狀是可以接受的?)。你還給出了兩個例外情況(半六邊形和「下降邊緣」),但沒有解釋你認爲他們會如何工作。這意味着這是一個非常廣泛的問題 - 所以答案不可能涵蓋所有內容 - 目前還不清楚您是否在尋求算法,代碼或其他方面的幫助。我建議你自己解決問題,然後問一個更具體的問題。 –
@DanPuzey對不起丹,我沒有意識到這是一個問題的不好。這聽起來並不複雜,儘管如此。我正在尋找的形狀是任何看起來不真實的東西。所以沒有完美的圓形,方形,線形或三角形。爲了保持簡單,我會放下平滑的瓷磚。 (這只是不同的形狀,使島嶼看起來不像一個網格)和脫落的邊緣,這是島嶼邊緣向下的牆壁。任何幫助表示讚賞,它只是一個算法或實際代碼的想法。我會編輯我的問題。謝謝 – user2255273
到目前爲止,您有沒有嘗試解決您的問題?你怎麼生成你的六角網格?到目前爲止,您的問題似乎是要求人們編寫代碼的下一部分,而不能看到第一部分是什麼;這不太可能導致對您有用的答案(或對未來的讀者!)。 –