(ง •_•)ง
[用抽象代数讨论仿射变换和仿射空间中的坐标变换] 是重新整理的,以下是之前的内容。
这里谈论的是计算机图形学中的内容,当然源自数学,但有的地方没有使用纯粹数学上的那种严格定义。
域F上的向量空间V,任意的x、y∈V a∈F, 若 映射f: V->V满足
f(x+y)=f(x)+f(y)
f(ax)=af(x)
则映射f是一个线性变换。
When V are finite dimensional, a general linear transformation can be written as a matrix multiplication only after specifying a vector space basis for V. http://mathworld.wolfram.com/LinearTransformation.html
ai∈F, xi∈V, i=1,2,…,n
则 f( a1x1+a2x2+…+anxn ) = a1f(x1)+a2f(x2)+…+anf(xn)
假设(e1,e2,…,en)是向量空间V的一组基底,
则xi可以唯一地表示成:xi1e1+xi2e2+…+xinen
行向量(xi1,xi2,…,xin)的转置记作(xi1,xi2,…,xin)’
记xi=(xi1,xi2,…,xin)’ ——(列向量形式的)坐标,以下不区分向量和它的坐标:
则
e1=(1,0,…,0)’
e2=(0,1,…,0)’
…
en=(0,0,…,1)’
(xi1,xi2,…,xin∈域F,1是域F的乘法幺元。)
则 f(xi)=f( xi1e1+xi2e2+…+xinen )= (f(e1),f(e2),…,f(en))(xi1,xi2,…,xin)’
记(f(e1),f(e2),…,f(en))=M,则
f(xi) = Mxi
其中M=(f(e1),f(e2),…,f(en))
即线性变换由基底的变换唯一确定
域F上的向量空间V 和 非空集合A,对于任意的 p∈A v∈V,p+v ∈A,且:
①任意的 a b ∈V: (p+a)+b=p+(a+b)
②任意的q∈A,有且只有一个u∈V,使得 p+u = q
A中的元素就称为点,V中的元素称为向量(自由向量)
由②可以定义“点的减法”:
既然任意的p,q∈A, 存在唯一的u: p+u=q
那么定义q-p=u
映射 f : V∪A → V∪A 满足
①若p∈A, 则f( p)∈A
②若v∈V, 则f(v)∈V
且 任意的x、y∈V a∈域F: f(x+y)=f(x)+f(y), f(ax)=af(x)
③p∈A, v∈V, f(p+v) = f( p) + f(v) 即 q,p∈A, f(q)-f( p)=f(q-p)
f 就是仿射变换。
即 f 把向量变换成向量,把点变换成点,对向量的变换是线性变换,
对点和向量的加法也有合适的体现。
可见 仿射变换 包含 线性变换。
随便从A中找一个点,记做Q,则A中任意的点p,存在唯一的向量v∈V,使得
p = Q + v
若V是有限维度的,给V指定一组基底,从而向量v具有坐标,
这时,Q叫做原点,v的坐标称为点p的坐标;易知原点Q的坐标是零。
任意的p∈A, f( p) = f(Q+v) = f(Q) + f(v)
因为 f 是V上的线性变换,所以 f(v) = Mv (M是矩阵)
记 f(Q) 的坐标为t
所以 f( p) = t + Mv
因为 p的坐标就是v的坐标,且用记号p,v既代表点和向量,也代表它们的坐标
所以 写成 f( p) = t + Mp
所以仿射变换的形式就是(p,v既代表点和向量,也代表它们的坐标)
若 v∈V, 则 f(v) = Mv
若 p∈A, 则 f( p) = Mp + t
其中M = (f(e1),f(e2),…,f(en)), t = f(Q)
即仿射变换由基底和原点的变换唯一确定
总结一下就是只要能写成坐标,就能用矩阵表示出来。
仿射变换对点和向量有不同的形式,想把这两种形式统一起来
f ( p ) = M p + t = M p + t ⋅ 1 = ( M t ) ( p 1 ) f( p) = Mp+t = Mp + t·1 = (M t)\begin{pmatrix} p \\ 1 \end{pmatrix} f(p)=Mp+t=Mp+t⋅1=(Mt)(p1)
f ( v ) = M v = M v + t ⋅ 0 = ( M t ) ( v 0 ) f(v) = Mv = Mv +t·0 = (M t)\begin{pmatrix} v \\ 0 \end{pmatrix} f(v)=Mv=Mv+t⋅0=(Mt)(v0)
p,v既代表点和向量,也代表它们的坐标;
定义 点的仿射坐标为 ( p 1 ) \begin{pmatrix} p \\ 1 \end{pmatrix} (p1)
向量的仿射坐标为 ( v 0 ) \begin{pmatrix} v \\ 0 \end{pmatrix} (v0)
希望有个矩阵A,
A ( p 1 ) = ( f ( p ) 1 ) A ( v 0 ) = ( f ( v ) 0 ) A\begin{pmatrix} p\\1 \end{pmatrix} =\begin{pmatrix} f( p)\\1 \end{pmatrix} \qquad \qquad A\begin{pmatrix} v\\0 \end{pmatrix} =\begin{pmatrix} f(v)\\0 \end{pmatrix} A(p1)=(f(p)1)A(v0)=(f(v)0)
用x代表v或p
用b代表0或1
A ( x b ) = ( f ( x ) b ) A\begin{pmatrix} x\\b \end{pmatrix} =\begin{pmatrix} f(x)\\b \end{pmatrix} A(xb)=(f(x)b)
现在已经知道
( M    t ) ( x b ) = M x + t ⋅ b = f ( x ) (M\;t)\begin{pmatrix} x\\b \end{pmatrix}=Mx+t\cdot b=f(x) (Mt)(xb)=Mx+t⋅b=f(x)
只需求n+1维行向量 (k_n, k)
( k n , k ) ( x b ) = b (k_n, k)\begin{pmatrix} x\\b \end{pmatrix}=b (kn,k)(xb)=b
所以 (k_n, k) = (0, 1); 0代表n维零向量,
则 A = [ M t 0 1 ] {\Large A}=\begin{bmatrix} M & t\\ 0 & 1 \end{bmatrix} A=[M0t1]
这样仿射变换就能统一地表示成 Aa,更高维空间中的线性变换。
其中a= ( x b ) \begin{pmatrix}x\\b\end{pmatrix} (xb) b=0或1
假设
[ M t 0 1 ] [ N d w s ] = [ I 0 0 1 ] \begin{bmatrix} M & t\\ 0 & 1 \end{bmatrix}\begin{bmatrix} N & d\\ w & s \end{bmatrix}=\begin{bmatrix} I & 0\\ 0 & 1 \end{bmatrix} [M0t1][Nwds]=[I001]
∵ [ 0 1 ] [ N d w s ] = [ w s ] \because \begin{bmatrix}0 &1 \end{bmatrix}\begin{bmatrix} N & d\\ w & s \end{bmatrix}= \begin{bmatrix}w &s \end{bmatrix} ∵[01][Nwds]=[ws]
∴    w = 0 s = 1 \therefore\; w=0 \quad s=1 ∴w=0s=1
∴    M N = I M d + s t = M d + t = 0 \therefore\; MN=I \quad Md+st=Md+t=0 ∴MN=IMd+st=Md+t=0
∴ [ M t 0 1 ] − 1 = [ M − 1 − M − 1 t 0 1 ] \therefore \begin{bmatrix} M & t\\ 0 & 1 \end{bmatrix}^{-1}=\begin{bmatrix} M^{-1} & -M^{-1}t\\ 0 & 1 \end{bmatrix} ∴[M0t1]−1=[M−10−M−1t1]
v*=Mv
p*=Mp+t
平移变换的平移向量 为 c,则
M=I(单位矩阵),t = c
所以平移变换矩阵为
[ I c 0 1 ] \begin{bmatrix} I & c\\ 0 & 1 \end{bmatrix} [I0c1]
[ I − c 0 1 ] \begin{bmatrix} I & -c\\ 0 & 1 \end{bmatrix} [I0−c1]
①任意的仿射变换 都能看成 一系列变换之后 跟一个以 t 为平移向量的平移变换的复合( t 是该仿射变换的矩阵的前n行的最后一列):
[ I t 0 1 ] [ M 0 0 1 ] = [ M t 0 1 ] \begin{bmatrix} I & t\\ 0 & 1 \end{bmatrix}\begin{bmatrix} M & 0\\ 0 & 1 \end{bmatrix}=\begin{bmatrix} M & t\\ 0 & 1 \end{bmatrix} [I0t1][M001]=[M0t1]
②平移变换的复合(平移变换矩阵的相乘)构成交换群。
[ I v 0 1 ] [ I t 0 1 ] = [ I t + v 0 1 ] \begin{bmatrix} I & v\\ 0 & 1 \end{bmatrix}\begin{bmatrix} I & t\\ 0 & 1 \end{bmatrix}=\begin{bmatrix} I & t+v\\ 0 & 1 \end{bmatrix} [I0v1][I0t1]=[I0t+v1]
[ I v 0 1 ] [ M t 0 1 ] = [ M t + v 0 1 ] \begin{bmatrix} I & v\\ 0 & 1 \end{bmatrix}\begin{bmatrix} M & t\\ 0 & 1 \end{bmatrix}=\begin{bmatrix} M & t+v\\ 0 & 1 \end{bmatrix} [I0v1][M0t1]=[M0t+v1]