线性代数(四) 仿射变换

齐次坐标

对于向量而言, 平移操作是没有意义的, 因为向量只描述方向与大小, 与位置无关. 但是很明显, 在计算机图形学中, 我们不只关注方向, 同样需要考虑物体(顶点)的位置信息. 齐次坐标的重要作用就是使我们可以方便的将位置和向量进行统一表示.

我们将三维坐标扩展为四维坐标, 第四维 w 则可以用来表示当前对象是点还是向量. 具体来讲

  1. (x, y, z, 0) 表示向量
  2. (x, y, z, 1) 表示点

齐次坐标表示法的思路:

  1. 两点之差 q − p = ( q x , q y , q z , 1 ) − ( p x , p y , p z , 1 ) = ( q x − p x , q y − p y , q z − p z , 0 ) {\mathbf q - \mathbf p = (q_x, q_y, q_z, 1) - (p_x, p_y, p_z, 1) = (q_x-p_x, q_y-p_y, q_z-p_z, 0)} qp=(qx,qy,qz,1)(px,py,pz,1)=(qxpx,qypy,qzpz,0) 得到一个向量.
  2. 点与向量的和 p + v = ( p x , p y , p z , 1 ) + ( v x , v y , v z , 0 ) = ( p x + v x , p y + v y , p z + v z , 1 ) {\mathbf p + \mathbf v = (p_x, p_y, p_z, 1) + (v_x, v_y, v_z, 0) = (p_x+v_x, p_y+v_y, p_z+v_z, 1)} p+v=(px,py,pz,1)+(vx,vy,vz,0)=(px+vx,py+vy,pz+vz,1)得到一个点.

接下来会说明: w = 1 可以使点内正确的平移, w = 0 则可以防止向量坐标受到平移的影响.

仿射变换的定义及其矩阵表示

仿射变换是一个线性变换和一个平移向量的组合. 用矩阵表示如下:
α ( u ) = u A + b = [ x , y , z ] [ A 00 A 01 A 02 A 10 A 11 A 12 A 20 A 21 A 22 ] + [ b x , b y , b z ] = [ x ′ , y ′ , z ′ ] {\alpha(u) = uA+b=[x,y,z] \begin{bmatrix} A_{00} & A_{01} & A_{02} \\ A_{10} & A_{11} & A_{12} \\ A_{20} & A_{21} & A_{22} \\ \end{bmatrix} + [b_x, b_y, b_z] = [x', y',z'] } α(u)=uA+b=[x,y,z]A00A10A20A01A11A21A02A12A22+[bx,by,bz]=[x,y,z]

如果把他扩展为齐次坐标, 则可以更简洁的写作:
[ x , y , z , 1 ] [ A 00 A 01 A 02 0 A 10 A 11 A 12 0 A 20 A 21 A 22 0 b x b y b z 1 ] = [ x ′ , y ′ , z ′ , 1 ] { [x, y, z, 1] \begin{bmatrix} A_{00} & A_{01} & A_{02} & 0 \\ A_{10} & A_{11} & A_{12} & 0 \\ A_{20} & A_{21} & A_{22} & 0 \\ b_x & b_y & b_z & 1\\ \end{bmatrix} = [x', y',z',1] } [x,y,z,1]A00A10A20bxA01A11A21byA02A12A22bz0001=[x,y,z,1]

可以看出, 加上向量 b 的这步运算, 从本质上来讲是一个平移变换. 我们既不希望平移操作应用到向量上, 又希望向量受到仿射变换中线性部分的影响(旋转和缩放). 这时, 根据仿射变换的矩阵表示和矩阵乘法的计算规则, 我们可以轻松的得出, 将第四分量 w 设置为 0 便可以清除仿射变换中的平移部分并保留线性部分. 这一特征便可以用来表示向量.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值