先附上原文链接:
https://www.zybuluo.com/yuyujunjun/note/879480
由于简书对数学公式的兼容性不那么好,还是请移步到原文去看。
比例变换
沿坐标轴变换: 乘对应对角矩阵即可
沿任意坐标变换:
-
首先将其变换到标准坐标系中:
乘该坐标系的逆矩阵,如果是该坐标系正交,则其逆矩阵为其转置矩阵,如何求逆矩阵,详见我另一篇博客。
乘以对角矩阵施加变换
再乘以该坐标系变换回来
旋转变换
对于二维向量:
< x,y >变成 <-y,x> 即可求出其旋转90度的向量,和原始向量构成一组基可求的与原始向量成任意角度的新向量。
对于三维向量:
矩阵方法:(假设向量皆为单位向量)
将原始向量P绕任意轴A旋转任意角度:
- 首先沿着该轴将向量分解为沿轴的分量Y和垂直轴的分量C,因为平行于轴的分量在旋转过程中不变,我们只用考虑垂直轴的分量C:
$$Y:(A \cdot P)A $$
$$ C: P - Y $$ - 计算得到垂直A且包含C的平面,则可以在该平面内做二维旋转变换
- 将旋转后的向量加上Y即得到最后结果
$$P'=Pcos\theta + (A \times P)sin \theta + A(A \cdot P)(1 - cos \theta) $$
四元数方法:
四元数介绍:
$q=<w,x,y,z>=w + xi+yj+zk$ 或者 $q=s+\textbf{v}$
$\bar{q}=s-\textbf{v}$
$q_1q_2=s_1s_2-\textbf{$v_1$}\textbf{$v_2$}+s_1\textbf{$v_2$}+s_2\textbf{$v_1$}+\textbf{$v_1$}\textbf{$v_2$}$
旋转相当于将原始的一个角经过一个函数变换,使之长度、角度、手相性不变。
长度不变:$$length(F(P))=length(P)$$
角度不变:$$F(P_1) \cdot F(P_2) = P_1 \cdot P_2$$
手相性不变:$$F(P_1) \times F(P_2) = F (P_1 \times P_2)$$
对于这样的F,我们有$F(P)=qPq^{-1}$,其中q为非零的四元数
$\textbf{note:}$ 任意标量a,乘以q,得到的 aq 和 q 执行的是相同的旋转操作。
最后结论:绕A轴进行旋转,相当于$$q=cos\frac{\theta}{2}+Asin\frac{\theta}{2}$$的上述函数运算。
平移操作
将点P从一个坐标系变换到另一个坐标系的表达式为:$$ P'=MP+T $$
具体操作:
$$F=
\left{
\begin{matrix}
&M&T\
&0&1
\end{matrix}
\right}
$$
将$P$扩充为$<P_x,P_y,P_z,1>$
实际应用中:
平移变换中,表示点的向量将会发生变化,但是表示方向的向量不变。
所以在进行变化过程中,表示点的向量的$w$分量设为1,但是表示方向向量的$w$分量设置为0,则可以统一变化。
$\textbf{note:$w$的几何意义——投影}$
- $\bar{P}=<\frac{x}{w},\frac{y}{w},\frac{z}{w}>$表示P向量与$w=1$平面的交点。
- 给四维向量P乘以任何比例系数,都对应三维空间的相同点。
除了点之外的变换
前面已经提到对于方向向量的平移该如何变换,旋转和缩放方向向量和普通点的变换类似。
这里讲点的切向量和法向量的变换。
切向量
切向量可以通过两个顶点向量之间的差获得,因此可以用变换后的两个定点作差得到,在变换过程中,可以用相同矩阵进行变化。(如果是4维,应向方向向量一样扩充得到)
法向量
变换后的法向量常常指向一个与变换表面不垂直的方向。
但是切向量和法向量内积的值是一定等于0的。已知初始切向量法向量,变换后的切向量,我们可以得到变换后的法向量。
$N\cdot T=N'\cdot T'=(GN)\cdot (MT) =0$
其中M是一般点的变换矩阵,G是我们需要求的法向量的变换矩阵。
$N\cdot T=N^TT$
$(GN)\cdot (MT)=(GN)T(MT)=NTG^TMT=0$
所以只需要$GTM=I$即可,所以$G=(M{-1})^T$,如果M是正交矩阵,则$G=M$。