原文**:
1.基礎的2-d繞原點旋轉
在2-d的迪卡爾座標系中,乙個位置向量的旋轉公式可以由三角函式的幾何意義推出。比如上圖所示是位置向量r逆時針旋轉角度b前後的情況。在左圖中,我們有關係:
x0 = |r| * cosa => cosa = x0 / |r|
y0 = |r| * sina => sina = y0 / |r|
在右圖中,我們有關係:
x1 = |r| * cos(a+b)
y1 = |r| * sin(a+b)
其中(x1, y1)就是(x0, y0)旋轉角b後得到的點,也就是位置向量r最後指向的點。我們展開cos(a+b)和sin(a+b),得到
x1 = |r| * (cosacosb - sinasinb)
y1 = |r| * (sinacosb + cosasinb)
現在把cosa = x0 / |r|
sina = y0 / |r|
代入上面的式子,得到
x1 = |r| * (x0 * cosb / |r| - y0 * sinb / |r|) => x1 = x0 * cosb - y0 * sinb
y1 = |r| * (y0 * cosb / |r| + x0 * sinb / |r|) => y1 = x0 * sinb + y0 * cosb
這樣我們就得到了2-d迪卡爾座標下向量圍繞圓點的逆時針旋轉公式。順時針旋轉就把角度變為負:
x1 = x0 * cos(-b) - y0 * sin(-b) => x1 = x0 * cosb + y0 * sinb
y1 = x0 * sin(-b) + y0 * cos(-b)=> y1 = -x0 * sinb + y0 * cosb
現在我要把這個旋轉公式寫成矩陣的形式,有乙個概念我簡單提一下,平面或空間裡的每個線性變換(這裡就是旋轉變換)都對應乙個矩陣,叫做變換矩陣。對乙個點實施線性變換就是通過乘上該線性變換的矩陣完成的。好了,打住,不然就跑題了。
所以2-d旋轉變換矩陣就是:
[cosa sina] [cosa -sina]
[-sina cosa] 或者 [sina cosa]
我們對點進行旋轉變換可以通過矩陣完成,比如我要點(x, y)繞原點逆時針旋**
[cosa sina]
[x, y] x [-sina cosa] = [x*cosa-y*sina x*sina+y*cosa]
為了程式設計方便,我們把它寫成兩個方陣
[x, y] [cosa sina] [x*cosa-y*sina x*sina+y*cosa]
[0, 0] x [-sina cosa] = [0 0 ]
也可以寫成
[cosa -sina] [x 0] [x*cosa-y*sina 0]
[sina cosa] x [y 0] = [x*sina+y*cosa 0]
2、2-d的繞任一點旋轉
下面我們深入一些,思考另一種情況:求乙個點圍繞任乙個非原點的中心點旋轉。
我們剛剛匯出的公式是圍繞原點旋轉的公式,所以我們要想繼續使用它,就要把想要圍繞的那個非原點的中心點移動到原點上來。按照這個思路,我們先將該中心點通過乙個位移向量移動到原點,而圍繞點要保持與中心點相對位置不變,也相應的按照這個位移向量位移,此時由於中心點已經移動到了圓點,就可以讓同樣位移後的圍繞點使用上面的公式來計算旋轉後的位置了,計算完後,再讓計算出的點按剛才的位移向量 逆位移,就得到圍繞點繞中心點旋轉一定角度後的新位置了。看下面的圖
現在求左下方的藍色點圍繞紅色點旋轉一定角度後的新位置。由於紅色點不在原點,所以可以通過紅色向量把它移動到原點,此時藍色的點也按照這個向量移動,可 見,紅色和藍色點的相對位置沒有變。現在紅色點在原點,藍色點可以用上面旋轉變換矩陣進行旋轉,旋轉後的點在通過紅色向量的的逆向量回到它實際圍繞下方紅 色點旋轉後的位置。
在這個過程中,我們對圍繞點進行了三次線性變換:位移變換-旋轉變換-位移變換,我們把它寫成矩陣形式:
設紅色向量為(rtx, rty)
[x y 1] [1 0 0] [cosa sina 0] [1 0 0] [x' y' -]
[0 1 0] x [0 1 0] x [-sina cosa 0] x [0 1 0] = [- - -]
[0 0 1] [rtx rty 1] [0 0 1] [-rtx -rty 1] [- - -]
最後得到的矩陣的x'和y'就是我們旋轉後的點座標。
二維向量旋轉
基礎的2 d繞原點旋轉 在2 d的迪卡爾座標系中,乙個位置向量的旋轉公式可以由三角函式的幾何意義推出。比如上圖所示是位置向量r逆時針旋轉角度b前後的情況。在左圖中,我們有關係 x0 r cosa y0 r sina cosa x0 r sina y0 r 在右圖中,我們有關係 x1 r cos a ...
python 實現二維向量旋轉
現有一起點在原點 0,0 處的向量 5,8 選擇乙個基向量 此基向量可以選任意方向 大小 要將現有向量旋轉至基向量方向,該怎麼做?設定基向量為 0,2 則 基向量 v1 np.asarray 0 2 v2 np.asarray 5,8 計算方向向量 unit v1 v1 np.linalg.norm...
二維,三維座標旋轉演算法 公式)
本文是有關二維,三維座標旋轉演算法筆記。二維座標旋轉。二維座標旋轉公式圖下 void rotate2 double x1,double y1,double alpha,double x2,double y2 x2 x1 cos alpha y1 sin alpha y2 x1 sin alpha y...