如果您掌握了矩阵乘法,这并不难理解。假设你的观点x
是
/a\
\b/,
并且您想通过以下方式旋转坐标系A
:
/3 4\
\5 6/
并“移动”它t
/2\
\2/.
后面的矩阵是获得新点的仿射变换的组成部分y
:
y = A*x + t = <a'; b'>T //(T means transposed).
如您所知,要做到这一点,可以构造一个 3d 矩阵B
和一个x'
看起来像
/3 4 2\ /a\
B = |5 6 2| , x' = |b|
\0 0 1/ \1/
这样
/a'\
y' = |b'| = B*x'
\ 1/
您可以从中提取y
. 让我们看看它是如何工作的。在原始转换中(使用加法),第一步是执行乘法,即。旋转部分y_r
:
y_r = A*x = <3a+4b; 5a+6b>T
然后添加“绝对”部分:
y = y_r + t = <3a+4b+2; 5a+6b+2>T
现在看看是如何B
工作的。我将y'
逐行计算:
1) a' = 3*a + 4*b + 2*1
2) b' = 5*a + 6*b + 2*1
3) the rest: 0*a + 0*b + 1*1 = 1
正是我们所期望的。首先,计算旋转部分——加法和乘法。然后,将平移部分的 x 部分相加,乘以1
--it 保持不变。第二行也一样。
在第三行中,a
和b
被删除(乘以0
)。最后一部分保持不变,恰好是1
. 因此,关于最后一行的所有内容都是“删除”该点的值并保留1
.
可以说,一个 2x3 矩阵就足够了。这部分正确,但有一个明显的缺点:您失去了可组合性。假设您对 基本满意B
,但想镜像一个坐标。然后你可以选择另一个变换矩阵
/-1 0 0\
C = | 0 1 0|
\ 0 0 1/
并有结果
y'' = C*B*x' = <-3a+4b+2; 5a+6b+2; 1>T
这种简单的乘法不能用 2x3 矩阵那么容易地完成,仅仅是因为矩阵乘法的特性。
原则上,在上面,最后一行(the XXX
)也可以是任何其他形式的<0;0;x>
。它只是为了降低点值。然而,必须完全像这样才能通过乘法进行合成。
最后,在这种情况下,维基百科对我来说似乎提供了很多信息。