什么是仿射变换?它们仅适用于点还是其他形状?它们可以“组成”是什么意思?

#1 楼

仿射变换是线性变换+翻译向量。

$$
\ begin {bmatrix} x'&y'\ end {bmatrix}
=
\ begin {bmatrix} x&y \ end {bmatrix}
\ cdot
\ begin {bmatrix} a&b \\ c&d \ end {bmatrix}
+
\ begin {bmatrix } e&f \ end {bmatrix}
$$

它可以应用于单个点或线甚至贝塞尔曲线。对于线,它保留了平行线保持平行的属性。对于Bezier曲线,它保留了控制点的凸包属性。

乘出后,它会生成2个等式,以从中产生“变换的”坐标对$(x',y')$原始对$(x,y)$和常量列表$(a,b,c,d,e,f)$。
$$
x'= a \ cdot x + c \ cdot y + e \\
y'= b \ cdot x + d \ cdot y + f
$$

方便地,线性变换和平移矢量可以是放到可以在2D齐次坐标上进行操作的3D矩阵中。 br /> \开始{bmatrix} x&y&1 \ end {bmatrix}
\ cdot
\ begin {bmatrix} a&b&0 \\ c&d&0 \\ e&f&1 \ end {bmatrix}
$$

上面产生了相同的两个方程。原始2将按顺序执行。简单来说,矩阵乘法是关联的。

$$
\ begin {matrix}
\ begin {bmatrix} x''&y''&1 \ end {bmatrix}
&=&
\ left(
\ begin {bmatrix} x&y&1 \ end {bmatrix}
\ cdot
\ begin {bmatrix} a&b&0 \\ c&d&0 \\ e&f&1 \ end {bmatrix} \ right)
\ cdot
\ begin {bmatrix} g&h&0 \\ i&j&0 \\ k&m&1 \ end {bmatrix}
\\
&=&
\开始{bmatrix} a \ cdot x + c \ cdot y + e&b \ cdot x + d \ cdot y + f&1 \ end {bmatrix}
\ cdot
\ begin {bmatrix} g&h&0 \\ i&j&0 \\ k&m&1 \ end {bmatrix}
\\
&=&
\ begin {bmatrix} g(a \ cdot x + c \ cdot y + e)+ i(b \ cdot x + d \ cdot y + f)+ k
\\
h(a \ cdot x + c \ cdot y + e)+ j(b \ cdot x + d \ cdot y + f)+ m
\\ 1 \ end {bmatrix} ^ T
\\
&=&
\ begin {bmatrix} x&y&1 \ end {bmatrix} \ cdot
\ left(
\ begin {bmatrix} a&b&0 \\ c&d&0 \\ e&f&1 \ end {bmatrix}
\ cdot
\ begin {bmatrix} g&h&0 \\ i&j&0 \\ k&m&1 \ end {bmatrix}
\ right)
\\
&=&
\ begin { bmatrix} x&y&1 \ end {bmatrix} \ cdot
\开始{bmatrix} ag + bi&ah + bj&0 \\ cg + di&ch + dj&0 \\例如+ fi + k&eh + fj + m&1 \ end {bmatrix}
\ end {matrix}
$$

或者,您可以考虑一些基本的变换类型,并通过将它们组合在一起(将它们相乘)来构成任何更复杂的变换。 >
身份转换



$$ \ begin {bmatrix}
1&0&0 \\
0&1& 0 \\
0&0&1
\ end {bmatrix} $$

缩放



$$ \ begin {bmatrix}
S_x&0&0 \\
0&S_y&0 \\
0&0&1 \\
\ end {bmatrix} $$

**注意:可以使用缩放参数$(S_x,S_y)=(-1,1)$或$(1 ,-1)$。

翻译



$$ \ begin {bmatrix}
1&0&0 \\
0&1&0 \\
T_x&T_y&1
\ end {bmatrix} $$

将x歪斜y



$$ \ begin {bmatrix}
1&Q_x&0 \\
0&1&0 \\
0&0&1
\ end {bmatrix} $$

按x倾斜y



$$ \ begin {bmatrix}
1 &0&0 \\
Q_y&1&0 \\
0&0&1
\ end {bmatrix} $$

旋转



$$ \ begin {bmatrix}
\ cos \ theta和-sin \ theta和0 \\
\ sin \ theta &\ cos \ theta&0 \\
0&0&1
\ end {bmatrix}
$$

[注意,我已经显示了此处的矩阵在左侧接受行向量。这些矩阵的转置将与右侧的列向量一起使用。]

可以将仅由缩放,旋转和平移组成的矩阵分解回这三个分量。

评论


$ \ begingroup $
好答案。您可能想添加一种考虑仿射变换的方法,就是使平行线保持平行。因此,缩放,旋转,平移,剪切和组合被视为仿射。透视投影是非仿射变换的一个示例。
$ \ endgroup $
–ap_
2015年9月1日下午6:08

$ \ begingroup $
您可以添加一些图片。如果您不愿意,我会:P也可以提及矩阵的顺序,行/列的方向是任意的。而且3d中的旋转不是可计算的。
$ \ endgroup $
– joojaa
2015年9月1日于7:54



$ \ begingroup $
@joojaa我拍了照片!后记来源
$ \ endgroup $
–luser droog
2015年9月2日,下午2:45

$ \ begingroup $
值得一提的是,刚体变换是仿射变换的子集,而仿射变换是透视变换的子集。
$ \ endgroup $
–user1118321
16-10-2在4:29

$ \ begingroup $
我会不时地重新阅读此书,虽然我不太清楚,但是我可能对歪斜变换的描述不正确。歪斜令人困惑。如果有人看到此内容并想尝试编辑,请帮助澄清这一部分!
$ \ endgroup $
–luser droog
19年5月23日,下午1:32