本文轉自:http://blog.csdn.net/zjc_game_coder/article/details/24269757
不要小看我們在Unity或者3DMAX中的一個簡單的旋轉物體操作。
——題記
這裏需要用到的知識:向量運算(數量積,叉乘,加減)、矩陣基本運算。
讓我們導出繞任意軸n旋轉角度Θ的矩陣。
即 vR(n.Θ) = v ' 。
只要能用v,n,Θ表示出v ' 即可,然後再求出基向量。
方法如下:(看圖)
說明:
1.向量n是單位向量
2.VII向量和VT向量是V向量的分向量,即滿足:V = VII + VT ①,同時,由於VII平行於n向量,它也是V在n上的投影,於是有 VII = (V *n)n ②(與物理上的求做功大小是一樣理解的!)。
3.V ' 向量是 V向量 繞 n旋轉後得到的向量,虛線表示,同理VT ' 。
4.W向量是垂直於V,VII所在平面的向量,這是引入的,爲了便於討論問題,其長度 = V 向量模長。W是VT繞n旋轉90°得到的,故有:W = n X VT ③。(力矩知識哈!)
下面開始求解:
由旋轉後,可以得到:VT ' = VT * COSΘ + W * SinΘ ④(三角函數知識哈..超級有用的玩意兒)
由②、①可推出 VT = V - (V * n)n 。⑤
由①、②、③可得: W = n X v。⑥
將⑤、⑥帶入 ④ 可得:
v ' = (v - (v*n)n)cosΘ + (n x v)sinΘ +(v * n)n
現在已經得到v ' 與v,n,Θ的關係了,於是,下一步就是得到基向量然後再構造矩陣,哈哈。
第一個基向量爲:
p = [1 0 0]
p ' = (p - ( p * n )n)cosΘ + (n x p)sinΘ + (p * n)n
然後按照矩陣運算方法即可,還算簡單吧!
最後得到:
另外兩個基向量的方法類似,同時我們也就得到了R(n,Θ) :