這裡介紹乙個在遊戲開發的時候常用的乙個旋轉座標變換的計算方法。
我們看下面這張圖:
我們將遊戲當中的物體抽象成圖中的矩形區域,實線矩形為物體的初始位置(或者說是水平位置),虛線矩形為旋轉後的位置,旋轉角度大小為
a,繞原點
(0,0)
進行順時針旋轉(我們假定順時針方向為正,逆時針方向為負,旋轉角在正負
180°之間)。
旋轉前物體上的一點座標為
(x0,y0)
,也就是它到
y軸的距離為
|x0|,到x
軸的距離為
|y0|
。旋轉後該點的座標為
(x1,y1)
,我們看到可以將
x1分為兩部分計算,m1和
m2,其中
m1=|y0|
×sin(a)
,m2=|x0|
×cos(a)
,因此x1=|y0|
×sin(a)+|x0|
×cos(a)。
接著我們計算y1:
由圖中可以看出,
y1=m2-m1
,其中m1=|x0|
×sin(a)
,m2=|y0|
×cos(a)
,因此y1=|y0|
×cos(a)-|x0|
×sin(a)。
由此我們得到,物體以其左下角為座標原點和旋轉軸做旋轉(順時針角度為正,逆時針為負),旋轉角為
a時,其上面一點
(x0,y0)
旋轉後的座標為
(|y0|
×sin(a)+|x0|
×cos(a), |y0|
×cos(a)-|x0|
×sin(a))。
這一結論對於
-180
°到180
°這個區間都有效。
我們接著做一下推廣,如果物體的旋轉軸不在座標原點,並且其左下角也不與座標原點重合,那結論有是什麼樣子呢?
我們來看下面的圖:
其中(x3,y3)
為旋轉軸,點
(x0,y0)
旋轉角度
a後得到
(x1,y1)
。其實不用很複雜的計算,我們使用相對座標來看,結果就非常簡單了。
假設我們預設的參考係或者座標係為
d1,我們定義乙個新的參考係d2,
d2的座標原點為
(x3,y3),x
軸和y軸分別與
d1的兩個軸同向。那麼對於
d2中的任何乙個點
(a,b)
,將其座標轉換到
d1中的座標為
(a+x3,b+y3)。
接著我們在
d2中分析問題,我們將
(x0,y0)
點叫做點
m0,將
(x1,y1)
點叫做m1
,那麼m0在d2
中的座標為
(x0-x3,y0-y3),m1
在d2中的座標為
(x1-x3,y1-y3)
,從我們前面已經得到的結論我們可以知道:
x1-x3=|y0-y3|
×sin(a)+|x0-x3|
×cos(a)
y1-y3=|y0-y3|
×cos(a)-|x0-x3|
×sin(a)
由此,我們得到
(x1,y1)
的座標為:
(|y0-y3|
×sin(a)+|x0-x3|
×cos(a) + x3, |y0-y3|
×cos(a)-|x0-x3|
×sin(a)+ y3)
旋轉變換在很多遊戲設計中非常有用,可以將上面的公式提煉成乙個函式方便使用。
旋轉座標轉換的矩陣推導
旋轉座標轉換的矩陣推導 介紹略,去網上查吧 旋轉變換一般是按照某個圓心點,以一定半徑r旋轉一定的角度 為了簡單起見我們給出下面的情景 假定點a x,y 想經過旋轉變換到達b x y 已知旋轉角度 和點a座標,計算出點b 要計算點b則分別計算他的x 和y 分量 根據矩陣乘法計算規則,可以推出 只要給出...
旋轉座標轉換的矩陣推導
介紹略,去網上查吧 旋轉變換一般是按照某個圓心點,以一定半徑r旋轉一定的角度 為了簡單起見我們給出下面的情景 假定點a x,y 想經過旋轉變換到達b x y 已知旋轉角度 和點a座標,計算出點b 要計算點b則分別計算他的x 和y 分量 根據矩陣乘法計算規則,可以推出 只要給出旋轉角度,計算出矩陣,然...
座標旋轉變換公式的推導
翻譯自 翻譯 湯 永康 出處 轉貼請註明出處 1 圍繞原點的旋轉 如下圖,在2維座標上,有一點p x,y 直線op 長度為r,直線op和x軸的正向的夾角為a。直線op圍繞原點做逆時針方向b度的旋轉,到達p s,t s r cos a b r cos a cos b r sin a sin b 1.1...