二維向量旋轉

2021-06-04 14:59:33 字數 2279 閱讀 7854

基礎的2-d繞原點旋轉 

在2-d的迪卡爾座標系中,乙個位置向量的旋轉公式可以由三角函式的幾何意義推出。比如上圖所示是位置向量r逆時針旋轉角度b前後的情況。在左圖中,我們有關係:

x0 = |r| * cosa

y0 = |r| * sina

=>

cosa = x0 / |r|

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|)

y1 = |r| * (y0 * cosb / |r| + x0 * sinb / |r|)

=>

x1 = x0 * cosb - y0 * sinb

y1 = x0 * sinb + y0 * cosb

這樣我們就得到了2-d迪卡爾座標下向量圍繞圓點的逆時針旋轉公式。順時針旋轉就把角度變為負:

x1 = x0 * cos(-b) - y0 * sin(-b)

y1 = x0 * sin(-b) + y0 * cos(-b)

=>

x1 = x0 * cosb + y0 * sinb

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-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'就是我們旋轉後的點座標。

二維向量旋轉公式

原文 1.基礎的2 d繞原點旋轉 在2 d的迪卡爾座標系中,乙個位置向量的旋轉公式可以由三角函式的幾何意義推出。比如上圖所示是位置向量r逆時針旋轉角度b前後的情況。在左圖中,我們有關係 x0 r cosa cosa x0 r y0 r sina sina y0 r 在右圖中,我們有關係 x1 r c...

python 實現二維向量旋轉

現有一起點在原點 0,0 處的向量 5,8 選擇乙個基向量 此基向量可以選任意方向 大小 要將現有向量旋轉至基向量方向,該怎麼做?設定基向量為 0,2 則 基向量 v1 np.asarray 0 2 v2 np.asarray 5,8 計算方向向量 unit v1 v1 np.linalg.norm...

二維向量 vector

又學一招!二維向量vector 在vc下的使用技巧。隨著對c 學習的逐步加深,發現stl確實是個好咚咚。vector是我用到的第乙個stl容器,它一直吸引我學習和使用stl。但當我用到二維的vector時 比如 vector 卻發現似乎不能用。我用的vc6就是不認它,竟報 error c2146 s...