地圖座標轉換

AS3 RPG遊戲引擎開發日誌3:地圖座標轉換

  在這裏更改之前說的45度角座標轉換的問題,地圖仍然不變,但地圖座標和遊戲座標的關係改變了,它的對應關係如下圖:

 

  其中虛線表示地圖的邊緣,區塊中標的數是數組的索引,即地圖座標。地圖的高度用大寫的H表示,區塊的高度用小寫的h表示,區塊的寬度等於高度的兩倍。

 

  • 顯示座標轉換成地圖座標

  假設一個點(下圖中的A點)的顯示座標爲(x,y),地圖座標爲(i,j),顯示座標轉換成地圖座標就是要在已知x和y的情況下求i和j。

  i的值等於AB的長除菱形區塊的邊長取整,AB=AF+BF,△ADF是一個直角邊比爲1:2的直角三角形,其中直角邊AD=x,因此AF=√5—x2。△FBK是BF=BK等腰三角形,且底邊上的高等於底邊FK,FK=GE,GE=AE-AG,AG=x/2,因此BF=√52(y-x/2)。最後

i=(AF+BF)/(√5—h2)=[√5—x2+ √52(y-x/2)]/√5—h2=(y+x/2)/h。

  對j的值求解則要分兩種情況,即上圖中的A點和O點,確定條件分別是x/2<H-h和x/2>=H-h。

  在A點,j等於AC的長除菱形區塊的邊長取整,AC=AH+HC,HC=HI=AJ,AJ可以通過i的值求出。AH=√5—x2,AJ=菱形區塊的邊長-(AB-菱形區塊的邊長×i)=

√5—h2-[√5—x2+ √52(y-x/2)]+√5—hi2

這是可以得出j=(x/2-y)/h+i+1。

  在O點,同上面的道理一樣,區別是求PQ,PQ=OS,最後計算的結果是j=(2H+x/2-y)/h-i。

結論:
        i=(y+x/2)/h
        j=(x/2-y)/h+i+1    當x/2<H-h時
        j=(2H+x/2-y)/h-i    當x/2>=H-h時

  • 地圖座標轉換成顯示座標

  此時要將上圖中的(6,7)轉換成Z點到地圖左邊緣和上邊緣的像素值,這裏先直接用顯示座標轉換成地圖座標中的二元一次方程組求出x和y,同樣分條件:

當i<H/h時:
        x=hj-h
        y=h(2i-j+1)/2
當i>=H/h時:
        x=h(2i+j)-2H
        y=H-hj/2

  以上公式是直接求解出來的,當我們用放進去計算的時候x值是正確的,但y值總是比真實值多了h/2。出現這種情況就要從對應關係上去思考,地圖座標系統中的點,比如(6,7),它實際對應於顯示座標系統中的點不是Z點,而是Z點下方h/2位置處的點,把頭向左轉一點來看上圖,可以看到地圖座標中,點(6,7)的左上角(左上角就是座標點)就是顯示座標中Z點下方h/2位置處,因此更正後得到轉換公式:

當i<H/h時:
        x=hj-h
        y=h(2i-j)/2
當i>=H/h時:
        x=h(2i+j)-2H
        y=H-h(j+1)/2

  • 總結

  數學是很有意思的,原本以爲這些公式會與地圖傾斜的角度有關,但計算後根號5這個值不存在了,不過這樣說也不完全對,因爲菱形區塊的高寬比正好是1比2,這樣導致公式最後也簡潔很多。

from:http://www.cnblogs.com/pains/archive/2009/08/08/1541753.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章