0%

仿射几何学习笔记

仿射

仿射组合是线性组合的特殊形式. 线性组合 \[ {c_1} \mathbf{v_1}+ c_2 \mathbf{v_2} + \cdots + c{_n}\mathbf{v{_n}} = \sum_{i=1}^{n}{c_i\mathbf{v_i}} \]

如果 \[ \sum_{i=1}^{n} {c_i} = 1 \]

那么这个线性组合就称为仿射组合.

如果所有的系数\(\_i \geq 0 \quad (i = 1,\cdots n)\),且和为1,则称为单位线性组合.通常表示加权平均. (凸组合)

平面

向量空间中的平面,是由仿射来描述的.

对于非空集合\(S\),如果它是一个平而,则\(S\)是仿射的,反过来说也对,等价的.

但平面的定义是:一个平面是一个子空间的平移. 满足这个条件,平面中的元素必满足仿射组合.

几何解释

由一个集合中的点的所有仿射组合构成的点集是平面.

一个有趣的角度

假定方程组 \[ A \mathbf{x} = \mathbf{b} \]

与方程组 \[ A \mathbf{x} = \mathbf{0} \]

的解集分别为 \(S\_1\)\(S\_0\)。那么 \(S\_1\)\(S\_0\) 的一个平移。事实上,如果 \(\mathbf{x}\_0\)\(A\mathbf{x} = \mathbf{b}\) 的一个特解,那么 \(S\_1 = \{\mathbf{x}\_0 + \mathbf{v} \mid \mathbf{v} \in S\_0\}\)。这说明线性方程组的解空间具有仿射结构。

仿射空间

定义

仿射空间是一个几何结构,它推广了欧几里得空间的一些性质,但独立于距离和角度的概念,只保留与平行性和平行线段长度比相关的性质。

形式上,一个仿射空间 \((A, V, +)\) 由以下组成: - \(A\):点的集合 - \(V\):向量空间(称为方向空间) - \(+\):操作 \(A \times V \to A\),将点与向量相加得到新点

满足以下公理: 1. 对于任意点 \(P \in A\) 和向量 \(\mathbf{u}, \mathbf{v} \in V\),有 \((P + \mathbf{u}) + \mathbf{v} = P + (\mathbf{u} + \mathbf{v})\) 2. 对于任意点 \(P \in A\),有 \(P + \mathbf{0} = P\) 3. 对于任意两点 \(P, Q \in A\),存在唯一向量 \(\mathbf{v} \in V\) 使得 \(Q = P + \mathbf{v}\)

仿射无关与仿射基

一组点 \(\{P\_0, P\_1, \ldots, P\_k\}\) 称为仿射无关的,如果向量 \(\{P\_1 - P\_0, P\_2 - P\_0, \ldots, P\_k - P\_0\}\) 线性无关。

\(n\) 维仿射空间中,任何 \(n+1\) 个仿射无关的点构成一个仿射基。任意点 \(P\) 可以唯一表示为这些基点的仿射组合: \[ P = \sum_{i=0}^n \lambda_i P_i, \quad \sum_{i=0}^n \lambda_i = 1 \]

系数 \((\lambda\_0, \lambda\_1, \ldots, \lambda\_n)\) 称为点 \(P\) 关于该仿射基的重心坐标。

仿射变换

定义与矩阵表示

仿射变换是仿射空间到自身的映射,保持仿射组合不变。即对于任意仿射组合 \(\sum \lambd\_{i} \_i\)(其中 \(\sum \lambd\_i = 1\)),有: \[ T\left(\sum_{i=1}^n \lambda_i P_i\right) = \sum_{i=1}^n \lambda_i T(P_i) \]

在坐标表示下,仿射变换可以写为: \[ \mathbf{x}' = A\mathbf{x} + \mathbf{b} \]

其中 \(A\) 是线性变换矩阵,\(\mathbf{b}\) 是平移向量。

齐次坐标表示

使用齐次坐标可以统一表示仿射变换: \[ \begin{bmatrix} \mathbf{x}' \\ 1 \end{bmatrix} = \begin{bmatrix} A & \mathbf{b} \\ \mathbf{0}^T & 1 \end{bmatrix} \begin{bmatrix} \mathbf{x} \\ 1 \end{bmatrix} \]

基本仿射变换类型

  1. 平移 (Translation): \[ \mathbf{x}' = \mathbf{x} + \mathbf{b} \]

  2. 缩放 (Scaling): \[ \mathbf{x}' = S\mathbf{x}, \quad S = \text{diag}(s_x, s_y, s_z) \]

  3. 旋转 (Rotation): 在二维中绕原点旋转角度 \(\theta\)\[ \mathbf{x}' = R(\theta)\mathbf{x}, \quad R(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} \]

  4. 剪切 (Shearing): 保持一个坐标不变,另一个坐标线性变化: \[ \begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} 1 & k \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} \]

  5. 反射 (Reflection): 关于直线或平面的镜像。

仿射几何性质

平行性保持

仿射变换最重要的性质是保持平行性。如果两条直线在变换前平行,变换后仍然平行。

比例关系

仿射变换保持共线点的比例不变。如果点 \(C\) 在线段 \(AB\) 上,且 \(AC:CB = \lambda:\mu\),则变换后 \(A'C':C'B' = \lambda:\mu\)

仿射不变量

在仿射变换下保持不变的性质称为仿射不变量,包括: - 平行性 - 共线性 - 比例关系 - 凸性 - 重心坐标

基本定理

任意仿射变换可以分解为线性变换和平移的组合。更具体地,可以分解为: \[ T = T_{\text{平移}} \circ T_{\text{旋转}} \circ T_{\text{缩放}} \circ T_{\text{剪切}} \]

在计算机图形学中的应用

仿射变换在计算机图形学中有着广泛的应用:

几何变换

  • 物体变换:移动、旋转、缩放三维模型
  • 视图变换:相机定位和方向调整
  • 模型变换:将局部坐标转换为世界坐标

图像处理

  • 图像配准:将不同图像对齐到同一坐标系
  • 图像变形:实现扭曲、拉伸等效果
  • 透视校正:纠正图像中的透视失真

三维变换

在三维图形中,仿射变换用于: 1. 模型变换:\(\_{\text{model}}\) 2. 视图变换:\(\_{\text{view}}\) 3. 投影变换:\(\_{\text{projection}}\)

最终变换为:\(\mathbf{x}\_{\text{screen}} = M\_{\text{projection}} \cdot M\_{\text{view}} \cdot M\_{\text{model}} \cdot \mathbf{x}\_{\text{local}}\)

变换组合

仿射变换可以通过矩阵乘法组合: \[ M_{\text{total}} = M_n \cdot M_{n-1} \cdots M_2 \cdot M_1 \]

注意矩阵乘法的顺序很重要,通常从右向左应用变换。

相机投影

虽然透视投影不是仿射变换(不保持平行性),但正交投影是仿射变换。在计算机图形学中,通常使用齐次坐标和投影矩阵来处理所有类型的投影。

动画变换

  • 关键帧动画:在关键帧之间插值仿射变换参数
  • 骨骼动画:每个骨骼的变换是仿射变换
  • 粒子系统:粒子的运动和变形

在其他领域的应用

计算机视觉

  • 特征匹配:使用仿射变换描述局部特征的变化
  • 图像拼接:将多幅图像拼接成全景图
  • 目标跟踪:建模目标的运动和形变

机器人学

  • 运动学:描述机器人关节之间的变换
  • 路径规划:坐标变换和障碍物 avoidance
  • 传感器融合:不同传感器坐标系的对齐

物理学

  • 经典力学:伽利略变换是仿射变换
  • 连续介质力学:描述材料的变形
  • 相对论:洛伦兹变换可以看作仿射变换

机器学习

  • 数据增强:通过对训练图像应用随机仿射变换增加数据多样性
  • 特征归一化:将数据变换到标准坐标系
  • 流形学习:局部近似使用仿射空间

仿射几何与相关几何的关系

与线性代数的关系

仿射空间可以看作向量空间”忘记”了原点。每个仿射空间都对应一个方向向量空间,但仿射空间本身没有自然的原点。

与欧几里得几何的关系

欧几里得几何是仿射几何加上距离和角度的概念。在欧几里得几何中,我们有额外的结构:内积,它允许我们定义长度和角度。

与射影几何的关系

射影几何进一步推广了仿射几何,允许处理”无穷远点”。每个仿射空间都可以嵌入到射影空间中,通过添加无穷远超平面。

与凸几何的关系

凸组合是仿射组合的特殊情况,要求所有系数非负。凸几何研究凸集的性质,这在优化理论和计算几何中非常重要。

计算考虑

数值稳定性

计算仿射变换时需要注意数值稳定性问题: 1. 避免接近奇异的变换矩阵 2. 使用稳定的矩阵求逆算法 3. 注意浮点数精度问题

效率优化

  1. 变换组合:预先计算组合变换矩阵,避免逐顶点多次变换
  2. 矩阵结构利用:特殊变换矩阵(如纯平移、纯旋转)有特殊结构,可以优化计算
  3. 硬件加速:现代GPU专门优化了矩阵运算和顶点变换

代码示例(Python)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import numpy as np

class AffineTransform:
def __init__(self, matrix=None, translation=None):
if matrix is None:
self.matrix = np.eye(3)
else:
self.matrix = matrix

if translation is None:
self.translation = np.zeros(2)
else:
self.translation = translation

def transform_point(self, point):
"""变换单个点"""
return self.matrix @ point + self.translation

def transform_points(self, points):
"""变换多个点"""
return (self.matrix @ points.T).T + self.translation

def compose(self, other):
"""组合两个变换"""
new_matrix = self.matrix @ other.matrix
new_translation = self.matrix @ other.translation + self.translation
return AffineTransform(new_matrix, new_translation)

@staticmethod
def rotation(angle):
"""创建旋转变换"""
c, s = np.cos(angle), np.sin(angle)
return AffineTransform(np.array([[c, -s], [s, c]]))

@staticmethod
def scaling(sx, sy):
"""创建缩放变换"""
return AffineTransform(np.array([[sx, 0], [0, sy]]))

@staticmethod
def translation(tx, ty):
"""创建平移变换"""
return AffineTransform(translation=np.array([tx, ty]))

总结

仿射几何提供了研究几何对象的一种强大框架,它专注于那些在仿射变换下保持不变的性质。从基本的仿射组合概念出发,我们看到了仿射空间、仿射变换以及它们在各个领域的广泛应用。

关键要点: 1. 仿射组合是系数和为1的线性组合 2. 仿射变换保持平行性和比例关系 3. 任何仿射变换都可以分解为线性变换和平移 4. 仿射几何在计算机图形学、计算机视觉、机器人学等领域有重要应用 5. 仿射几何是连接线性代数、欧几里得几何和射影几何的桥梁

理解仿射几何不仅有助于掌握这些应用领域的基础数学,也为我们提供了一种思考几何问题的有力工具。