仿射变换

仿射变换（Affine transformation），又称仿射映射，是指在几何中，對一个向量空间进行一次线性变换并接上一个平移，变换为另一个向量空间。 一個對向量 x → {\displaystyle {\vec {x}}} 平移 b → {\displaystyle {\vec {b}}} ，與旋轉缩放 A {\displaystyle A} 的仿射映射為 y → = A x → + b → {\displaystyle {\vec {y}}=A{\vec {x}}+{\vec {b}}} 上式在齐次坐标上，等價於下面的式子 [ y → 1 ] = [ A b →   0 , … , 0 1 ] [ x → 1 ] {\displaystyle {\begin{bmatrix}{\vec {y}}\\1\end{bmatrix}}={\begin{bmatrix}A&{\vec {b}}\ \\0,\ldots ,0&1\end{bmatrix}}{\begin{bmatrix}{\vec {x}}\\1\end{bmatrix}}} 在分形的研究裡，收縮平移仿射映射可以製作具有自相似性的分形。 一个于两仿射空间间定义的仿射变换 f : A → B {\displaystyle f\colon {\mathcal {A}}\to {\mathcal {B}}} 是一个点集映射，线性地作用于向量（即空间中的点之间的向量）。形式化表述是， f {\displaystyle f} 决定一线性变换 φ {\displaystyle \varphi } ，使得对于任意 A {\displaystyle {\mathcal {A}}} 中的点对 P , Q {\displaystyle P,Q} ，有： f ( P )   f ( Q ) → = φ ( P Q → ) {\displaystyle {\overrightarrow {f(P)~f(Q)}}=\varphi \left({\overrightarrow {PQ}}\right)} 或记 f ( Q ) − f ( P ) = φ ( Q − P ) . {\displaystyle f(Q)-f(P)=\varphi (Q-P).} 我们可以以其他一些方式解释这一定义，以下进行说明： 若于 A {\displaystyle {\mathcal {A}}} 中选定一原點 O {\displaystyle O} ，记其于 B {\displaystyle {\mathcal {B}}} 中的像为 f ( O ) {\displaystyle f(O)} ，那么就意味着，对于任意向量 x ∈ A {\displaystyle {\boldsymbol {x}}\in {\mathcal {A}}} ，有 f : ( O + x ) ↦ ( B + φ ( x ) ) . {\displaystyle f\colon (O+{\boldsymbol {x}})\mapsto (B+\varphi ({\boldsymbol {x}})).} 而若于 B {\displaystyle {\mathcal {B}}} 中选定一原点 O ′ {\displaystyle O'} ，则其可分解为一将 O {\displaystyle O} 映到 O ′ {\displaystyle O'} 的仿射变换 g : A → B {\displaystyle g\colon {\mathcal {A}}\to {\mathcal {B}}} ，换言之，遵从向量 b = O ′ B → {\displaystyle {\boldsymbol {b}}={\overrightarrow {O'B}}} 之变换， g : ( O + x ) ↦ ( O ′ + φ ( x ) ) . {\displaystyle g\colon (O+{\boldsymbol {x}})\mapsto (O'+\varphi ({\boldsymbol {x}})).} 以上可以直观地总结为，仿射变换包含一个线性映射与一个变换。 给定相同域上的两仿射空间 A {\displaystyle {\mathcal {A}}} 和 B {\displaystyle {\mathcal {B}}} ，称一映射 f : A → B {\displaystyle f:{\mathcal {A}}\to {\mathcal {B}}} 为仿射变换，当且仅当对于任意 A {\displaystyle {\mathcal {A}}} 上满足 ∑ i ∈ I λ i = 1 {\displaystyle \sum _{i\in I}\lambda _{i}={\boldsymbol {1}}} 的权重点簇 { ( a i , λ i ) } i ∈ I {\displaystyle \{(a_{i},\lambda _{i})\}_{i\in I}} 有 f ( ∑ i ∈ I λ i a i ) = ∑ i ∈ I λ i f ( a i ) . {\displaystyle f\left(\sum _{i\in I}\lambda _{i}a_{i}\right)=\sum _{i\in I}\lambda _{i}f\left(a_{i}\right).} 换言之， f {\displaystyle f} 保持了原相的质心。 如上所示，仿射變換為兩函數的複合：平移及線性映射。普通向量代數用矩陣乘法呈現線性映射, 用向量加法表示平移。正式言之，於有限維度之例中，假如該線性映射被表示為一矩陣「Ａ」，平移被表示為向量 b → {\displaystyle {\vec {b}}} ，一仿射映射 f {\displaystyle f} 可被表示為 y → = f ( x → ) = A x → + b → . {\displaystyle {\vec {y}}=f({\vec {x}})=A{\vec {x}}+{\vec {b}}.} 使用一增廣矩陣與一增廣向量，用一矩陣乘法同時表示平移與線性映射是有可能的。此技術需要所有向量在其末端擴長“1”且所有矩陣都於底部添加一排零，右邊擴長一列轉換向量，及右下角添加一個“1”。 [ y → 1 ] = [ A b →   0 … 0 1 ] [ x → 1 ] {\displaystyle {\begin{bmatrix}{\vec {y}}\\1\end{bmatrix}}=\left[{\begin{array}{ccc|c}\,&A&&{\vec {b}}\ \\0&\ldots &0&1\end{array}}\right]{\begin{bmatrix}{\vec {x}}\\1\end{bmatrix}}} 等價於 y → = A x → + b → . {\displaystyle {\vec {y}}=A{\vec {x}}+{\vec {b}}.} 以上所言之擴長矩陣被稱為“仿射變換矩陣”，又或稱為“投射變換矩陣”（其可應用於投影轉換)。 此表示法以Kn之半直積與GL(n, k)展示了 所有可逆仿射變換的集合。此為一個於眾函數集結下進行的一個群，被稱為仿射群。 普通矩陣向量乘法總將原點映射至原點，因此無法呈現平移（原點必須映射至其他點）。藉由於所有向量上擴增一座標“1”，我們將原空間映至更高維空間的一個子集合以進行變換。在該空間中，原本之空間佔有了擴長座標一的1的子集合。因此原空間的原點可在(0,0, ... 0, 1)。原空間的平移可藉由更高維度空間的線性轉換來達成（即為錯切變換）。在高維度中的座標即為齊次座標的一例。假如原空間為歐幾里德，則更高維空間為實射影空間。 使用齊次座標的優點為，藉由相對應矩陣之乘積，可將任意數目的仿射變換結合為一。此性質被大量運用於計算機圖形，計算機視覺與機器人學。 仿射變換保留了： 點之間的共线性（英语：Collinearity）：在同一条直线上的三个或更多的点（称为共线点）在变换后依然在同一条直线上（共线）； 直线的平行性：两条或以上的平行直线，在变换后依然平行； 集合的凸性：凸集合变换后依然是凸集合。并且，最初的极值点被映射到变换后的极值点集； 平行线段的长度的比例：两条由点 p 1 , p 2 , p 3 , p 4 {\displaystyle p_{1},p_{2},p_{3},p_{4}} 定义的平行线段， p 1 p 2 → {\displaystyle {\overrightarrow {p_{1}p_{2}}}} 與 p 3 p 4 → {\displaystyle {\overrightarrow {p_{3}p_{4}}}} 的长度的比例等于 f ( p 1 ) f ( p 2 ) → {\displaystyle {\overrightarrow {f(p_{1})f(p_{2})}}} 与 f ( p 3 ) f ( p 4 ) → {\displaystyle {\overrightarrow {f(p_{3})f(p_{4})}}} 的长度的比例； 不同質量的點组成集合的质心。 仿射變換為可逆的当且仅当 A {\displaystyle A} 為可逆的。用矩陣表示，其逆元為： [ A − 1 − A − 1 b →   0 , … , 0 1 ] {\displaystyle \left[{\begin{array}{ccc|c}&A^{-1}&&-A^{-1}{\vec {b}}\ \\0,&\ldots &,0&1\end{array}}\right]} 可逆仿射變換組成仿射群（英语：Affine_group），其中包含具n階的一般線性群為子群，且自身亦為一 n + 1 {\displaystyle n+1} 階的一般線性群之子群。 當A為常數乘以正交矩陣時，此子集合構成一子群，稱之為相似變換。舉例而言，假如仿射變換於一平面上且假如 A {\displaystyle A} 之行列式為 1 {\displaystyle 1} 或 − 1 {\displaystyle -1} ，那麼該變換即為等面積變換（英语：Equiareal_map）。此類變換組成被稱為等仿射群的子群。一同時為等面積變換與相似變換的變換，即為一平面上保持歐幾里德距離不變的保距映射。 這些群都有一保留了原定向的子群，也就是其對應之 A {\displaystyle A} 的行列式大於零。最後一个例子，即三維空间中剛體的運動组成的群（旋轉和平移），刚体的运动在机器人学中尤为常用。 如果有一固定點，我們可以將其當成原點，則仿射變換被縮還到一線性變換。這使得變換更易於分類與理解。舉例而言，將一變換敘述為特定軸的旋轉，相較於將其形容為平移與旋轉的結合，更能提供變換行為清楚的解釋。只是，這取決於應用與內容。 函數f : R → R, f(x) = mx + c ，其中m與c為常數，此即為一般之仿射變換。 以下等式表示了有限體(28)中的仿射變換: { a ′ } = M { a } ⊕ { v } , {\displaystyle \{\,a'\,\}=M\{\,a\,\}\oplus \{\,v\,\},} 此處[M]為矩陣 且 {v} 為向量 : 舉例來講，將以大端序二進位表示的元素{a} = y7 + y6 + y3 + y = {11001010}轉換成大端序十六進位，計算如下： a 0 ′ = a 0 ⊕ a 4 ⊕ a 5 ⊕ a 6 ⊕ a 7 ⊕ 1 = 0 ⊕ 0 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 1 = 1 {\displaystyle a_{0}'=a_{0}\oplus a_{4}\oplus a_{5}\oplus a_{6}\oplus a_{7}\oplus 1=0\oplus 0\oplus 0\oplus 1\oplus 1\oplus 1=1} a 1 ′ = a 0 ⊕ a 1 ⊕ a 5 ⊕ a 6 ⊕ a 7 ⊕ 1 = 0 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 1 = 0 {\displaystyle a_{1}'=a_{0}\oplus a_{1}\oplus a_{5}\oplus a_{6}\oplus a_{7}\oplus 1=0\oplus 1\oplus 0\oplus 1\oplus 1\oplus 1=0} a 2 ′ = a 0 ⊕ a 1 ⊕ a 2 ⊕ a 6 ⊕ a 7 ⊕ 0 = 0 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 0 = 1 {\displaystyle a_{2}'=a_{0}\oplus a_{1}\oplus a_{2}\oplus a_{6}\oplus a_{7}\oplus 0=0\oplus 1\oplus 0\oplus 1\oplus 1\oplus 0=1} a 3 ′ = a 0 ⊕ a 1 ⊕ a 2 ⊕ a 3 ⊕ a 7 ⊕ 0 = 0 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 0 = 1 {\displaystyle a_{3}'=a_{0}\oplus a_{1}\oplus a_{2}\oplus a_{3}\oplus a_{7}\oplus 0=0\oplus 1\oplus 0\oplus 1\oplus 1\oplus 0=1} a 4 ′ = a 0 ⊕ a 1 ⊕ a 2 ⊕ a 3 ⊕ a 4 ⊕ 0 = 0 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 0 = 0 {\displaystyle a_{4}'=a_{0}\oplus a_{1}\oplus a_{2}\oplus a_{3}\oplus a_{4}\oplus 0=0\oplus 1\oplus 0\oplus 1\oplus 0\oplus 0=0} a 5 ′ = a 1 ⊕ a 2 ⊕ a 3 ⊕ a 4 ⊕ a 5 ⊕ 1 = 1 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 0 ⊕ 1 = 1 {\displaystyle a_{5}'=a_{1}\oplus a_{2}\oplus a_{3}\oplus a_{4}\oplus a_{5}\oplus 1=1\oplus 0\oplus 1\oplus 0\oplus 0\oplus 1=1} a 6 ′ = a 2 ⊕ a 3 ⊕ a 4 ⊕ a 5 ⊕ a 6 ⊕ 1 = 0 ⊕ 1 ⊕ 0 ⊕ 0 ⊕ 1 ⊕ 1 = 1 {\displaystyle a_{6}'=a_{2}\oplus a_{3}\oplus a_{4}\oplus a_{5}\oplus a_{6}\oplus 1=0\oplus 1\oplus 0\oplus 0\oplus 1\oplus 1=1} a 7 ′ = a 3 ⊕ a 4 ⊕ a 5 ⊕ a 6 ⊕ a 7 ⊕ 0 = 1 ⊕ 0 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 0 = 1. {\displaystyle a_{7}'=a_{3}\oplus a_{4}\oplus a_{5}\oplus a_{6}\oplus a_{7}\oplus 0=1\oplus 0\oplus 0\oplus 1\oplus 1\oplus 0=1.} 于是， {a′} = y7 + y6 + y5 + y3 + y2 + 1 = {11101101} = {ED}。 在 ℝ2，左方所示之變換即為以下映射： [ x y ] ↦ [ 0 1 2 1 ] [ x y ] + [ − 100 − 100 ] {\displaystyle {\begin{bmatrix}x\\y\end{bmatrix}}\mapsto {\begin{bmatrix}0&1\\2&1\end{bmatrix}}{\begin{bmatrix}x\\y\end{bmatrix}}+{\begin{bmatrix}-100\\-100\end{bmatrix}}} 將原紅色三角形之三個頂點作變換後給出了新藍色三角形的三個頂點。事實上，所有三角形皆可由仿射變換來達成，所有平行四邊形也可以，但一般四邊形不行。 仿射变换的变换矩阵 平移的矩阵表示 仿射群 仿射几何 线性（第二个意思是在1维中的仿射变换） 三维投影 Schneider, Philip K.; Eberly, David H. Geometric Tools for Computer Graphics. Morgan Kaufmann. 2003: 98 [2024-06-18]. ISBN 978-1-55860-594-7. （原始内容存档于2023-10-25）.  Reinhard Schultz. Affine transformations and convexity (PDF). [27 February 2017]. （原始内容存档 (PDF)于2020-11-25）.  Robotic Systems Lab, ETH Zurich. Robot Dynamics Lecture Notes (PDF). [2020-04-25]. （原始内容存档 (PDF)于2020-11-12）.