亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

生成具有連通性信息的六角格

生成具有連通性信息的六角格

慕后森 2023-06-20 15:41:23
我目前正在嘗試實現一個簡單的晶格氣體模擬,其中涉及粒子在六角形網格中彈跳。首先,我需要生成網格,最終我想創建某種數據結構(在 Matlab 或 Python 中),其中包含每個節點的坐標,以及它的六個鄰居中的每一個的標識(假設它不是邊界節點)。對我來說,主要問題是弄清楚如何包含連接性。例如,假設我找到了一種方法來索引我所有節點的集合。給定一些節點i,我希望能夠找到節點的索引說它是正確的。我可以開發一些一致的方法來枚舉節點,這樣我就可以計算它的鄰居的索引,但是如果我想生成不太簡單的網格,這不會給我太多的靈活性。執行此操作的最佳方法是什么?我知道這是一個非常簡單的問題,但自從我上一節計算機科學課以來已經有一段時間了,所以此時我幾乎只熟悉向量/列表。提前致謝!
查看完整描述

1 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

如果您熟悉 Python 中的 OOP 并想要自定義,我建議您自己從頭開始編寫節點對象,并實現它們類似于雙向鏈表,其中每個節點都持有對其所有鄰居的引用。

如果您堅持將所有節點保存在某種類似數組的對象中,我會建議使用類似于具有六邊形網格的視頻游戲如何處理其坐標的索引的二維數組對象。

n1 - n2 - n3
  \ / \  /  \
   n4 - n5 - n6
  / \  /  \  /
n7 - n8 -  n9

使用上圖,您可以創建類似ls = [[n1,n2,n3],[n4,n5,n6],[n7,n8,n9]]. 偶數行的右下節點的列索引將是它自己的列索引,而左下節點將是它的列索引-1(例如,n2在偶數行 0 中,引用n5它將是ls[1,1]sincen2的行列索引是 [0,1]。要引用n4它將是ls[1,0])。同時對于奇數行,它的右下節點列索引將是它自己的col索引+1,它的左下節點列索引是它自己的col索引。(示例:n5索引是 [1,1] 在奇數行 1,n9將是ls[2,2]并且n8將是ls[2,1])。

編輯:我索引的方式ls是通過 numpy 的索引方法。如果您使用的是 python 內置列表,則需要單獨的括號(例如,ls[2,1]在 numpy 中ls[2][1]用于 python 內置列表)


查看完整回答
反對 回復 2023-06-20
  • 1 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號