变换
平移
将x坐标和y坐标加上某一个值就完成了平移操作
如果使用矩阵可以表示为:
并且$P^{\prime} = P + T$
三维平移和二维平移类似,只是增加了一项
旋转
如果使用向量形式进行表示为$P^{\prime} = R P$,其中R为
上面是围绕(0, 0)进行旋转的例子,如果旋转位置为($x_r , y_r$),则变换方程为
三维旋转
如果是绕着xyz轴进行旋转,那么模式和二维旋转大致类似,但是如果按照任意旋转轴进行旋转,则需要额外进行考虑。
首先如果是平行于某一个轴,则可以先平移对象使其旋转轴于某一个坐标轴重合,然后再进行旋转。旋转完成之后平移使旋转轴回到原位置
如果该旋转轴不平行于任意旋转轴,则按照如下步骤进行:
- 平移对象,使旋转轴通过坐标原点
- 旋转对象使旋转轴于某一坐标轴重合(一般是z轴)
- 完成指定旋转
- 利用逆旋转使旋转轴回到初始方向
- 平移使旋转轴回到原位置
第一步需要移动到原点。假设定义旋转轴的两个端点为$P_1 (x_1 , y_1 , z_1 )$和$P_2 (x_2 , y_2 , z_2 )$。它的变换矩阵形式为
而第二步首先可以通过x轴旋转到xoz平面上,然后再通过y轴旋转来和z轴重合。假设旋转轴的向量为u,则旋转到xoz平面的旋转角$\alpha$为:
$u^{\prime}$ = (0, b, c),并且d=$\sqrt{b^2 + c^2}$
同理我们可以得到sin值为$\frac{b}{d}$,因此它的矩阵形式为
变换到xoz平面上之后,向量可以表示为(a, 0, d),其中$cos\beta = d , sin\beta = -a$,然后使用变换矩阵
三维旋转的四元数方法
四元数是一个负数带一个是不和三个虚部,写为:
他也可以写为q = (s, v),其中v是(a, b, c)
- 加法定义: $q_1 + q_2 = (s_1 + s_2 ) + (a_1 + a_2 ) i + (b_1 + b_2 ) j + (c_1 + c_2 ) k$
- 乘法: $q_1 q_2 = (s_1 s_2 - v_1 v_2 , s_1 v_2 + s_2 v_1 + v_1 \times v_2)$
- 平方和定义: $|q|^2 = s^2 + v \dot v$
- 逆: $q^{-1} = \frac{1}{|q|^2} (s, -v)$
- $qq^{-1} = q^{-1}q = (1, 0)
如图所示,左边是一个二维的图,怎么把它规约到一维空间中呢?一种方法是在(-1, 0)向左发出射线,那么映射到一维空间中的x是这条射线的斜率,y是和圆交点的值。
并且他还有些很好的性质,例如现在有一个点w = s + ai , 如果想要旋转$\theta$度只需要用该度数对应的函数值乘上w。
具体形式可以看上面链接中的三维及之后的部分
缩放
而二维缩放的形式为: $P^{\prime} = SP$其中S
三维缩放和二维缩放类似
齐次坐标
每个基本变换都可以表示为如下形式:
如果我们把所有基本变换统一起来用一个变换来表示,就产生了齐次坐标。这个坐标需要将维度进行扩展,例如(x, y)扩展到(x, y, h),然后使用变换矩阵就可以进行变换。
平移矩阵
平移的表示形式为:$P^{\prime} = T(t_x , t_y , t_z ) P$,其中T为:
旋转矩阵
二维旋转的变换矩阵为:
三维旋转一般使用四元数
缩放矩阵
变换矩阵为: