【图形学基础:基本变换】复数、四元数的巩固和图形学基本变换类型的学习

PS:本文中灰色字体为拓展内容,不在目录中标识,可以作为了解学习哦 ~

目录

复数:a+bi

四元数

基本变换

平移变换

旋转变换

缩放变换

变换级联

变换矩阵的逆矩阵补充知识点:

欧拉变换


复数:a+bi

范数:复数的范数可以看作表示复数的向量的\left |z \right |=\sqrt{(a^2+b^2 )}

复数与标量相乘/除(数乘):符合乘法分配律,实部与虚部分别进行乘除运算。

k*z=k*(a+bi)=(ka+(kb)i)

复数加法与减法:实部与实部相加减,虚部与虚部相加减。

z1+z2=(a+bi)+(c+di)=((a+c)+(b+d)i)

复数加法恒等元:任何复数相加,结果仍为该复数,表示为(0+0*i)。

复数加法逆元素:任何复数与其加法逆元素相加,结果为复数加法恒等元。z=(a+b*i) 的加法逆元素为z*=(-a-b*i)。

共轭复数:当两个复数实部相等,虚部互为相反数时,这两个复数互为共轭复数。

复数与之共轭复数相乘得泛数的平方

z\bar{z}\\=(a+bi)(a-bi)\\ =a^2-a*bi+a*bi-b^2*i^2\\ =a^2+b^2\\ =\left | z \right |^2

复数乘法

用一个复数的实部和虚部分别去乘另一个复数的实部和虚部,把结果相加。

z1*z2\\=(a+bi)*(c+di)\\ =ac+ad*i+bc*i+bd*i*i\\ =ac+(ad+bc)*i+bd*(-1)\\ =(ac-bd)+(ad+bc)*i

复数除法

需要把除数转化为实数进行,即分子分母同时×分母的共轭复数

z1/z2\\=(a+bi)/(c+di)\\ =((a+bi)*(c-di))/((c+di)*(c-di))\\ =(ac+bd)+(bc-ad)*i/(c^2+d^2)

复数与其倒数

复数与其倒数相乘,结果为1

1/z=1/(a+bi)=a/(a^2+b^2)+b/(a^2+b^2)*i

四元数

四元数本身可视为是在复数基础上的拓展。可称为是超复数(hyper-complex number)。

四元数是指有一个实部和3个虚部的复数

ijk分别是表示xyz轴上的\sqrt{-1}

q=(q_0+q_1*i+q_2*j+q_3*k)

也可表示为:

q=q_0+q_v

q_v=(q_1*i+q_2*j+q_3*k)

虚数基(i,j,k)可以看作是虚拟坐标系中3个相互垂直的单位向量,看作循环xyzxyzx……每一个可以看作另两个的乘积,换位置需要求反

i^2=j^2=k^2=-1=i*j*k

i=j*k=-k*j

j=k*i=-i*k

k=i*j=-j*i

四元数代表的是带有齐次坐标的三维向量。

范数

\left |q \right |^2=q_0^2+q_1^2+q_2^2+q_3^2

加法与减法:实部和虚部的每一项分别进行加或减

q=q_0+q_v

p=p_0+p_v

q+p=(q_0+p_0)+(q_v+p_v)

加法逆元素

和原四元数相加,结果为0的四元数。(全部取反

加法恒等元

和任意四元数相加,结果仍为该四元数的四元数。等同于数字0

乘法:用前一个四元数的实虚部与后一个四元数的每一个实虚部相乘

PS:两个不同ijk相乘需使用公式变换而不是直接等于-1

p*q=(p_w+p_x*i+p_y*j+p_z*k)(q_w+q_x*i+q_y*j+q_z*k)\\ =(p_y*q_z-p_z*q_y+q_w*p_x+p_w*q_x)*i\\ +(p_z*q_x-p_x*q_z+q_w*p_y+p_w*q_y)*j\\ +(p_x*q_y-p_y*q_x+q_w*p_z+p_w*q_z)*k\\ +(p_w*q_w-p_x*q_x-p_y*q_y-p_z*q_z)

用向量的形式表示为。

{\color{Black} q=q_0+q_v}

{\color{Black} p=p_0+p_v}

r=p*q=(p_0*q_0-(p_v\cdot q_v))+(p_0*q_v+q_0*p_v+p_v\times q_v)

乘法恒等元

相当于数学意义上的1

q=1+0*i+0*j+0*k

共轭四元数

实部相等,虚部各分量均相反的两个四元数互为共轭四元数。

q=q_0+q_v

\bar{q}=q_0-q_v

q*\bar{q}=q_0^2+q_1^2+q_2^2+q_3^2=\left |q \right |^2

原数与共轭相乘等于泛数的平方

单位四元数

模为1的四元数,可以用三角函数的形式表示。

q=(cosθ,sinθ*uq)=cosθ+sinθ*uq

倒数

四元数乘以它的倒数结果为1

q*q^{-1}=1

q*q^{-1}*\bar{q}=\bar{q}    ——>   (q*\bar{q})*q^{-1}=\bar{q}      ——>    \left |q \right |^2*q^{-1}=\bar{q}     ——>      q^{-1}=\bar{q}/\left |q \right |^2

在计算分数时使用得更多,先乘上分母的倒数,此时分母变成实数,而分子需要考虑

齐次坐标

由n+1维向量表示一个n维向量。补充一个齐次坐标来方便运算(主要为了平移变换)

使用齐次坐标的优势在于:

1)提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法。

2)可以表示无穷远点。例如,n+1维中,h=0的齐次坐标实际上表示了一个n维的无穷远点,可以进行点的投影。

基本变换

游戏中一般是:先缩放,后旋转(自转),再平移,可以再加一次旋转(公转)或平移

三大变换都从单位矩阵出发

平移变换

在计算机图形学中,用矩阵T表示一个平移矩阵,三维坐标系下,T是一个4×4的矩阵(添加了齐次坐标)。例:(1,1,0,1[齐次])

从单位矩阵出发,改(4,1)(4,2)(4,3)位置为xyz轴上的移动

通常在移动运算过程当中齐次坐标(4,4)位置一直保持是1,否则会影响旋转和平移等变换

齐次坐标的存在主要为了完成平移,因为旋转和缩放只是原数据发生了变化,而没有叠加数据进去

T(t)=T(t_x,t_y,t_z)=\begin{bmatrix} 1&0&0&0\\ 0&1&0&0\\ 0&0&1&0\\ t_x&t_y&t_z&1 \end{bmatrix}

pT=(p_x,p_y,p_z,1)\begin{bmatrix} 1&0&0&0\\0&1&0&0\\0&0&1&0\\t_x&t_y&t_z&1 \end{bmatrix} =(p_x+t_x,p_y+t_y,p_z+t_z,1)

平移变换矩阵的逆矩阵表示为(41)(42)(43)取反

T^{-1} (t)=T(-t)

旋转变换

旋转变换保持图形各部分之间的线性关系和角度关系,变换后物体的形状不会发生改变。

绕某一轴旋转时,那个坐标轴不会发生变化,且齐次坐标不发生变化:

绕x轴旋转

R_x (\theta )=\begin{bmatrix} 1&0&0&0\\0&cos\theta &sin\theta &0\\0&{\color{Red} -sin\theta} &cos\theta &0\\0&0&0&1 \end{bmatrix}

绕y轴旋转

R_y (\theta )=\begin{bmatrix} cos\theta &0&{\color{Red} -sin\theta} &0\\0&1 &0 &0\\sin\theta &0 &cos\theta &0\\0&0&0&1 \end{bmatrix}

绕z轴旋转

R_z (\theta )=\begin{bmatrix} cos\theta &sin\theta &0&0\\ {\color{Red} -sin\theta} &cos\theta &0&0\\0&0&1&0\\0&0&0&1 \end{bmatrix}

逆矩阵为其转置矩阵

点的旋转变换就是点向量与矩阵相乘。

pR=(p_x,p_y,p_z,1)\begin{bmatrix} cos\theta &sin\theta &0&0\\ -sin\theta &cos\theta &0&0\\0&0&1&0\\0&0&0&1 \end{bmatrix}\\ =(p_x cos\theta -p_y sin\theta,p_x sin\theta+p_y cos\theta,p_z,1)

对于绕任意轴旋转角度θ的旋转矩阵R,从中取出与旋转变换相关的3×3的子矩阵,可以计算出其对角元素之和是一个与坐标轴无关的常数,称为迹(Trace):

tr(R)=1+2cosθ

缩放变换

在计算机图形学中,用矩阵S来表示一个缩放矩阵,三维坐标系下,S是一个4×4的矩阵。

S(s) =\begin{bmatrix} s_x&0&0&0\\0&s_y&0&0\\0&0&s_z&0\\0&0&0&1 \end{bmatrix}

如果对缩放矩阵的缩放因子s的一个或者3个分量置负,就会产生一个反射矩阵(Reflective Matrux),或者称为镜像矩阵(Mirror Matrix)。如果其中两个因子是-1,将会旋转180度。

逆矩阵:11)(22)(33)取倒数

变换级联

可以把多个变换矩阵组合起来,称为变换级联(不满足交换律,但是满足结合律

{p}''={p}' R=(pT)R=p(TR)

进行组合变换时,组合变换的矩阵为各个变换矩阵的乘积。由于矩阵乘法运算不满足乘法交换律,因此,矩阵相乘的先后顺序会直接影响最终结果。

游戏中一般是先缩放,后旋转再平移(后还可再添加变换)

人身上有几千几万个点,如果单个处理,每个点都需要旋转平移缩放,级联优化了整体效率(对于n个点的复合变换)

变换矩阵的逆矩阵补充知识点:

把一个点恢复为原状,可以用变换后的点乘以变换矩阵的逆矩阵。

1)旋转矩阵的逆矩阵等于其转置矩阵R^{-1}=R^T

2)如果矩阵是单个变换,可以直接按照各自的逆矩阵规则计算出相应的逆矩阵。

3)如果矩阵是组合矩阵,可以通过计算得到其逆矩阵。

M=T(t)R(\theta )

M^{-1}=R^{-1} (\theta )T^{-1} (t)=R(-\theta )T(-t)

欧拉变换

欧拉变换是一种非常直观的方式,主要用来构造一个自定位(如摄像机)或者使任何实体处于特定方向的矩阵,其命名源于瑞典的著名数学家Euler Leonard。

欧拉变换是绕3个旋转轴的旋转矩阵的乘积。

M=R_y R_x R_z

(顺序为yxz,转头记忆:当有人不是在你正面叫你时,一般会:转头,再上下看,可能左右晃)

可以修改顺序,但就不符合欧拉变换了

绕x轴旋转的角称为倾斜角(pitch),绕y轴旋转的角称为翻滚角(head,在飞行模拟中称为偏转角yaw),绕z轴旋转的角称为摇摆角(roll)。[满足人体工学]

yaw——pitch——roll

在飞行模拟游戏中可能为z在最前面

欧拉角的局限性在于:

1)欧拉变换的顺序不能交换;

2)欧拉角会产生万向节死锁(Gimbal Lock)现象。

万向节死锁:头朝下脚朝上,即坐标轴左右(上下等方向)冲突

解决:限制镜头的旋转角度

猜你喜欢

转载自blog.csdn.net/CJQmiao/article/details/128128246