首页 > 3D > 矩阵乘法在三维空间的几何意义
2019
06-26

矩阵乘法在三维空间的几何意义

变换(Transformations)

你应该已经知道变换(transformation),它将任意3D点的坐标变换到另一个3D点的坐标。下图你可以看到3个基本变换的例子:

001flH1Mgy6Q7JGtZRWdc.jpg

 第一个变换只是简单地将3D空间中的所有点移动到左下方,这种变换叫做平移(translation)。第二个变换是旋转(rotation),所有点绕一个指定轴旋转,本例中是绕Z轴旋转。最后一个基本变换是缩放,所有点的坐标乘以一个特定的数值。我将它们称为基本变换,是因为你能想象的任何变换都可以用这三个基本变换的组合表示。

下图你可以看到平移的结果,然后还要进行旋转:

001flH1Mgy6Q7JNYNGT77.jpg

矩阵的3个特性

特性1:矩阵可以看做一个特殊(但并不复杂)的元素,可以表示上述变换。所以假如你有3个矩阵:Mtrans, Mrot和Mscal,它们分别对应一种变换。

特性2: 如果你将一个矩阵乘以对应的3D点坐标,就可以获取变换后的点坐标,如下图所示:

001flH1Mgy6Q7JSuvHUae.jpg

这意味着对任意点,你可以简单地通过将它的坐标乘以一个矩阵获取它的投影、旋转和缩放!

特性3: 如果你将两个矩阵M1和M2相乘,会获得一个新矩阵M3。对应这个新矩阵M3的变换即对应前两个矩阵的变换组合。

第三个特性非常有用。例如上面平移后旋转的例子中,计算给定点的位置的一个方法是首先计算经过平移矩阵M1的变换,然后将结果乘以M2计算旋转,这让你必须为每个点计算2次,由下图表示:

001flH1Mgy6Q7K1sRuC6e.jpg

使用第三个特性,你只需简单地先计算M1和M2的乘积获取M3。然后将点乘以矩阵 M3获取点的平移并旋转后的坐标!2个矩阵的乘法很快(64次乘法和48次加法),而变换场景中的所有点要慢得多(每个点16次乘法和12次加法)

001flH1Mgy6Q7K7eVqr4b.jpg


矩阵数学

先看一个二维空间的题目:

有了二维推导例子,你可以将一个3D点的坐标作为一个矩阵的一列和3行,点和矩阵间的乘法如下定义:

001flH1Mgy6Q7KbntV842.jpg

现在你应该知道了所有知识。如你所见,并不是很难。下面举一个例子。设3D空间有一个坐标为(6,18,9.5)的点。先看一个简单的例子:我们想将场景变大为2倍,这意味着我们要缩放2倍,一个简单的缩放矩阵如下所示:

001flH1Mgy6Q7Kedyfnb9.jpg

结果是:

001flH1Mgy6Q7KehE1g46.jpg


在这个例子中,s = 2,所以点的坐标变为(12, 36, 19)。

下面看一下旋转矩阵,它看起来有点复杂,但记住所有sin和cos实际上就是一个介于-1和+1之间的数值。下面三个矩阵表示绕X,Y和Z轴的旋转,θ为旋转角度:

001flH1Mgy6Q7KjHhHAaa.jpg

例如将点(10,5,0)绕Z轴旋转45度,我们的旋转矩阵如下:

001flH1Mgy6Q7KjNOm0c4.jpg

因为pi=3.14对应180度,45度对应pi/4。结果是:

001flH1Mgy6Q7Kno42O6e.jpg


所以当我们将点(10,5,0)旋转45度,结果是点(10.6065, -3.5355, 0)!幸运的是,DirectX可以为你完成这些运算,但现在我们理解了工作原理。

带平移的矩阵

如果一个矩阵,你会看到16个数据项,这意味着4行和4列。选择这种方式是为了让矩阵也可以表示平移。

要平移一个点,我们需要添加一个数字。使用3x3矩阵,我们只能获取初始矩阵的倍数。所以在X,Y和Z边上需要添加一个常数。为了简单起见,设为1。从现在开始,我们使用4个坐标表示一个3D点。例如,位于(10,5,0)的点的坐标为(10,5,0,1)。

缩放和旋转矩阵保持不变,但多了一个额外的行和列其值为0,但m44值为1。下图你可以看到以平移形式的缩放和Y旋转矩阵:

001flH1Mgy6Q7KtUIuH2f.jpg

看起来有点复杂,但现在我们可以定义一个平移矩阵了:

001flH1Mgy6Q7KzkQFX89.jpg

让我们看一个小例子。如果我们想将点(10,5,0)移动(-8,2,4)。可以这样做:

001flH1Mgy6Q7Ku800Nd1.jpg


结果是(2,7,4)。但这里我仍想强调3个基本特性:

1) 我们有一个矩阵对应每个基本变换

2) 将点的坐标乘以一个矩阵会获得变换后的坐标

3) 两个矩阵相乘获得一个新矩阵,对应变换的组合

如果你理解以上特性,你会注意到第4个坐标没有几何意义,它只是让我们可以定义一个平移矩阵。

你会注意到有时这个常量不是1。事实上,通用规则是只需简单地将X,Y和 Z 坐标除以第4个坐标,我们将第4个坐标称之为W坐标。

简单地说:(20,10,0,2) = (10,5,0,1),这两个坐标表示的是同一个3D点(10,5,0),所以从4个坐标中获取3D点的简单规则是:

001flH1Mgy6Q7KDPEZv5d.jpg

作者:admin
admin
TTF的家园-www.ttfde.top 个人博客以便写写东西,欢迎喜欢互联网的朋友一起交流!

本文》有 0 条评论

留下一个回复