旋转正方向:
从所绕轴正方向往原点看,顺时针为旋转正方向
绕X轴旋转的旋转矩阵:
1 0 0
0 cosa -sina
0 -sina cosa
绕Y轴旋转的旋转矩阵:
cosa 0 -sina
0 1 0
sina 0 cosa
绕Z轴旋转的旋转矩阵:
cosa sina 0
-sina cosa 0
0 0 1
绕任意向量n旋转的矩阵,假设n是单位向量:
向量v绕单位向量n正方向旋转a度后得到v`,求v`。
要求v`,只要求v`⊥+v∥即可,v = v∥+ v⊥
v∥ = (v 点乘 n 得到 v∥的长度)乘以n, 得到v∥ = (v · n) * n
v⊥ = v - v∥ = v - v · n * n (推导1)
假设w是v⊥和n的叉乘向量,则w垂直于v⊥和n所组成的平面,并且||w|| = ||v⊥||
(因为w = v⊥X n,所以||w|| = V⊥和n组成的平行四边形的面积,由于n是单位向量,所以w长度 = v⊥的长度,即 ||w|| = ||v⊥|| = ||v`⊥||)。
v`⊥ = v`⊥ * sina + v`⊥ * cosa = w * sina + v⊥ * cosa
= (v⊥X n) * sina + v⊥*cosa
=((v - v∥) X n) * sina + (v-(v·n)*n)*cosa //带入推导1替换掉v⊥
= (v X n) * sina + (v - (v·n) *n) * cosa//由于v∥x n等于0,可以消掉
v` = v`⊥ + v∥
= (v X n) * sina + (v - (v·n) *n) * cosa+ (v · n) * n
现在已经得到了v`与v、n和角度a的关系了,那么可以计算变换后的基向量构成的矩阵
假设n = [Nx Ny Nz],将v = [1 0 0]带入得到:
n²(1-cosa) + cosa NxNy(1-cosa) + Nzsina NxNz(1-cosa) - Nysina
另外两个基向量也计算后,得到矩阵: