计算机图形:特殊几何变换

平移、旋转、缩放这些属于基本变换,还有一些特殊二维变换如反射、错切。本文讲特殊二维变换。

特殊二维变换

反射

产生对象镜像的变换,称为反射(reflection)。

反射镜像如何得到?
通过将对象绕反射轴旋转180°。反射轴(axis of reflection)可以是xy平面内一条直线,或垂直于xy平面的一条直线。
当反射轴在xy平面内时,绕该轴旋转的路径在垂直于xy平面的平面中;
当反射轴⊥xy平面时,旋转路径在xy平面内。

特殊情况:

  1. 反射轴是x轴,即直线y=0

x值保持不变,y值为原来反号。于是,反射变换矩阵:

\[\tag{1} \begin{bmatrix} 1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1 \end{bmatrix} \]

  1. 反射轴是y轴,即直线x=0

y值保持不变,x值为原来反号。于是,反射矩阵:

\[\tag{2} \begin{bmatrix} -1 & 0 & 0\\ 0 & 1 & 1\\ 0 & 0 & 1 \end{bmatrix} \]

  1. 同时翻转x、y坐标,即相对于原点的反射

反射矩阵:

\[\tag{3} \begin{bmatrix} -1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1 \end{bmatrix} \]

相当于θ=180°的旋转矩阵R(θ),即将xy平面内的对象绕原点旋转180°。

关于y轴、x轴、原点反射示意图:
img

  1. 反射轴为直线y=x

反射矩阵:

\[\tag{4} \begin{bmatrix} 0 & 1 & 0\\ 1 & 0 & 0\\ 0 & 0 & 1 \end{bmatrix} \]

两种方法:
Ⅰ 根据y=x对称性

任一点(x,y)关于y=x对称点为(y,x),于是

\[y'=x\\ x'=y \]

可得变换矩阵。

Ⅱ 复合变换

分三步:
①将直线y=x顺时针旋转45°(θ=45°),到x轴上,变换矩阵R(-θ);
②按x轴反射,变换矩阵\(R_{y=0}\)(式(1));
③逆时针旋转45°,将直线y=x旋转回原始位置,变换矩阵R(θ)。

复合变换矩阵:

\[\tag{5} \begin{bmatrix} 0 & 1 & 0\\ 1 & 0 & 0\\ 0 & 0 & 1 \end{bmatrix} \]

  1. 关于任意直线y=mx+b的反射

可以用平移-旋转-反射的复合变换来完成:
先平移到经过原点,再旋转到x轴,进行x轴反射,最后逆旋转、逆平移回原位置。

错切

错切(shear)是一种使对象形状发生变化的变换,经过错切的对象好像是由已经相互滑动的内部夹层组成。

2种常用错切:
1)移动x坐标值的错切;
2)移动y坐标值的错切。

  • 相对于x轴的x方向错切

变换矩阵:

\[\tag{6} \begin{bmatrix} 1 & sh_x & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{bmatrix} \]

对应坐标变换:

\[\tag{7} x'=x+sh_x\cdot y, y'=y \]

\(sh_x\)可以是任意实数。

例,\(sh_x=2\),正方形错切变换成平行四边形,如下图:
img

  • 相对于其他参考线的x方向错切

错切矩阵:

\[\tag{8} \begin{bmatrix} 1 & sh_x & -sh_x\cdot y_{ref}\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{bmatrix} \]

对应坐标变换:

\[\tag{9} x'=x+sh_x(y-y_{ref}), y'=y \]

例,错切参数\(sh_x={1\over 2}\)、相对于直线\(y_{ref}=-1\)的错切:
img

  • 相对于\(x=x_{ref}\)的y方向错切

错切矩阵:

\[\tag{10} \begin{bmatrix} 1 & 0 & 0\\ sh_y & 1 & -sh_y\cdot x_{ref}\\ 0 & 0 & 1 \end{bmatrix} \]

对应坐标变换:

\[\tag{11} x'=x, y'=y+sh_y(x-x_{ref}) \]

小结

反射能得到对象关于某个坐标轴,或某个点旋转后的镜像对象。
错切能将正方形变换成梯形,透视投影的斜透视投影棱台中会用到。


特殊三维变换

三维反射

二维反射相对于给定直线或点;
三维反射可以相对于给定反射轴,或反射平面(reflection plane)。

  1. 相对于给定轴时,等价于绕此轴旋转180°;
  2. 反射平面是坐标平面(xy、xz或yz)时,可以看成是四维空间中左手系和右手系之间的转换,直接得到坐标值。
  3. 如果是相对于一般平面的反射,可以先将平面旋转到坐标平面,然后再相对于坐标轴或坐标反射,最后变换回原来位置。

如,相对于xy平面的反射,z坐标反号,x、y坐标不变。故反射矩阵:

\[\tag{12} M_{zreflect}=\begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & -1 & 0\\ 0 & 0 & 0 & 1 \end{bmatrix} \]

如下图所示,相对于xy平面反射,可通过右手系变换到左手系实现,反射矩阵为式(12):
img

三维错切

类似于二维错切,可用来修改对象形状,也可以用于三维透视投影。

相对于选定参考位置的z轴错切变换矩阵:

\[\tag{13} M_{zshear}=\begin{bmatrix} 1 & 0 & sh_{zx} & -sh_{zx}\cdot z_{ref}\\ 0 & 1 & sh_{zy} & -sh_{zy}\cdot z_{ref}\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{bmatrix} \]

错切参数有2个:\(sh_{zx},sh_{zy}\),可以是任意实数。

变换效果:用离\(z_{ref}\)距离成比例的值改变x、y坐标,而不改变z坐标。
对应坐标变换:

\[\begin{aligned} x'&=x+sh_{zx}(z-z_{ref})\\ y'&=y+sh_{zy}(z-z_{ref})\\ z'&=z \end{aligned} \]

posted @ 2023-10-20 22:06  明明1109  阅读(98)  评论(0编辑  收藏  举报