几种基本矩阵变换的推导过程

前提:一个图在直角坐标系上的所有点,都是从原点(0, 0, 0)开始。

以二维为例,所有的矩阵变换,都可以表示成  x` = ax + by,  y` = cx + dy.  这种表示方法的原理和背后的意义,见

《图形学中的矩阵是什么,为什么长得这么奇怪?》

缩放矩阵 的推导

 如图所示,所谓缩放,即一个图上的所有点的x和y值,都乘以缩放系数S。缩放0.5,其实就是x值变成0.5x,y变成0.5y,写成

 对比 x` = ax + by,  y` = cx + dy. 可知 a = s,b = 0, c = s,d = 0. 可推出缩放矩阵的变换为

旋转矩阵 的推导

如图所示,点P绕着原点(0, 0)旋转θ

x` = c - d

y` = a + b

a = sinθ·x

b = cosθ·y

c = cosθ·x

d = -sinθ·y

x` = cosθ·x - sinθ·y

y` = sinθ·x + cosθ·y

 对比 x` = ax + by,  y` = cx + dy. 可得旋转矩阵为

 平移矩阵 的推导

 如图所示,所谓平移矩阵,即在x方向上移动了tx,在y方向上移动了ty

 可是,由于平移矩阵并不能表示成 x` = ax + by,  y` = cx + dy.的形式

于是我们在原来的维度上“强行”加多一维,用三维来表示二维

 

 

这样,原来的表示方法依然成立:

x` = ax + by + ez

y` = cx + dy + fy

z` = gx + hy + iz 

那么在二维空间中,z值 是多少?

我们认为,对于一个点而言,z值是1;对于向量而言,z值是0,表示一个点没有产生相对位移。

好了,现在拿平移矩阵代入这个形式中,

x` = x + tx = ax + by + ez(z=1),可知 a = 1, b = 0, e = tx

y` = y + ty = y` = cx + dy + fz(z=1),可知 c = 0, d = 1, f = ty

z` = 1 = gx + hy + iz(z=1),可知 g = 0,h = 0, i = 1

从而得到平移矩阵的变换为

 切变矩阵 的推导

 

如图所示,所谓切变矩阵,即一个图形上的某些点在x方向上发生了偏移,偏移的大小跟y有关,y越大偏移越大,即

x` = x + ?y

y` = y

再仔细分析,发现偏移值跟y的百分比有关,y为0时没有偏移也就是,在中间y=0.5c时偏移0.5b,在最高点y=1c时偏移1b,可知 x的偏移量等于y/b*c,即

x` = x + (b/c)y

这里有2个变量b和c,我们可以减少其中一个变量的影响,即把c归一化(b和c同时除以c),比如c是100,除以100等于1,那么b也除以100,把b/c看成a/1

  注意:这里的a是红线等于1时的值,如果红线等于其他值n,要除以n才能得到a


在齐次坐标中,点的齐次值w = 1,向量的齐次值w = 2,并且点和向量的关系为:

 

向量 + 向量,向量 - 向量   = 向量 (表示合并向量)齐次值w:0 + 0 = 0

点 - 点 = 向量 (表示两点间的距离和方向)齐次值w:1 - 1 = 0

点 + 向量 = 点 (表示一个点经过一个距离和方向后的新点)齐次值w:1 + 0 = 1

点 + 点 = 点 (表示取两个点的中心点)齐次值w:1 + 1 = 2,x、y、z、w同时除以2, = 1

 

posted @ 2022-04-04 12:25  银龙背上的骑士  阅读(1149)  评论(0编辑  收藏  举报