45度地图之整体旋转
假設(shè)有如下一幅地圖(左邊為數(shù)組地圖,右邊為對應(yīng)的位圖地圖),這幅地圖對應(yīng)的是一個一維數(shù)組int map[16],且我們知道總共有4行,4列,對于數(shù)組中的元素我們可以通過下面的公式求出它所在的行列, 第n個元素的行值為n/py,其中py為總列數(shù)(4),而列值為n%py.
?
經(jīng)過45度的旋轉(zhuǎn)后,我們想要得到的地圖將變?yōu)?左邊為數(shù)組地圖,右邊為將黑色背景作透明處理后對應(yīng)的位圖地圖)
?
?
我們將45度地圖中與原來位圖的對應(yīng)行列用紅色標(biāo)記起來,這里我們只標(biāo)記一部分點(diǎn),因?yàn)橛眠@幾個點(diǎn)就可以解釋整個地圖的旋轉(zhuǎn)
?
假設(shè)數(shù)組中第一個元素,既1的位置在(x,y),我們可以發(fā)現(xiàn)原來的90度數(shù)組中,行列值相同,既6,11,16這幾個點(diǎn)在旋轉(zhuǎn)后,相對與點(diǎn)1的位置,橫坐標(biāo)沒有發(fā)生改變,而知識縱坐標(biāo)改變,而差值恰好是位圖高度,然后我們觀察,6這個點(diǎn)的縱坐標(biāo)為y+1*32,且6在原數(shù)組中的行列值是(1,1),11這個點(diǎn)的縱坐標(biāo)為y+2*32,且11在原數(shù)組中的行列值是(2,2),16這個點(diǎn)的縱坐標(biāo)為y+3*32,且16在原數(shù)組中的行列值是(3,3),由此我們可以推斷出,在原數(shù)組中行值與列值相同的元素,他的坐標(biāo)為(x,y+n*32),其中n為行值或者列值,在這里他們是相等的,好了,現(xiàn)在我們解決了一種情況,還剩下兩種,一個是行值大于列值,一個是列值大于行值,現(xiàn)在我們來看看下面這幅圖
?
?
?
上面的圖片我們給出了幾張位圖所粘貼的坐標(biāo),我們可以發(fā)現(xiàn)一個規(guī)律,凡是在原數(shù)組中行數(shù)大于列數(shù)的,如5,9,10,他們的橫坐標(biāo)都存在一個n*32和一個m*16,歸納一下可以得出,n是列數(shù)-行數(shù)的結(jié)果列數(shù)-行數(shù)的結(jié)果,例如元素5,他的n就為0-1 = -1,而m是列數(shù)+行數(shù)的結(jié)果,例如元素5,他的m就為0+1 = 1,而對于原數(shù)組中列數(shù)大于行數(shù)的,如2,3,7,他們的橫坐標(biāo)也都存在一個n*32和一個m*16,歸納一下可以得出,n是列數(shù)-行數(shù)的結(jié)果列數(shù)-行數(shù)的結(jié)果,例如元素2,他的n就為1-0 = 1,而m是列數(shù)+行數(shù)的結(jié)果,例如元素2,他的m就為0+1 = 1
下面是整個算法的代碼(以上所有的第1個元素其實(shí)就是數(shù)組中下標(biāo)為1的元素):
?
?
?
總結(jié)
以上是生活随笔為你收集整理的45度地图之整体旋转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fluorinefx (AMF3 for
- 下一篇: ActionScript 3.0 优化