欢迎光临散文网 会员登陆 & 注册

计算机图形学基础(四):矩阵变换

2023-08-27 17:01 作者:宁牁兒  | 我要投稿

我们在各种软件中常见到的图形或者物体的变换,例如旋转、平移、放缩、投影等,都是以矩阵变换的形式来计算的,接下来讨论这些矩阵变换。

二维变换

可以用一个二维矩阵来表示二维空间运算:

%5Cbegin%7Bbmatrix%7D%0A%0Aa_%7B11%7D%20%26%20a_%7B12%7D%5C%5C%0A%0Aa_%7B21%7D%20%26%20a_%7B22%7D%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax%5C%5C%0A%0Ay%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Aa_%7B11%7Dx%20%2B%20a_%7B12%7Dy%5C%5C%0A%0Aa_%7B21%7Dx%20%2B%20a_%7B22%7Dy%0A%0A%5Cend%7Bbmatrix%7D

放缩

放缩的矩阵运算可表示为:

scale(s_%7Bx%7D%2Cs_%7By%7D)%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0As_%7Bx%7D%20%26%200%5C%5C%0A%0A0%20%26%20s_%7By%7D%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax%5C%5C%0A%0Ay%0A%0A%5Cend%7Bbmatrix%7D%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0As_%7Bx%7Dx%5C%5C%0A%0As_%7By%7Dy%0A%0A%5Cend%7Bbmatrix%7D

图1

自由拉伸

x轴和y轴方向的拉伸可分别表示为:

%5Cbegin%7Bcases%7D%0A%0Ax_%7Bshear%7D(%5Cvarphi)%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0A1%20%26%20tan%5Cvarphi%5C%5C%0A%0A0%20%26%201%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax%5C%5C%0A%0Ay%0A%0A%5Cend%7Bbmatrix%7D%5C%5C%0A%0Ay_%7Bshear%7D(%5Cvarphi)%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0A1%20%26%200%5C%5C%0A%0Atan%5Cvarphi%20%26%201%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax%5C%5C%0A%0Ay%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cend%7Bcases%7D

其中tan%5Cvarphi为拉伸角度的正切值

图2

旋转

将一个图形逆时针旋转角度%5Cvarphi

rotate(%5Cvarphi)%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Acos%5Cvarphi%20%26%20-sin%5Cvarphi%5C%5C%0A%0Asin%5Cvarphi%20%26%20cos%5Cvarphi%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax%5C%5C%0A%0Ay%0A%0A%5Cend%7Bbmatrix%7D

图3

镜像

关于x轴和y轴分别作镜像变换:

%5Cbegin%7Bcases%7D%0A%0Ax_%7Breflect%7D%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0A1%20%26%200%5C%5C%0A%0A0%20%26%20-1%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax%5C%5C%0A%0Ay%0A%0A%5Cend%7Bbmatrix%7D%5C%5C%0A%0Ay_%7Breflect%7D%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0A-1%20%26%200%5C%5C%0A%0A0%20%26%201%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax%5C%5C%0A%0Ay%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cend%7Bcases%7D

图4

组合变换

在进行多个变换时,假设先进行一个S变换v_%7B2%7D%3DSv_%7B1%7D,再进行R变换v_%7B3%7D%3DRv_%7B2%7D,则有v_%7B3%7D%3DR(Sv_%7B1%7D)%3D(RS)v_%7B1%7D,复合变换M%3DRS,即可以用一个矩阵来表示若干个变换运算

图5

三维变换

与二维变换对应的,三维变换在形式上很类似:

放缩

scale(s_%7Bx%7D%2Cs_%7By%7D%2Cs_%7Bz%7D)%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0As_%7Bx%7D%20%26%200%20%26%200%5C%5C%0A%0A0%20%26%20s_%7By%7D%20%26%200%5C%5C%0A%0A0%20%26%200%20%26%20s_%7Bz%7D%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax%5C%5C%0A%0Ay%5C%5C%0A%0Az%0A%0A%5Cend%7Bbmatrix%7D

旋转

%5Cbegin%7Bcases%7D%0A%0Arotate_%7Bx%7D(%5Cvarphi)%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0A1%20%26%200%20%26%200%20%5C%5C%0A%0A0%20%26%20cos%5Cvarphi%20%26%20-sin%5Cvarphi%5C%5C%0A%0A0%20%26%20sin%5Cvarphi%20%26%20cos%5Cvarphi%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax%5C%5C%0A%0Ay%5C%5C%0A%0Az%0A%0A%5Cend%7Bbmatrix%7D%5C%5C%0A%0Arotate_%7By%7D(%5Cvarphi)%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Acos%5Cvarphi%20%26%200%20%26%20sin%5Cvarphi%20%5C%5C%0A%0A0%20%26%201%20%26%200%5C%5C%0A%0A-sin%5Cvarphi%20%26%200%20%26%20cos%5Cvarphi%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax%5C%5C%0A%0Ay%5C%5C%0A%0Az%0A%0A%5Cend%7Bbmatrix%7D%5C%5C%0A%0Arotate_%7Bz%7D(%5Cvarphi)%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Acos%5Cvarphi%20%26%20-sin%5Cvarphi%20%26%200%20%5C%5C%0A%0Asin%5Cvarphi%20%26%20cos%5Cvarphi%20%26%200%5C%5C%0A%0A0%20%26%200%20%26%201%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax%5C%5C%0A%0Ay%5C%5C%0A%0Az%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cend%7Bcases%7D

自由拉伸

x_%7Bshear%7D(d_%7By%7D%2Cd_%7Bz%7D)%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0A1%20%26%20d_%7By%7D%20%26%20d_%7Bz%7D%20%5C%5C%20%0A%0A0%20%26%201%20%26%200%20%5C%5C%20%0A%0A0%20%26%200%20%26%201%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax%20%5C%5C%20%0A%0Ay%20%5C%5C%20%0A%0Az%0A%0A%5Cend%7Bbmatrix%7D

法线向量变换

现在如果要对一个三维物体的表面以矩阵M进行变换,假设变换前的法线向量为n,那么对法线向量同样进行矩阵M变换操作得到的新向量通常不会垂直于新的物体表面。我们定义法线向量n需要通过矩阵N的变换操作n_%7BN%7D才垂直新的物体表面,变换前物体表面的一条切线为t,变换后此切线变为t_%7BM%7D,那么有:

%5Cbegin%7Bcases%7D%0A%0An%5ETt%3D0%5C%5C%0A%0An_%7BN%7D%5ETt_%7BM%7D%3D0%0A%0A%5Cend%7Bcases%7D

若要求解在物体进行M变换后法线向量n的变换情况N

%5Cbegin%7Barray%7D%7Bl%7D%0A%0A%26n%5ETt%3Dn%5ETIt%3Dn%5ETM%5E%7B-1%7DMt%3D0%5C%5C%0A%0A%3D%3E%26(n%5ETM%5E%7B-1%7D)(Mt)%3D(n%5ETM%5E%7B-1%7D)t_%7BM%7D%3D0%5C%5C%0A%0A%3D%3E%26n_%7BN%7D%5ET%3Dn%5ETM%5E%7B-1%7D%5C%5C%0A%0A%3D%3E%26n_%7BN%7D%3D(n%5ETM%5E%7B-1%7D)%5ET%3D(M%5E%7B-1%7D)%5ETn%5C%5C%0A%0A%3D%3E%26N%3D(M%5E%7B-1%7D)%5ET%0A%0A%5Cend%7Barray%7D


平移(Translation)与仿射(Affine)

在二维空间中首先进行一个S变换(拉伸、旋转、缩放),再进行一个平移变换T,可以用一个三阶方阵来表示:

ST(x%2Cy)%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax%5E%7B'%7D%20%5C%5C%20%0A%0Ay%5E%7B'%7D%20%5C%5C%20%0A%0A1%0A%0A%5Cend%7Bbmatrix%7D%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0As_%7B11%7D%20%26%20s_%7B12%7D%20%26%20x_%7Bt%7D%20%5C%5C%20%0A%0As_%7B21%7D%20%26%20s_%7B22%7D%20%26%20y_%7Bt%7D%20%5C%5C%20%0A%0A0%20%26%200%20%26%201%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax%20%5C%5C%20%0A%0Ay%20%5C%5C%20%0A%0A1%0A%0A%5Cend%7Bbmatrix%7D%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0As_%7B11%7Dx%20%2B%20s_%7B12%7Dy%20%2B%20x_%7Bt%7D%20%5C%5C%20%0A%0As_%7B21%7Dx%20%2B%20s_%7B22%7Dy%20%2B%20y_%7Bt%7D%20%5C%5C%20%0A%0A1%0A%0A%5Cend%7Bbmatrix%7D


坐标系变换

通常上来说一个坐标系统,包括一个原点P和一组正交基U%2CV%2CW,则坐标系(u%2Cv%2Cw)可以被描述为:

%5Cbegin%7Barray%7D%7Bl%7D%0A%0Ap%2BuU%2BvV%2BwW%0A%0A%5Cend%7Barray%7D

假设在一个坐标系中使用o作为原点,xy为正交基,其中有一点p,进行坐标系变换后,使用e作为原点,uv作为正交基

图6

按照平移与仿射变换:

ST(x%2Cy)%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0As_%7B11%7D%20%26%20s_%7B12%7D%20%26%20x_%7Bt%7D%20%5C%5C%20%0A%0As_%7B21%7D%20%26%20s_%7B22%7D%20%26%20y_%7Bt%7D%20%5C%5C%20%0A%0A0%20%26%200%20%26%201%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax%20%5C%5C%20%0A%0Ay%20%5C%5C%20%0A%0A1%0A%0A%5Cend%7Bbmatrix%7D

有:

%5Cbegin%7Bbmatrix%7D%0A%0Ax_%7Bp%7D%20%5C%5C%20%0A%0Ay_%7Bp%7D%20%5C%5C%20%0A%0A1%0A%0A%5Cend%7Bbmatrix%7D%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Ax_%7Bu%7D%20%26%20x_%7Bv%7D%20%26%20x_%7Be%7D%20%5C%5C%20%0A%0Ay_%7Bu%7D%20%26%20y_%7Bv%7D%20%26%20y_%7Be%7D%20%5C%5C%20%0A%0A0%20%26%200%20%26%201%0A%0A%5Cend%7Bbmatrix%7D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0Au_%7Bp%7D%20%5C%5C%20%0A%0Av_%7Bp%7D%20%5C%5C%20%0A%0A1%0A%0A%5Cend%7Bbmatrix%7D

即:

%5Cbegin%7Barray%7D%7Bl%7D%0A%0A%26P_%7Bxy%7D%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0AU%20%26%20V%20%26%20E%20%5C%5C%20%0A%0A0%20%26%200%20%26%201%0A%0A%5Cend%7Bbmatrix%7D%0A%0AP_%7Buv%7D%5C%5C%0A%0A%3D%3E%26P_%7Buv%7D%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0AU%20%26%20V%20%26%20E%20%5C%5C%20%0A%0A0%20%26%200%20%26%201%0A%0A%5Cend%7Bbmatrix%7D%5E%7B-1%7D%0A%0AP_%7Bxy%7D%5C%5C%0A%0A%3D%3E%26P_%7Buv%7D%3D%0A%0A%5Cbegin%7Bbmatrix%7D%0A%0AX_%7Buv%7D%20%26%20Y_%7Buv%7D%20%26%20O_%7Buv%7D%20%5C%5C%20%0A%0A0%20%26%200%20%26%201%0A%0A%5Cend%7Bbmatrix%7D%0A%0AP_%7Bxy%7D%0A%0A%5Cend%7Barray%7D

同理,扩展到三维空间上,有:

%5Cbegin%7Barray%7D%7Bl%7D%0A%26P_%7Bxyz%7D%3D%0A%5Cbegin%7Bbmatrix%7D%0AU%20%26%20V%20%26%20W%20%26%20E%20%5C%5C%20%0A0%20%26%200%20%26%200%20%26%201%0A%5Cend%7Bbmatrix%7D%0AP_%7Buvw%7D%5C%5C%0A%3D%3E%26P_%7Buvw%7D%3D%0A%5Cbegin%7Bbmatrix%7D%0AU%20%26%20V%20%26%20W%20%26%20E%20%5C%5C%20%0A0%20%26%200%20%26%200%20%26%201%0A%5Cend%7Bbmatrix%7D%5E%7B-1%7D%0AP_%7Bxyz%7D%5C%5C%0A%3D%3E%26P_%7Buvw%7D%3D%0A%5Cbegin%7Bbmatrix%7D%0AX_%7Buvw%7D%20%26%20Y_%7Buvw%7D%20%26%20Z_%7Buvw%7D%20%26%20O_%7Buvw%7D%20%5C%5C%20%0A0%20%26%200%20%26%200%20%26%201%0A%5Cend%7Bbmatrix%7D%0AP_%7Bxyz%7D%5C%5C%0A%3D%3E%26%5Cbegin%7Bbmatrix%7D%0Au_%7Bp%7D%20%5C%5C%0Av_%7Bp%7D%5C%5C%0Aw_%7Bp%7D%5C%5C%0A1%0A%5Cend%7Bbmatrix%7D%3D%0A%5Cbegin%7Bbmatrix%7D%0Ax_%7Bu%7D%20%26%20y_%7Bu%7D%20%26%20z_%7Bu%7D%20%26%200%5C%5C%0Ax_%7Bv%7D%20%26%20y_%7Bv%7D%20%26%20z_%7Bv%7D%20%26%200%5C%5C%0Ax_%7Bw%7D%20%26%20y_%7Bw%7D%20%26%20z_%7Bw%7D%20%26%200%5C%5C%0A0%20%26%200%20%26%200%20%26%201%0A%5Cend%7Bbmatrix%7D%0A%5Cbegin%7Bbmatrix%7D%0A1%20%26%200%20%26%200%20%26%20-x_%7Be%7D%5C%5C%0A0%20%26%201%20%26%200%20%26%20-y_%7Be%7D%5C%5C%0A0%20%26%200%20%26%201%20%26%20-z_%7Be%7D%5C%5C%0A0%20%26%200%20%26%200%20%26%201%0A%5Cend%7Bbmatrix%7D%0A%5Cbegin%7Bbmatrix%7D%0Ax_%7Bp%7D%20%5C%5C%0Ay_%7Bp%7D%5C%5C%0Az_%7Bp%7D%5C%5C%0A1%0A%5Cend%7Bbmatrix%7D%0A%5Cend%7Barray%7D


计算机图形学基础(四):矩阵变换的评论 (共 条)

分享到微博请遵守国家法律