[程式] 改良的六角座標系統

看板Programming作者 (ragingbull)時間16年前 (2009/08/03 23:58), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/4 (看更多)
※ [本文轉錄自 GameDesign 看板] 作者: ragingbull (ragingbull) 看板: GameDesign 標題: [程式] 改良的六角座標系統 時間: Mon Aug 3 23:51:48 2009 今天稍微研究了一些六角座標系統(Hexagonal Coordinate System)的文獻,配合一些想 像,嘗試一個改良的方法。 首先,我想讓六角座標系和我們熟悉的直角坐標系有更緊密的聯想。 參考上圖,左邊的圖是直角座標系,這種座標已經深入人心,成為一種”直覺”。例如, 當我們看到一個座標(x, y),就能直覺聯想出它和原點的相對位置。 有沒有可能用Tile(方格)來表現Hexagon(六角格),而且維持相近的座標感呢? 右邊的圖提供一種想法,我故意使用非正方形的Tile,並且把單數行拉高(或低)半格,仔 細比照中間和右邊的圖,是不是滿相似? 最妙的是,比照左右兩圖不難發現,即使是稍微錯開的Tile,仍然維持和直角座標相近的 地理感。 如此一來,無論繪製成六角形,或是錯開的矩形,背後都是六角座標系統,並且維持著直 角座標系的地理感。 底下是在Hexagon裡,點(Vertex, V)、線(Edge, E)、面(Face, F)之間的九種關係。 實際的算法依座標系統而異,在此我採用上面提到的改良式座標系統。 我假設要探討的中心面座標是(x, y),N/E/W代表它北東西三方向的鄰邊,L/R代表它左右 兩個鄰點。 九種點線面關係 定義 Neighbors (F-F) (x,y+1) (x+1,y) (x+1,y-1) (x,y-1) (x-1,y-1) (x-1,y) Borders (F-E) (x,y,N) (x,y,E) (x,y,W) (x+1,y-1,W) (x,y-1,N) (x-1,y-1,E) Corners (F-V) (x+1,y,L) (x,y,R) (x+1,y-1,L) (x-1,y-1,R) (x,y,L) (x-1,y,R) Joints (E-F) (x,y,N) → (x,y+1) (x,y) (x,y,E) → (x+1,y) (x,y) (x,y,W) → (x,y) (x-1,y) Continues (E-E) 無 (任意2邊無法連成直線) Endpoints (E-V) (x,y,N) → (x+1,y,L) (x-1,y,R) (x,y,E) → (x,y,R) (x+1,y,L) (x,y,W) → (x-1,y,R) (x,y,L) Touches (V-F) (x,y,L) → (x,y) (x-1,y) (x-1,y-1) (x,y,R) → (x+1,y) (x+1,y-1) (x,y) Protrudes (V-E) (x,y,L) → (x,y,W) (x-1,y-1,E) (x-1,y-1,N) (x,y,R) → (x+1,y-1,N) (x+1,y-1,W) (x,y,E) Adjacent (V-V) (x,y,L) → (x-1,y,R) (x-1,y-1,R) (x-2,y,R) (x,y,R) → (x+2,y,L) (x+1,y-1,L) (x+1,y,L) 實作出這樣的一個座標系並不難,值得注意的問題有三個:點線面的資料結構、九種關係 的演算法、繪圖的座標轉換。 一些實用的運算函式還包括distance, life-of-sight(raycasting), field-of-view(shadowcasting)等。 更進階的應用則有pathfinding, areafinding等。 參考文章: * Amit’s Thoughts on Grids * Hex Grids * Computing Field of View on a Hexagonal Grid 文章附圖出處: http://taoname.blogspot.com/2009/08/blog-post_4397.html 請大家多多指教 :D -- http://taoname.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.165.7.158 ※ 編輯: ragingbull 來自: 118.165.7.158 (08/03 23:58) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.165.7.158

08/04 01:56, , 1F
推你一個 有創意的東西
08/04 01:56, 1F
※ 編輯: ragingbull 來自: 118.165.28.133 (08/04 21:55)
文章代碼(AID): #1ATma_g1 (Programming)
文章代碼(AID): #1ATma_g1 (Programming)