计算机图形学坐标变换

2017-09-10  本文已影响0人  雨诺寒雪

先附上原文链接:
https://www.zybuluo.com/yuyujunjun/note/879480
由于简书对数学公式的兼容性不那么好,还是请移步到原文去看。


比例变换

沿坐标轴变换: 乘对应对角矩阵即可

沿任意坐标变换:

旋转变换

对于二维向量:

< x,y >变成 <-y,x> 即可求出其旋转90度的向量,和原始向量构成一组基可求的与原始向量成任意角度的新向量。

对于三维向量:

矩阵方法:(假设向量皆为单位向量)

将原始向量P绕任意轴A旋转任意角度:

  1. 首先沿着该轴将向量分解为沿轴的分量Y和垂直轴的分量C,因为平行于轴的分量在旋转过程中不变,我们只用考虑垂直轴的分量C:
    $$Y:(A \cdot P)A $$
    $$ C: P - Y $$
  2. 计算得到垂直A且包含C的平面,则可以在该平面内做二维旋转变换
  3. 将旋转后的向量加上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$的几何意义——投影}$

除了点之外的变换

前面已经提到对于方向向量的平移该如何变换,旋转和缩放方向向量和普通点的变换类似。
这里讲点的切向量和法向量的变换。

切向量

切向量可以通过两个顶点向量之间的差获得,因此可以用变换后的两个定点作差得到,在变换过程中,可以用相同矩阵进行变化。(如果是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$。

上一篇 下一篇

猜你喜欢

热点阅读