1. 程式人生 > >向量旋轉公式

向量旋轉公式

在二維座標系中,一個位置向量的旋轉公式可以由三角函式的幾何意義推出。

https://gss0.baidu.com/-Po3dSag_xI4khGko9WTAnF6hhy/zhidao/wh%3D600%2C800/sign=8464aa8c060828386858d41288a98539/1ad5ad6eddc451da22d00d78b7fd5266d016327a.jpg

比如上圖所示是位置向量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

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

  x1 = x0 * cos(-B) - y0 * sin(-B) =>  x1 = x0 * cosB + y0 * sinB

  y1 = x0 * sin(-B) + y0 * cos(-B)=>  y1 = -x0 * sinB + y0 * cosB

  現在我要把這個旋轉公式寫成矩陣的形式,有一個概念我簡單提一下,平面或空間裡的每個線性變換(這裡就是旋轉變換)都對應一個矩陣,叫做變換矩陣。對一個點實施線性變換就是通過乘上該線性變換的矩陣完成的。好了,打住,不然就跑題了。

所以二維旋轉變換矩陣就是:

                   [cosA  sinA]          [cosA –sinA]                                          

           [-sinA cosA] 或者  [sinA cosA]

我們對向量進行旋轉變換可以通過矩陣完成,比如我要向量(x, y)繞原點逆時針旋轉角度A:

 [x, y] x  [cosA  sinA] = [x*cosA-y*sinA  x*sinA+y*cosA]

                                  [-sinA cosA]

      旋轉後的向量為:[x*cosA-y*sinA  x*sinA+y*cosA]