1.旋转:用矩阵表示
1.1 2D旋转
1.1.1 x=1,y=0
p
(1,0)旋转θ度后,得到
p
′(cosθ,sinθ)
1.1.2 x=0,y=0
p
(0,1)旋转θ度后,得到
p
′(−sinθ,cosθ)
1.1.3 x=1,y=1
p
(1,1)旋转θ度后,得到
p
′(cosθ−sinθ,sinθ+cosθ)
1.1.4 x,y为任意数
p
(x,y)旋转θ度后,得到
p
′(x∗cosθ−y∗sinθ,x∗sinθ+y∗cosθ)
用矩阵表示为:
[xy]∗[cosθ−sinθsinθcosθ]
1.2 3D旋转
1.2.1 绕x轴旋转
Rx(θ)=⎣⎡p′q′r′⎦⎤=⎣⎡1000cos(θ)−sin(θ)0sin(θ)cos(θ)⎦⎤
1.2.2 绕y轴旋转
Rx(θ)=⎣⎡p′q′r′⎦⎤=⎣⎡cos(θ)0sin(θ)010−sin(θ)0cos(θ)⎦⎤
1.2.3 绕z轴旋转
Rx(θ)=⎣⎡p′q′r′⎦⎤=⎣⎡cos(θ)−sin(θ)0sin(θ)cos(θ)0001⎦⎤
2.旋转:用四元数表示
2.1 2D旋转(复数)
(1)复数的定义:
复数(a,b)定义了数a+bi,i为虚数满足
i2=−1。a为实部,b为虚部
(2)用复数表示旋转
p(x,y)旋转θ度后,即产生一个复数
(cosθ,sinθ),使之相乘得到旋转后的向量
p′=(x+yi)∗(cosθ+isinθ)
=(x∗cosθ−y∗sinθ)+(x∗sinθ+y∗cosθ)i
得到的结果与矩阵旋转得到的结果是相同的
p′(x∗cosθ−y∗sinθ,x∗sinθ+y∗cosθ)
2.2 3D旋转(四元数)
(1)四元数的定义:
i2=j2=k2=−1
ij=k,ji=−k
jk=i,kj=−i
ki=j,ik=−j
一个四元数
[w,(x,y,z)]定义了复数
w+xi+xj+zk
(2)四元数表示旋转
四元数表示的核心在于轴-角对:
(n,θ)
n为旋转轴,θ为绕轴旋转的量
四元数的表示则为
q=[cos(θ/2),sin(θ/2)n]
=[cos(θ/2),(sin(θ/2)nx,sin(θ/2)ny,sin(θ/2)nz)]
设a为位置向量,b表示绕x轴旋转90度,c表示绕y轴旋转90度
若要先旋转b再旋转c,则四元数相乘需要反着来,即cba(基于四元数遵从结合律,不遵从交换律的原则可以推导出(c(ba)),即先被b处理,再被c处理)
参考:
【1】3D数学基础:图形与游戏开发