零基础学图形学(7) 几何知识——矩阵是如何工作的:第二部分

(1)矩阵和笛卡尔坐标系统的关系

假如想象你有一个点Px它的左边是(1, 0, 0),你想将这个点绕着z轴顺时针旋转10度,那么新的坐标点是什么呢?使用我们已经学习的旋转矩阵的知识,我们知道可以使用简单的三角矩阵得到这些新坐标。新得到的点的x轴的左边是cos(-10),y轴的坐标会是sin(-10)(不要忘记了C++中的三角函数的角度需要转换成弧度).如果我们使用Py(0, 1,0)做相同的操作,那么旋转之后的x轴的坐标值是-sin(-10)以及y轴的坐标值是cos(-10).你可以注意到旋转矩阵的第一行的数据和旋转后得到的Px的坐标是相等的,也可以看到第二行矩阵的参数和旋转得到的新坐标值Py是一样的:

正如你所看到的,我们我们可以用这些矩阵计算这些旋转的坐标,矩阵的第一行对应的是Px,矩阵的第二行对应的Py.如果对于Pz你重复这个过程,那么你啃到的计算Rx和Ry的旋转矩阵可以使用第三行来计算。

关键的点在于理解矩阵的每一行对应的坐标系统的轴。后面这回变得很重要,你会学习到如果创建矩阵,将一点或者向量从一个坐标系统变换到两个一个坐标系统,仅仅通过简单地替换掉矩阵的某一行就可以做到。

在CG中这是一个很常见的技术,它会在下章中具体的讲到。矩阵其实一点也不神秘,当你理解它们知识存储坐标系统的坐标值之后,矩阵中的每一行都是代表坐标系统的某一个轴,有时候我们称这个矩阵为面向矩阵(orientation matrix)。

(2)正交矩阵

实际上,我们这章讲述的矩阵和我们之前的章节中讲到的矩阵都叫做线性带货或者是正交矩阵(orthogonal matrices).正交矩阵是一个方阵,它的行和列都是单位正交矩阵。我们之前已经提到了矩阵的每一行都是代表笛卡尔坐标系中的一个轴。如果这个矩阵是旋转矩阵,或者是几个旋转矩阵的乘积,那么每一列都是代表矩阵轴的单位长度(因为元素上的每一列都是由正弦余弦三角函数计算得到的)。你可以将它们看作是和世界坐标系相平齐。正交矩阵有几个很有兴趣的属性,在CG中可能是用得最多的。那就是正交矩阵的转置矩阵等于它的相反矩阵,假定Q是一个正交矩阵,那么我们可以写作下面的形式

这里的I是相似矩阵(查看矩阵操作章节学习跟多的关于相反矩阵,转置矩阵(transpose)和相似矩阵)。

(3)仿射变换(Affine Transformations)

你有时会发现一个词条仿射变换会用在矩阵的变换之中。这个技术名词可以更准确地描述你目前所使用的矩阵进行的线性变换。简而言之,仿射变换是使用的直线进行变换。平移,旋转,剪切都市仿射变换作为它们的组合。另外一种我们将要学习的变换叫做投射变换(projective transformations).正如你猜到的那样,这种变换并不保持线段之间的平行(可以查看3D渲染章节学习正交和投射矩阵的相关知识)。

(4)总结

你在这章和之前章节中学到的不仅是有如何创建旋转矩阵我们也给你看了矩阵是什么:矩阵的每一行都代表这笛卡尔坐标系的一个坐标轴。旋转,缩放,平移都可以应用在点上,当和这个矩阵相乘的时候。关键的知识点是我们在坐标系统中定义了一个点A,如果点A被依附在坐标系统B(矩阵)中,如果我们旋转,平移坐标系统B,那么这个点相对于这个坐标系统不会发生变化但是相对于坐标系统A这个点就会发生变化。用这个矩阵B乘以这个点相对于A点的位置就可以得到这个点新的相对于坐标系统A的坐标。如下图所示:

从这章中我们需要记住的是,对于寻找基本的旋转矩阵计算公式。你乘以基本矩阵的顺序很重要。最后(也是最重要的一点就是)矩阵可以被看着是一个本地的坐标系统,矩阵的每一行都相当于本地坐标系统的一个轴。这种矩阵也叫做是面向矩阵,我们会在创建面向矩阵会本地坐标系统章节介绍。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值