图形学复习
CH4 几何变换
4.1 基本二维变换
平移、旋转和缩放是常见的基本二维变换
(1)二维平移
将二维平面上点P=????xy????平移到P′=????x′y′????=?????x+txy+ty?????,则称T=?????txty?????为平移向量
那么有平移方程:
P′=P+T
(2)二维旋转
将二维平面上点P=????xy????绕原点旋转逆时针旋转θ角得到坐标P′=????x′y′????=????xcosθ?ysinθxsinθ+ycosθ????,则称R=????cosθsinθ?sinθcosθ????为旋转矩阵
那么有旋转方程:
P′=R?P
(3)二维缩放
将二维平面上点P=????xy????按一定比例缩放得到坐标P′=????x′y′????=?????x?sxy?sy?????,则称S=?????sx00sy?????为缩放矩阵
那么有缩放方程:
P′=S?P
4.2 矩阵表示和齐次坐标
(1)矩阵表示
将上述基本变换方程写成统一的格式P′=M1?P+M2,如平移变换可以写成:
P′=????1001?????P+?????txty?????
(2)齐次坐标
上述矩阵表示有矩阵M1和向量M2,格式不是很统一因此引入齐次坐标(xh,yh,h)=(x?h,y?h,h),一般取h=1得到二维坐标(x,y)的规范化齐次坐标(x,y,1)
引入齐次坐标的原因是:
为了使变换的表示法统一:
利用齐次坐标表示位置,可以将所有的几何变换公式用矩阵相乘的形式来表示,便于变换合成并且便于硬件实现
引入齐次坐标后所有的几何变换都可以由3X3矩阵M表示:
????????x′y′1????????=M????????xy1???????
二维平移矩阵MT=????????100010txty1????????,二维旋转矩阵MR=???????cosθsinθ0?sinθcosθ0001???????,二维缩放矩阵MS=????????sx000sy0001????????
4.3 逆变换和复合二维变换
(1)逆变换
对变换矩阵M求逆就得到逆变换矩阵M?1
(2)复合二维变换
先做二维变换M1再做二维变换M2得到复合二维变换二维变换M=M2?M1,即:
P′=M2?M1?P=M?P
复合二维变换是不可交换顺序的,因为矩阵乘法没有交换律
(3)用复合二维变换表示绕某基准点的二维旋转
前面介绍了绕原点的旋转变换,我们可以用复合二维变换表示绕某基准点的二维旋转,即平移对象使基准点平移到原点 → 绕远点旋转 → 平移对象使基准点回到初始位置,设基准点坐标为(xr,yr)则有复合变换矩阵:
M=????????100010xryr1????????????????cosθsinθ0?sinθcosθ0001????????????????100010?xr?yr1????????
4.4 基本三维变换
同样三维变换可以引入齐次坐标和4X4的矩阵表示
三维平移矩阵MT=???????????100001000010txtytz1???????????,三维缩放矩阵MS=???????????sx0000sy0000sz00001???????????
三维旋转比较复杂,分为三维绕轴旋转和一般三维旋转讨论
(1)三维绕轴旋转
三维绕轴旋转在某个坐标轴二维平面内的投影就是二维绕原点旋转
绕z轴旋转矩阵MRz=???????????cosθsinθ00?sinθcosθ0000100001???????????
绕x轴旋转矩阵MRz=???????????10000cosθsinθ00?sinθcosθ00001???????????
绕z轴旋转矩阵MRz=???????????cosθ0sinθ00100?sinθ0cosθ00001???????????
(2)一般三维旋转
一般三维变换是指以三维坐标系任意直线为旋转轴的三维旋转,仿照一般二维旋转我们可以得到以下复合三维旋转实现一般三维旋转的步骤:
- 平移对象使其旋转轴通过原点
- 旋转对象使其旋转轴和某一坐标重合(一般取z轴)
- 绕该轴做指定旋转
- 利用2步中逆旋转回到原始方向
- 利用1步中逆平移回到原始位置
(3)一般三维对称变换
一般三维对称变换是指以三维坐标系中任意平面为镜面做的对称三维变换,基本思路也是通过复合变换把镜面平面和坐标轴平面重合,做坐标轴平面的对称变换:
- 平移对象使其对称平面过原点
- 旋转对象使其对称平面与某坐标轴平面重合(一般取xy平面),该步骤一般考虑为让其法向量旋转至和该坐标轴平面重合,而旋转又分成两步:先绕x轴旋转,再绕y轴旋转
- 相对于该坐标轴平面做对称变换
- 按第2步和第1步中做的变换,反序做反变换
4.5 仿射变换
定义仿射变换矩阵MR=???????????axxayxazx0axyayyazy0axzayzazz0bxbybz1???????????,其他几何变换
都是仿射变换的特例