我目前正在嘗試實現一個簡單的晶格氣體模擬,其中涉及粒子在六角形網格中彈跳。首先,我需要生成網格,最終我想創建某種數據結構(在 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 內置列表)
添加回答
舉報
0/150
提交
取消