线性变换 矩阵

线代说明了一个事实,就是“任意的”(见下)变换(x乘以y,x加上y,以及之间的任意组合)可以通过构造一个特定的矩阵,以矩阵乘法的方式“一次”完成。这就给硬件优化留下了余地。

而图形学说明了一个事实,那就是空间映射和顶点变换都是线性齐次的运算,也就是上文所述的那种“任意的”变换,这就意味着,现代说明的那种计算方式,可以应用到图形学里面。

图形学未必是需要用矩阵来做,一来矩阵刚好满足需求,二来矩阵乘法的话比较简单明了而且概念统一(所有的变换都综合在一起了),三来计算机可以做优化。

从图形学的一些概念可以看出这种“向线代伸手”的意图是故意的:为了能涵盖所有的算法,图形学创造了“齐次坐标”这种东西,根本目的是为了将某些原本矩阵乘法无法涵盖进去的运算也搞进去,而不惜增加一维的运算量= =

用矩阵表示线性变换的一个主要动力就是可以很容易地进行组合变换以及逆变换。
组合变换:组合可以通过矩阵乘法来完成。如果AB是两个线性变换,那么对向量x先进行A变换,然后进行B变换的过程为:
任意线性变换都可以用矩阵表示为易于计算的一致形式,并且多个变换也可以很容易地通过矩阵的相乘连接在一起。
线性变换不是唯一可以用矩阵表示的变换。R维的仿射变换与透视投影都可以用齐次坐标表示为RP维(即n+1 维的真实投影空间)的线性变换。因此,在三维计算机图形学中大量使用着 4x4 的矩阵变换
三维图形学,为什么使用四维矩阵呢?主要有两个原因,第一,为了平移变换,第二,为了区别点和向量。

如果不用四维矩阵,平移变换必须用向量加减法,但是四维可以将缩放平移旋转统一为矩阵乘法.

v = {x,y,z,w}当w不为0时(一般=1),表示一个点;当w=0时,表示向量.
我来回答一下,分为两个问题:

1. 为什么引入齐次坐标可以表示平移?

答:

首先我们用一个矢量来表示空间中一个点:r = [ r_{x}, r_{y}, r_{z}]
如果我们要将其平移,平移的矢量为:t=[ t_{x}, t_{y}, t_{z}]
那么正常的做法就是:r + t =[ r_{x}+t_{x}, r_{y}+t_{y}, r_{z}+t_{z}]

如果不引入齐次坐标,单纯采用3X3矩阵乘法来实现平移
你想做的就是找到一个矩阵m,使得
r\cdot m = r + t =[ r_{x}+t_{x}, r_{y}+t_{y}, r_{z}+t_{z}]
然后你就会发现你永远也找不到这样的矩阵

所以我们需要新引入一个维度,原来r = [ r_{x}, r_{y}, r_{z},1]
那么我们可以找到一个4X4的矩阵来实现平移
\left[ 1,0,0,0 \right]
\left[ 0,1,0,0 \right]
\left[ 0,0,1,0 \right]
\left[ t_{x} ,t_{y},t_{z},1 \right]
现在,就有:
r\cdot m = r + t =[ r_{x}+t_{x}, r_{y}+t_{y}, r_{z}+t_{z}, 1]

2. 为什么要引入齐次坐标来表示平移?

在计算机图形学中,坐标转换通常不是单一的,一个几何体在每一帧可能都设计了多个平移,旋转,缩放等变化,这些变化我们通常使用串接各个子变化矩阵的方式得到一个最终变化矩阵,从而减少计算量。所以我们需要将平移也表示为变化矩阵的形式。因此,只能引入齐次坐标系。
posted on 2015-06-29 16:33  想要飞的鱼  阅读(1020)  评论(0编辑  收藏  举报