E(2) · 平面欧氏变换群
数学小主题读本 · 其四 | 从点空间到结构定理——刚体运动的代数解剖 | 九章格数学 PhiloMath
本册定位。 把一张纸片在桌面上挪动、旋转、翻面,它始终保持「刚硬」——纸上任意两点的距离分毫不变。这类动作就是等距 (保距变换),而它们的全体构成一个群 E(2) ,即平面欧氏变换群 。本册只做一件事:把 E(2) 的结构 彻底讲清楚,并给出一个尽可能细致的证明——每一个等距都恰能写成一个正交变换再叠上一个平移 ,用群论的话说,E(2) ≅ O(2) ⋉ ℝ2 是一个半直积 。为了让这条定理站得住,本册从最底层开始:先说明「平面」在数学上是一个只带着距离函数的点集(§1),再证明等距怎样保住了线段、直线与角(§2),接着把点配上坐标,证出那条关键引理——保住原点又保距的变换必是正交线性变换 (§3)。有了它,正交群 O(2) 的结构(§4)与 E(2) 的结构定理(§5)便水到渠成;此后顺势完成等距的五类分类(§6),看清 E(2) 的有限子群与晶体学限制(§7),并把它放回现代数学与工程的地图上(§8)。全册不假设任何超出高中与一门入门线性代数的知识,凡用到的线性代数事实都就地证明;每节末配思考题,附录给出复数与矩阵两套语言的对照表和一份可直接运行的核对脚本。
§1 欧氏平面作为点空间:距离是唯一的原始材料
几何学最古老的一句话是欧几里得的「点是没有部分的东西」。这句话作为诗是好的,作为地基却不够——「没有部分」本身又要靠别的概念来解释。现代数学取了一条更稳的路:不去定义「点是什么」,只规定「点与点之间可以比较什么」 。对于平面几何,唯一必须被规定的量就是距离 ;一旦有了距离,圆、直线、角、全等这些概念全都能用距离的语言重建,几何就不需要别的地基了。本节把这条思路走一遍,为后面的变换群先备好「点空间」。
1.1 平面是一个点集:不追问点的内部
把一张理想的、无限延展的平面想成一个集合 P ,它的元素叫点 。我们只要求两件事:这个集合非空,且它上面配了一把可以量长度的「尺子」。点自身没有任何结构——没有坐标、没有方向、没有「形状」;凡是我们将来想谈论的几何对象,都要靠这把尺子从点集里长出来。
思想 把「点是什么」搁置起来,是数学里反复奏效的招法。放弃对内部的追问,换来的是:任何满足同样规则的模型都可以被拿来当平面用,而一切结论自动对所有模型成立。结构不在对象里,在对象之间的关系里 ——这条思路在本书末尾会再次出现。
1.2 度量公理:尺子必须满足的三条规则
所谓一把「尺子」,是一个函数 d ,它对任意两个点 P , Q 都给出一个非负实数 d (P ,Q ),读作「P 到 Q 的距离」。这把尺子不能是任意的,它要满足三条谁都会点头的规则。
定义 1.1(距离 / 度量空间) 设
P 是一个非空集合。函数
d :
P ×
P → [0, ∞) 称为
P 上的一个
距离 (或
度量 ),若对一切
P ,
Q ,
R ∈
P 有
(M1) 正定:d (P ,Q ) = 0 ⟺ P = Q ;
(M2) 对称:d (P ,Q ) = d (Q ,P );
(M3) 三角不等式:d (P ,R ) ≤ d (P ,Q ) + d (Q ,R )。
此时称 (
P ,
d ) 为一个
度量空间 。
三条规定各有分工。(M1) 说「距离为零」与「是同一个点」是一回事,尺子因此能分辨点;(M2) 说量长度不分先后;(M3) 则是三者中唯一有实质内容的一条——它把「绕道 Q 的路不短于直路」这件直觉写成了不等式,等号当且仅当 Q 落在从 P 到 R 的「直路」上(这正是「线段」的种子,见 §1.5)。
P
Q
R
d(P,Q)
d(Q,R)
d(P,R)
y
x
图 1-1 三角不等式:折线 P →Q →R 的长度不小于直连 P →R 的长度。Q 越接近直线 PR ,两端越接近相等。
1.3 欧氏平面:用勾股定理造出的尺子
满足度量公理的尺子有很多;我们真正想要的平面几何,用的是一把特别的尺子——把点先写成一对标号,再用勾股定理量距离。
定义 1.2(欧氏平面) 取集合 ℝ
2 = { (
x ,
y ) :
x ,
y ∈ ℝ },对其中两点
P = (
x 1 ,
y 1 )、
Q = (
x 2 ,
y 2 ) 定义
d (P , Q ) = √( (x 1 − x 2 )2 + (y 1 − y 2 )2 )。
称 (ℝ
2 ,
d ) 为
欧氏平面 ,这把
d 称为
欧氏距离 。
一对比 x 1 − x 2 、y 1 − y 2 是一段水平与一段竖直的直角边长,把它们各自平方相加再开方,正是勾股定理。(M1) (正定)与 (M2) (对称)在这里一目了然:平方和为零当且仅当两段差都为零;交换 P 、Q 只让两个差同时反号,平方和不变。真正需要交代的是三角不等式。
命题 1.3 欧氏距离满足三角不等式:对任意
P ,
Q ,
R ∈ ℝ
2 ,
d (P , R ) ≤ d (P , Q ) + d (Q , R )。
证. 记向量
u =
Q −
P ,
v =
R −
Q ,则
R −
P =
u +
v 。要证的是
|u + v | ≤ |u | + |v | ,其中
|u | = d (P ,Q ) 。两边平方(两边都非负,平方是等价变形),只需证
|u + v |2 ≤ ( |u | + |v | )2 。
把内积记号
⟨u , v ⟩ = u 1 v 1 + u 2 v 2 用上,并用 Cauchy–Schwarz 不等式
|⟨u , v ⟩| ≤ |u | |v | :左端
|u + v |2 = |u |2 + 2⟨u , v ⟩ + |v |2 ,右端
= |u |2 + 2|u ||v | + |v |2 ,两者之差
= 2( |u ||v | − ⟨u , v ⟩ ) ≥ 0 。等号成立当且仅当
u , v 同向或其中一个为零向量。
∎
旁注(Cauchy–Schwarz 从哪来?) 平面上的 Cauchy–Schwarz 不必当作高深结果:设 u , v 的夹角为 θ,则 ⟨u , v ⟩ = |u | |v | cos θ ,而 |cos θ| ≤ 1 立刻给出结论。上面的证明其实正是「余弦不超过 1」的代数化身;把 θ 换成其它模型,同一条不等式仍成立,这正是它能一路通向高维与函数空间的缘故。
1.4 用距离重建几何:圆、线段、中点
尺子一旦具备,平面上的基本图形就都能只凭 d 定义出来。请特别注意:下面每个定义里都没有出现「坐标」二字 ——它们对任何度量空间都说得通,因此将来在证明等距保持这些图形时,我们不必回到坐标里去算。
定义 1.4(由距离定义的图形) 设 (
P ,
d ) 为度量空间。
圆 :以 O 为心、r > 0 为半径的圆是 { X ∈ P : d (O , X ) = r }。
线段 :P 到 Q 的线段是 { X : d (P , X ) + d (X , Q ) = d (P , Q ) }——三角不等式取等号的那些点。
中点 :使 d (P , M ) = d (M , Q ) = ½ d (P , Q ) 的点 M 。
线段定义的写法值得回味:它不是「直直连过去的那一串点」(那是描述,不是定义),而是把三角不等式的等号情形单挑出来 。「两点之间直线最短」中的「直线」,在这里就是「让不等式取等号的那条路」,一个纯粹由 d 说清的集合。同样的招法可以定义更一般的对象,例如「到 A 、B 等距的点集」(中垂线)是 { X : d (X ,A ) = d (X ,B ) }。
思想 「直线」「圆」「角」这些几何对象看似靠「形状」认出来,其实都能被距离这个数函数唯一地 刻画。于是,只要一个变换保住了距离,它就自动保住了全部这些图形 ——这句话是下一节和整册书的主心骨。
1.5 等距:把刚体运动写成函数
现在请出本册的主角。移动一张纸片时,纸片上每一点都换了位置,但任意两点间的距离不变——用函数的话说,是「点集到自身的一个映射,保住一切距离」。
定义 1.5(等距 / 保距变换) 设 (
P ,
d ) 为度量空间。映射
f :
P →
P 称为一个
等距 (isometry,又称
保距变换 、
刚体运动 ),若对一切
P ,
Q ∈
P ,
d ( f (P ), f (Q ) ) = d (P , Q )。
所有等距的全体记作 Isom(
P );对欧氏平面,这个集合记作
E(2) ,称
平面欧氏变换群 (euclidean group)。
定义里只写了「保持距离」一个字的要求,却已经很苛刻。先把最容易的两件事记下来。平移 :把每一点 X 沿同一方向挪同一段,X ↦ X + b (b 是固定向量),显然保距;绕固定中心的旋转 与沿一条轴的反射 也保距——后者是直觉里「翻面」的那种动作。反过来,只要 d (f (P ), f (Q )) = d (P , Q ) 对所有点成立,f 就不能有丝毫伸缩或扭曲。图 1-2 画出等距对三角形的作用:因为三条边长全被保住,像与原像必然全等(SSS),连三个角也一并被保住。
A B C
f(A) f(B) f(C)
f
原像三角形
保距后与原像全等
图 1-2 等距把三角形搬到与它全等的三角形上:三边长度原样保留,于是三个角、面积、形状也全被保留。刚体运动=不改变任何距离的搬运 。
1.6 第一条定理:等距必是单射
在谈论「群」之前,得先确认每个等距都有资格当逆映射。这件事异常简单,却值得写清楚,因为它是后面「E(2) 中每个元素可逆」的第一块砖。
命题 1.6 设 f : P → P 是等距,则 f 是单射。特别地,两个等距相等当且仅当它们在每一点取值相同。
证. 设 f (P ) = f (Q )。则 d (f (P ), f (Q )) = 0;由保距,d (P , Q ) = 0;由 (M1) 得 P = Q 。故 f 单射。∎
单射只是「不把两个点压到一起」。等距是否一定能把整个平面铺满(满射)?答案是肯定的,但这不是免费得来的——它要靠 §3 的一条关键引理(每个等距都是可逆线性变换加平移)才能证;在第 1 章我们先把「等距」定义为保距映射,稍后在 §3.4 补证它自动是双射 。先把 §1 用距离造出来的全部工具列个清单,作为往下走的行囊。
小结 1.7 本节只做了一件事:把「平面」换成一个只带距离的集合,并在此之上定义等距 。要点有三——① 距离的三条公理中,三角不等式是唯一有内容的(它的等号情形定义了线段);② 圆、线段、中点、中垂线都能只用 d 写出,因此等距一旦保距,就自动保住它们;③ 等距必是单射,但「是否满射」留待 §3 解决。
思考题 1
对 ℝ 上的通常距离 d (x ,y ) = |x − y |,验证 f (x ) = 2x 是否等距?f (x ) = x + 3 呢?
在 ℝ2 上定义 d ∞ (P ,Q ) = max{ |x 1 − x 2 |, |y 1 − y 2 | }(「出租车」度量的一种)。它满足三条公理吗?它的「圆」是什么形状?
仅凭「f 保距」能否推出 f 把中点映到中点?把中垂线映到中垂线?试着只用定义(不要用坐标)说明理由。
§2 等距的几何刚性:距离一保,全盘皆保
上一节把「距离」立成了唯一的原始材料,并指出圆、线段、中点都能只用距离写出。本节兑现那句话:证明一个变换只要保住距离,就自动保住了这些图形,乃至保住了「直线」「角」「全等」这些看似与距离无关的东西。做完这一节,等距在几何上就再无秘密——它是一次全程刚硬的搬运 。
2.1 线段与中点原样保留
命题 2.1(等距保线段) 设
f 是度量空间 (
P ,
d ) 上的等距。若
P ,
Q ∈
P ,则
f 把线段
PQ 映成线段
f (
P )
f (
Q ):
f ( 线段 PQ ) = 线段 f (P )f (Q )。
证. 按定义 1.4,X 在线段 PQ 上 ⟺ d (P ,X ) + d (X ,Q ) = d (P ,Q )。设 X 满足此式,由保距把三段的距离逐一换成像的距离:d (f (P ),f (X )) + d (f (X ),f (Q )) = d (f (P ),f (Q )),故 f (X ) 在线段 f (P )f (Q ) 上。这一步只用到「保距」把等式两边同时保鲜,与 X 的具体位置无关 。于是 f (线段 PQ ) ⊆ 线段 f (P )f (Q )。
反过来要证「线段 f (P )f (Q ) 上的每个点都在像里」,就不能只靠保距了——需要 f 能取到那一点。这一步留到 §3 证得「等距满射」后一并补上;届时应得等式 。眼下先记住:等距把线段搬到线段之上(作为子集) ,这是全部后续几何性质的源头。
推论 2.2(等距保中点) 若 M 是 P 、Q 的中点,则 f (M ) 是 f (P )、f (Q ) 的中点。
证. 中点的定义是一对等式 d (P ,M ) = d (M ,Q ) = ½d (P ,Q )。保距把三个距离换成对应像之间的距离,等式形式不变,故 f (M ) 满足中点的定义式。∎
2.2 圆与共线:等距不改变「形状的骨架」
命题 2.3(等距保圆) 设 f 是等距。以 O 为心、r 为半径的圆,其像是以 f (O ) 为心、r 为半径的圆。
证. X 在圆上 ⟺ d (O ,X ) = r 。保距后 ⟺ d (f (O ),f (X )) = r ,即 f (X ) 在以 f (O ) 为心、r 为半径的圆上。半径相同的两向包含给出相等。∎
接下来是本节最有用的一条。回忆 §1:三点 A , B , C 中某一点落在另两点之间,当且仅当三角不等式取等号 。而「三点共线」正是「某一点介于另两点之间」的几何说法。于是共线性也能被距离方程刻画。
定义 2.4(共线) 称三点 A , B , C 共线 ,若下列三式中至少一个有解:d (A ,C ) = d (A ,B ) + d (B ,C ),或其轮换。即三角不等式在某一点处取等号。
命题 2.5(等距保共线) 等距把共线三点映成共线三点。
证. 设 A , B , C 共线,不妨 d (A ,C ) = d (A ,B ) + d (B ,C )。保距逐项替换后,同样的等式对 f (A ), f (B ), f (C ) 成立,故它们共线。∎
既然等距保共线、又保「介于其间」的次序,它就把「直」与「曲」的区别原样搬运:直线映成直线(把共线点集整体搬过去),角映成同样大小的角。下一小节把「角」也钉死。
2.3 角与全等:SSS 是一句保距的话
中学里判定两个三角形全等的「SSS」——三边对应相等即全等——在度量语言里其实就是「存在一个等距把二者对应起来」 。反过来,等距作用在三角形上,正因为保住了三条边,才保住了三个角。
命题 2.6 设 f 是等距,A , B , C 为任意三点。则三角形 ABC 与三角形 f (A )f (B )f (C ) 全等:对应边相等,对应角相等。
证. 三边相等由保距直接给出:d (A ,B ) = d (f (A ),f (B )),其余两边同理,故 SSS 成立。角由三边长度唯一确定(余弦定理 cos C = ( a 2 + b 2 − c 2 ) / ( 2ab ) :三边定了,余弦就定了),所以对应角相等。∎
小结 2.7 本节证明:等距保线段、保中点、保圆、保共线、保三角形全等 。一句话概括——凡是用距离写出来的几何概念,等距一概保留 ;反过来,凡等距想保留的东西,都得能从距离里写出来。这把「几何」与「距离」彻底接上了线:研究等距,就是研究距离这个函数的不变量。
f
r
r
半径 r 的圆
半径仍为 r 的圆
图 2-1 等距保圆:圆心随变换走,半径分毫不变。距离函数的「等值面」被整体搬运。
思考题 2
命题 2.1 的证明里,哪一步用到了「f 单射」?请指出。若 f 只保距而非单射,线段会被压成一点吗?
「三点共线」用三角不等式的等号定义。请说明:为什么不能用 d (A ,C ) < d (A ,B ) + d (B ,C ) 的「严格小于」来定义「不共线」?
在「出租车」度量 d ∞ 下,保距变换是否仍保共线(按定义 2.4 的等式版本)?画几个例子看看。
§3 坐标化:等距 = 正交变换 + 平移
§2 是纯粹「定性的」几何讨论,还没出现一个数。本节把它翻到代数一面:给平面选定一套坐标,于是「点」变成「向量」,「等距」变成「公式」。这一节的核心是一条引理——保住原点又保距的映射,必是正交线性变换 。它是整个结构定理的技术心脏,我们要把它逐步证透。
3.1 把点翻译成向量
欧氏平面 ℝ2 本就由坐标构成,但我们刻意迟至现在才启用它。办法是选一个公共的原点 O ,把每个点 X 与它到原点的位移向量 x = X − O 对应起来。这样点集 ℝ2 与向量空间 ℝ2 之间有了一个「平移得到的一一对应」:X ↔ x 。距离也能写成向量长度:d (X ,Y ) = |x − y |,其中 |v | = √( v 1 2 + v 2 2 ) 。以下凡谈线性代数运算,都是在向量语言里进行。
旁注(原点是被「选」出来的)。 平面上本没有天生的原点,选哪一个都不影响几何。这一点在后面会变成结构定理里的一个漂亮特征:平移部分依赖原点的选择,线性部分不依赖 。等距到底「旋转了多少、有没有翻面」,是内在的;它「平移了多少」则要看参照系。§5 会把这句话说成严格的定理性陈述。
3.2 关键引理:保原点 + 保距 ⟹ 正交线性
设 g : ℝ2 → ℝ2 满足两条:(i) 保原点 g (0) = 0;(ii) 保距 |g (x ) − g (y )| = |x − y | 对一切 x , y 成立。要证 g 是线性映射且保持内积。我们把证明切成三段,每段只做一件事。
引理 3.1(保原点 + 保距 ⟹ 保范数) 在上述假设下,|g (x )| = |x | 对一切 x 成立。
证. 取 y = 0:|g (x ) − g (0)| = |x − 0|。由 g (0) = 0 得 |g (x )| = |x |。∎
引理 3.2(保范数 ⟹ 保内积) 若 |g (x )| = |x | 对一切 x 成立,则 ⟨g (u ), g (v )⟩ = ⟨u , v ⟩ 对一切 u , v 成立。
证. 由保距与
g (0) = 0,有 |
g (
u ) −
g (
v )|
2 = |
u −
v |
2 。两边各自按
范数展开 (这一步只用内积的双线性与对称性,与
g 是否线性无关):
|g (u )|2 − 2⟨g (u ), g (v )⟩ + |g (v )|2 = |u |2 − 2⟨u , v ⟩ + |v |2 。
由引理 3.1,左端首项 |
g (
u )|
2 = |
u |
2 、末项 |
g (
v )|
2 = |
v |
2 ,逐项抵掉后得
⟨g (u ), g (v )⟩ = ⟨u , v ⟩。 (★★)
关键之处在于:
(★★) 只用到「保距」与「保原点」,根本没用到 g 的线性 ——内积的双线性属于
ℝ2 自身,与
g 无关。这正是「保距」通向「保内积」的那座桥。
∎
现在万事俱备。有了 (★★),g 在内积 这一层已经完全「同构」了;剩下的工作是证明它在向量运算 这一层也保结构——即线性。这一步同样只是一次范数展开。
引理 3.3(关键引理 / 保原点 + 保距 ⟹ 线性) 设
g : ℝ
2 → ℝ
2 满足
g (0) = 0 且保距。则
g 是线性的:
g (u + v ) = g (u ) + g (v ), g (λ u ) = λ g (u ) (λ ∈ ℝ)。
证. 由引理 3.1 有
|g (x )| = |x | ,由引理 3.2 有 (★★)
⟨g (u ), g (v )⟩ = ⟨u , v ⟩ 。先证
加法 线性,展开
|g (u + v ) − g (u ) − g (v )|2 = ⟨g (u +v ) − g (u ) − g (v ), 同前⟩。
把内积按双线性展开,再用 (★★) 把每一对
⟨g (·), g (·)⟩ 换成
⟨·, ·⟩ ,并用引理 3.1 把
|g (u +v )|2 换成
|u +v |2 ,整个表达式化为
|u + v |2 + |u |2 + |v |2 − 2⟨u +v , u ⟩ − 2⟨u +v , v ⟩ + 2⟨u , v ⟩,
后者的展开正是
|(u +v ) − u − v |2 = 0 ,故结果为零向量,即
g (
u +
v ) =
g (
u ) +
g (
v )。
再证数乘。由 (★★) 与引理 3.1,
|g (λu ) − λ g (u )|2 = |g (λu )|2 − 2λ ⟨g (λu ), g (u )⟩ + λ 2 |g (u )|2
= |λu |2 − 2λ ⟨λu , u ⟩ + λ 2 |u |2 = λ 2 |u |2 − 2λ 2 |u |2 + λ 2 |u |2 = 0。
故
g (
λu ) =
λ g (
u )。两条合起来,
g 线性。
∎
定理 3.4(正交性) 设 g : ℝ2 → ℝ2 保原点且保距,则 g 是线性映射,且对一切 x , y 有 ⟨g (x ), g (y )⟩ = ⟨x , y ⟩ 。写成分量矩阵 g (x ) = A x ,则 A 满足 A ⊤ A = I ,即 A 是正交矩阵 。
证. 线性性由引理 3.3 给出,保内积由引理 3.2 的 (★★) 给出。设 A 是 g 的矩阵(列是 g (e 1 ), g (e 2 ))。保内积对一切 x , y 说 x ⊤ A ⊤ A y = x ⊤ y 。取 x = e i , y = e j 得 (A ⊤ A )ij = δ ij ,即 A ⊤ A = I 。∎
3.3 任意等距:一个正交变换,跟着一个平移
关键引理管的是「保原点」的映射。一般的等距并不保原点,但补救的办法极简单:先把它「移到原点」。设 f 是等距,令 b = f (0),再令
g (x ) = f (x ) − b 。
那么
g (0) = 0;并且
|g (x ) − g (y )| = |f (x ) − f (y )| = |x − y | (减同一个常数不改距离),所以
g 保距又保原点,由定理 3.4 是正交变换
g (
x ) =
A x 。把
b 移回去,就得到本册的第一条主定理。
定理 3.5(等距的坐标形式) 设
f : ℝ
2 → ℝ
2 是等距。则存在
唯一 的
A ∈ O(2) 与
b ∈ ℝ2 ,使
f (x ) = A x + b 对一切 x ∈ ℝ2 。
称
A 为
f 的
线性部分 (记 Lin(
f )),
b =
f (0) 为
f 的
平移部分 。
证(存在性). 取 b = f (0),g (x ) = f (x ) − b 。如上,g 保原点且保距,由定理 3.4 有正交矩阵 A 使 g (x ) = Ax ,于是 f (x ) = Ax + b 。∎
证(唯一性). 若 Ax + b = A′x + b′ 对一切 x 成立,取 x = 0 得 b = b′ ;再对任意 x 得 Ax = A′x ,即 A = A′ 。∎
推论 3.6(等距是双射) 每个等距 f = Ax + b 都是双射,其逆为 f −1 (y ) = A −1 (y − b ) = A ⊤ y − A ⊤ b ,也是等距。
证. A ∈ O(2) 满足 A ⊤ A = I ,故可逆,A −1 = A ⊤ ;f 作为「可逆线性映射 + 平移」的复合因而可逆,显式逆如上。又 A ⊤ ∈ O(2)(因 (A ⊤ )⊤ A ⊤ = A A ⊤ = I ),故 f −1 仍是「正交 + 平移」形式,是等距。这同时补上了 §2 命题 2.1 里悬着的「满射」:等距把线段映成恰好 整条线段。∎
小结 3.7 本节把等距的几何面貌换成了彻底的代数面貌:每个等距都恰好是 x ↦ Ax + b ,A 正交、b 任意 ,且写法唯一。请留意这三个副产品——① 等距自动满射(推论 3.6);② 等距在加法与数乘下「线性」(定理 3.4);③ 线性部分 A 与平移部分 b 是两件独立的信息 。最后一点正是结构定理的种子:一旦把它们分开看,E(2) 就裂成「旋转/翻面」与「平移」两半。
先做线性部分 A
再平移 b
O
f(x) = A x + b
图 3-1 每个等距都分两步施展:先绕原点做一次正交变换 A (旋转或翻面),再整体平移 b 。图中小三角形先转向、再挪位,回到等距的位置。
思考题 3
引理 3.3 证加法线性时,「内积按双线性展开」这一步为何不需要 g 线性?(提示:线性的是内积 ⟨·,·⟩ ,不是 g 。)
举一个满足 g (0) = 0 却不 保距的映射,说明关键引理中「保距」不可省。
举一个保距却不保原点的映射,验证它必能写成 Ax + b 而 b ≠ 0。再问:b = 0 的等距恰好是哪些?
若把 ℝ2 换成 ℝn ,本节的证明有一步会需要修改吗?找出它。
§4 正交群 O(2):旋转与翻面,两副面孔
§3 把一个等距拆成了「正交变换 A 」与「平移 b 」两件互不相干的信息。要读懂整个 E(2) ,先要把其中更复杂的那一半——线性部分 A 的全体 O(2) ——彻底看清。本节证明:O(2) 里的变换只有两副面孔,保向的旋转 与反向的翻面 ;而这两副面孔拼起来,又是一个小号的半直积 O(2) ≅ SO(2) ⋊ ℤ2 ,正好为 §5 的大定理做一次预演。
4.1 正交矩阵构成一个群
定义 4.1(正交群) 记
M2 (ℝ) 为二阶实方阵全体。称
A ∈ M
2 (ℝ) 为
正交矩阵 ,若
A ⊤ A = I 。
全体正交矩阵记作
O(2) ,称
正交群 。
命题 4.2 O(2) 在矩阵乘法下构成一个群。
证. 逐条验证:
封闭 :若 A , B ∈ O(2),则 (AB )⊤ (AB ) = B ⊤ A ⊤ AB = B ⊤ B = I ,故 AB ∈ O(2)。
结合律 :矩阵乘法本就满足。
单位元 :I ⊤ I = I ,故 I ∈ O(2)。
逆元 :若 A ⊤ A = I ,取行列式得 det(A ) ≠ 0 ,故 A 可逆;由 A ⊤ A = I 两边右乘 A −1 得 A ⊤ = A −1 ,于是 A −1 ∈ O(2) 且 A ⊤ A = A A ⊤ = I 。∎
命题 4.3(三种等价说法) 对 A ∈ M2 (ℝ),下列等价:① A 正交;② 线性映射 x ↦ A x 保内积(从而保距离);③ A 的两个列向量构成一组标准正交基。 ①⟺③ 是 A ⊤ A = I 逐元素写开(A ⊤ A 的第 ij 项恰是第 i 、j 列的内积);②⟺① 即定理 3.4。于是「正交矩阵」与「保原点的等距」是同一批对象 ,这正是我们能把等距的两半分开的语言基础。
4.2 行列式把正交群一分为二
命题 4.4 若 A ∈ O(2),则 det A = 1 或 det A = −1。
证. 两边取行列式:det(A ⊤ A ) = (det A )2 = det I = 1 ,故 det A = ±1 。∎
定义 4.5 称 SO(2) = { A ∈ O(2) : det A = 1 } 为特殊正交群 ;det A = −1 的正交矩阵组成另一片,记作 O(2)− 。于是 O(2) = SO(2) ⊔ O(2)− (不交并)。
命题 4.6 det : O(2) → {±1} 是一个群同态,其核正是 SO(2)。因此 SO(2) 是 O(2) 的正规子群,指数为 2 ,且 O(2) / SO(2) ≅ ℤ2 。
证. det(AB ) = det A · det B ,故 det 是乘法同态;{±1} 是乘法群;核即 det 取 1 的那些元素,正是 SO(2)。同态核必正规,指数 = |{±1}| = 2。∎
4.3 SO(2):全部是旋转
定理 4.7(SO(2) 的形状) A ∈ SO(2) 当且仅当存在实数
θ 使
称
R (
θ ) 为
旋转矩阵 ,它把平面绕原点逆时针转过角
θ 。
证. (⇐) 直接验算
R (θ )⊤ R (θ ) = I 且
det R (θ ) = cos2 θ + sin2 θ = 1 。
(⇒) 设
A =
∈ SO(2)。正交条件给出三式:
a 2 +
c 2 = 1、
b 2 +
d 2 = 1、
ab +
cd = 0;
det A = 1 给出
ad −
bc = 1。由
a 2 +
c 2 = 1 可设
a = cos
θ 、
c = sin
θ (单位圆上的点)。此时 (
b ,
d ) 同时满足两条方程
(a , c )·(b , d ) = ab + cd = 0, ad − bc = 1。
第一式说 (
b ,
d ) 垂直于 (
a ,
c );在平面里垂直于 (
a ,
c ) 的只有两个方向 ±(−
c ,
a ),而
(b , d ) = t (−c , a ) 代入第二式得
t (a 2 + c 2 ) = t = 1,故
b = −
c = −sin
θ 、
d =
a = cos
θ 。于是
A =
R (
θ )。
∎
命题 4.8(旋转的乘法表) 对任意实数
θ ,
φ :
R (θ ) R (φ ) = R (θ + φ ), R (θ )−1 = R (−θ ), R (0) = I 。
证. 把 R (θ )R (φ ) 按矩阵乘法算出来,用两角和公式 cos(θ +φ ) = cosθ cosφ − sinθ sinφ 、sin(θ +φ ) = sinθ cosφ + cosθ sinφ 即得第一式;取 φ = −θ 得逆;θ = 0 得单位。∎
推论 4.9 映射 θ ↦ R (θ ) 是加法群 ℝ 到 SO(2) 的满同态,核为 2π ℤ ,故 SO(2) ≅ ℝ / 2π ℤ 。若把 R (θ ) 对应到单位复数 e iθ ,则 SO(2) 又同构于圆群 U (1) = { z ∈ ℂ : |z | = 1 } (在复数乘法下)。「转 θ 再转 φ」就是「转 θ+φ」,而转 2π 等于没转 ——这条几何直觉,代数上就是「SO(2) 是圆周」。
4.4 反向的一片:反射,以及 O(2) 的整体结构
定理 4.10(O(2)− 的形状) A ∈ O(2) 且 det
A = −1 当且仅当
A 是
关于过原点某条直线的反射 。具体地,若反射轴与
x 轴成角
α ,则
A =
S (
α ) :=
cos 2α sin 2α sin 2α −cos 2α
。
证. 先看 A 的特征值。特征多项式 p (λ ) = λ 2 − (tr A )λ + det A = λ 2 − (tr A )λ − 1 。其判别式 (tr A )2 + 4 > 0 ,故有两实根;又正交矩阵的特征值必满足 |λ | = 1 (保内积的线性映射把特征向量只可伸缩、不可伸缩绝对值),于是两根只能是 ±1。乘积为 det A = −1,故两根为 1 与 −1:存在单位向量 u (对应 1)与单位向量 w ⊥ u (对应 −1),A 把直线 ℝu 逐点固定、把 ℝw 逐点反号——这正是「关于直线 ℝu 的反射」。反向验算 S (α ):它显然固定与 x 轴成角 α 的方向、反号垂直方向,且 det = −cos2 2α − sin2 2α = −1 ,确为 det = −1 的正交矩阵;由上面特征值的唯一性,任一 det = −1 的正交矩阵都等于某 S (α )。∎
定理 4.11(O(2) 的结构) 取定一个反射,例如沿
x 轴的反射
S 0 =
(即
S (0))。则
每个 A ∈ O(2) 恰有两种写法之一:A = R (θ )(保向)或 A = R (θ ) S 0 (反向)。
O(2) = SO(2) ⊔ SO(2)S 0 ,两个左陪集,各占一半。
SO(2) ◁ O(2) 且 SO(2) ∩ {I , S 0 } = {I } ,故 O(2) 是 SO(2) 与 {I , S 0 } ≅ ℤ2 的内半直积 :O(2) ≅ SO(2) ⋊ ℤ2 。
证. ① 若 A 保向,A = R (θ );若反向,则 det(A S 0 −1 ) = (−1)·(−1) = 1 ,故 A S 0 −1 = R (θ ),即 A = R (θ )S 0 (用到 S 0 −1 = S 0 )。两种写法互斥(det 不同)。② 即 ① 的集合表述。③ 正规性来自命题 4.6;交集为 {I } 因 S 0 ∉ SO(2);SO(2)·{I , S 0 } 恰好覆盖 O(2),故为内半直积(半直积定义见 §5.4)。∎
一句提醒 旋转与反射不可交换 :一般地 R (θ )S 0 ≠ S 0 R (θ ) 。事实上 S 0 R (θ )S 0 = R (−θ ) ——「换个镜子照,旋转方向就反过来」。这条稍后会以「ℤ2 作用在 SO(2) 上取逆」的形式,在 O(2) 的半直积结构中再次现身。
θ
旋转 R(θ)
反射 S(α)
轴与 x 轴成 α
绕原点转 θ
图 4-1 O(2) 的两副面孔:保向的旋转(左)与反向的反射(右)。det = +1 与 det = −1 恰好把它们分开,各占这个群的一半。
思考题 4
证明 R (θ )−1 = R (θ )⊤ ,再用它说明「旋转矩阵的转置就是反向旋转」。
写出 S (α )S (β ) 的矩阵,验证它等于 R (2(α −β )) 。这解释了什么几何事实?
为什么「两个反射的复合是旋转」?能否由 det 立刻看出(两个 det = −1 相乘为 +1)?
把 4.11 的结论与 §5 的 E(2) 结构对照:O(2) ≅ SO(2) ⋊ ℤ2 与 E(2) ≅ ℝ2 ⋊ O(2) 两次都用到了「半直积」。它们是同一件事吗?
§5 结构定理:E(2) 是平移与正交的半直积
现在是全册的顶点。我们要证明:整个等距群 E(2) ,恰由「平移」与「保原点的正交变换」这两种基本动作,以一种叫做半直积的方式拼成 。用符号写就是 E(2) ≅ ℝ2 ⋊ O(2) 。本节把这句话拆成一层层可验证的事实:先确认 E(2) 是群,再请出两块「积木」——平移群 T 与正交群 O(2) ——看清它们的相互关系,最后把它们严丝合缝地接起来。
5.1 E(2) 是一个群
§1 已把 E(2) 定义为「平面全部等距之集」。要称其为「欧氏变换群 」,得先证实它真的成群。
命题 5.1 E(2) 在映射的复合下构成一个群。 (我们约定乘法即复合:f g 表示先作用 g 再作用 f ,即 (f g )(x ) = f (g (x ))。)
证. 逐条验证:
封闭 :设 f , g 保距。则 d (fg (P ), fg (Q )) = d (g (P ), g (Q )) = d (P , Q )(先用 f 保距、再用 g 保距),故 fg 保距。
结合律 :映射复合天然满足 f (gh ) = (fg )h 。
单位元 :恒等映射 id 保距,且 f id = id f = f 。
逆元 :由推论 3.6,每个等距 f 是双射且 f −1 仍保距,故 f −1 ∈ E(2)。∎
5.2 两块积木:平移群 T 与正交群 O(2)
定义 5.2(平移) 对 b ∈ ℝ2 ,定义平移 t b : ℝ2 → ℝ2 ,t b (x ) = x + b 。令 T = { t b : b ∈ ℝ2 } 为全部平移之集。
命题 5.3 映射 b ↦ t b 是加法群 (ℝ2 , +) 到 (T, ∘) 的同构。特别地 T 是 E(2) 的子群,且 T ≅ ℝ2 。
证. 先验证 t b 确为等距:d (t b (P ), t b (Q )) = |(P + b ) − (Q + b )| = |P − Q |。再验证乘法:t b t c (x ) = x + c + b = t b +c (x ),故 t b t c = t b +c ;又 t 0 = id、t b −1 = t −b 。于是 b ↦ t b 保持运算(同为加/复合)、是双射,为同构。∎
另一块积木是 O(2) 。注意 O(2) 本身是矩阵群,但我们更愿意把它看成「保原点的等距」之集——两者在同构意义下是同一个东西(命题 4.3),而后者能直接嵌进 E(2) 。
约定 5.4 今后把 O(2) 视为 E(2) 的子集:A ∈ O(2) 代表等距 x ↦ A x 。于是 O(2) 恰是 E(2) 中固定原点的那些元素 :O(2) = { f ∈ E(2) : f (0) = 0 } 。同时 T 恰是 E(2) 中线性部分为 I 的那些元素 (见命题 5.8)。
5.3 共轭一块平移,得到的仍是平移
两块积木拼得起来,靠的是一条关键的技术事实:用任意等距去「夹住」一个平移,结果还是一个平移——只是平移的方向被搬动了。这条引理将立刻给出 T 的正规性,以及那个控制整个结构的同态。
引理 5.5(共轭引理) 设
f ∈ E(2),线性部分
Lin(f ) = A 。则对一切
b ∈ ℝ
2 ,
f t b f −1 = t A b 。
证. 由定理 3.5,
f (
x ) =
Ax +
c ,其中
c =
f (0)。其逆为
f −1 (y ) = A −1 (y − c )。对任意
x ,逐步代入:
f −1 (x ) = A −1 (x − c ),
t b f −1 (x ) = A −1 (x − c ) + b ,
f t b f −1 (x ) = A [ A −1 (x − c ) + b ] + c = (x − c ) + Ab + c = x + Ab 。
右端正是
t Ab (
x )。
∎
推论 5.6 T 是 E(2) 的正规子群,记 T ◁ E(2) 。
证. 引理 5.5 说:任一等距共轭一个平移后仍是平移(在 T 里)。这正是正规的定义 f T f −1 ⊆ T 对一切 f 成立。∎
推论 5.7(作用同态) 定义映射
φ : O(2) → Aut(T), φ (A ) ( t b ) := t A b ,
则
φ 是群同态。把 T 用
ℝ2 同构地辨认,
φ 就变成「
A 对向量做矩阵乘法」这一自然作用:
φ (A ) : b ↦ A b 。它正是 §5 结构定理里那个「把两块积木拧在一起」的旋钮。
5.4 半直积:先把「拼接」这件事说清楚
「G 由正规子群 N 与子群 H 拼成」有内、外两种说法,先立定义。
注 5.9 两种说法等价:内半直积 G = N ⋊ H 唯一决定一个 φ : H → Aut(N ) (共轭,即 φ (h )(n ) = hnh −1 ),使 G ≅ N ⋊φ H ;反过来,外半直积里 N × {e } 正规、{e } × H 是子群、二者交为 {(e ,e )} 且乘积覆盖全群。所以记法 ⋊ (「半」,勾朝右)恰当地提醒:右边那块 H 不必正规,左边那块 N 必须正规 。
5.5 结构定理
现在两块积木、一条共轭引理、半直积的定义都齐了。核心的观察只有一句话:每个等距都已经能写成「一个平移」与「一个正交变换」的乘积(定理 3.5),而这两块的相交只有恒等元,且平移那块正规。 把它说成定理。
定理 5.10(E(2) 的结构定理) 在 E(2) 中,平移群
T ≅ ℝ2 是正规子群,
O(2) 是子群,且
E(2) = T · O(2) ,即每个等距都是某个平移与某个正交变换的复合;
T ∩ O(2) = { id } ;
因而
E(2) 是 T 与 O(2) 的内半直积:E(2) = T ⋊ O(2) ,等价地(用
T ≅ ℝ2 与推论 5.7 的
φ )
E(2) ≅ ℝ2 ⋊φ O(2), φ (A )(b ) = A b 。
证. ① T ◁ E(2) :由推论 5.6。
② E(2) = T · O(2) :任取
f ∈ E(2),记
b = f (0)、
A = Lin(f ) ∈ O(2)。由定理 3.5,
f (
x ) =
Ax +
b ,即
f = t b ∘ A (先做正交变换 A ,再平移 b )。
右端是 T 中元素与 O(2) 中元素之积,故
f ∈ T·O(2),得
E(2) ⊆ T·O(2) ;反向包含显然。于是
E(2) = T·O(2) 。
③ T ∩ O(2) = {id} :设
f ∈ T ∩ O(2)。作为 O(2) 的元素,
f (0) = 0;作为 T 的元素(平移),
f =
t b ,于是
b =
f (0) = 0,故
f =
t 0 = id。
三条合起来正是内半直积的定义 5.8;再由注 5.9,
φ 由共轭给出,恰为推论 5.7 的「矩阵乘法」作用。
∎
定理 5.11(唯一分解) 每个
f ∈ E(2) 唯一地写成
f = t b ∘ A , b ∈ ℝ2 ,A ∈ O(2),
且其中
A = Lin(f )、
b = f (0)。
证. 存在性即定理 5.10 的 ②。唯一性:设 t b A = t b′ A′ 。取 x = 0 得 b = b′ ;代回得 Ax = A′x 对一切 x ,故 A = A′ 。(这也正是定理 3.5 的唯一性,此处从群分解的角度重述。)∎
推论 5.12(分裂正合列) 结构定理可等价地读作一条
分裂的正合列
1 → ℝ2 ⟶T E(2) ⟶σ O(2) → 1,
其中
σ :
f ↦ Lin(
f ) 是满同态(见下),核为 T;它「分裂」的意思是存在同态
s : O(2) → E(2),
A ↦ (
x ↦
Ax ),使
σ ∘ s = id。
有分裂 ⟺ 是半直积 ;无分裂的一般扩张则须用上同调刻画——那正是
E(2) 之外更广阔的世界。
命题 5.13(线性部分同态 σ) 映射 σ : E(2) → O(2) ,σ (f ) = Lin(f ) 是满群同态,核为 ker σ = T 。因此 E(2) / T ≅ O(2) 。
证. 同态 :设
f (
x ) =
Ax +
c 、
g (
x ) =
Bx +
d 。则
(f ∘ g )(x ) = A (Bx + d ) + c = (AB )x + (Ad + c ),
故
Lin(f g ) = A B = Lin(f ) Lin(g ) ,即
σ 保运算。
满射 :任
A ∈ O(2),等距
x ↦ Ax 的线性部分就是
A ,故
A 在像中。
核 :
Lin(f ) = I ⟺
f (
x ) =
x +
b ⟺
f ∈ T。最后由第一同构定理,
E(2)/ker σ = E(2)/T ≅ O(2) 。
∎
思想 把定理 5.10 与命题 5.13 并读,E(2) 的性格一目了然:它是 O(2) 的「扩张」,用 ℝ2 去补 。你想看一个等距「转了多少、翻没翻面」,用 σ 把它投影到 O(2) ;剩下「挪了多远」的信息,则藏在核 T ≅ ℝ2 里。两个问题各归各的积木,这就是「分解」二字的全部含义——把纠缠的对象拆成两个已经懂了的对象 。
5.6 保向的一片:SE(2)
定义 5.14 称 SE(2) = { f ∈ E(2) : Lin(f ) ∈ SO(2) }(即 det Lin(f ) = 1)为保向欧氏群 (刚体运动群),其元素称刚体运动 或保向等距 。
命题 5.15 SE(2) 是 E(2) 的正规子群,指数为 2,且 SE(2) = T ⋊ SO(2) ≅ ℝ2 ⋊ SO(2) ,E(2)/SE(2) ≅ ℤ2 。E(2) = SE(2) ⊔ SE(2)·S 0 。
证. 复合 det∘σ : E(2) → {±1} 是同态,其核正是 SE(2),故 SE(2) ◁ E(2) 且指数 2。把定理 5.10 限制到 det = 1 的部分,即得 SE(2) = T ⋊ SO(2) (此时 O(2) 换成它的正规子群 SO(2),φ 限制为 SO(2) → Aut(ℝ2 ) )。∎
几何上,SE(2) 是所有不翻面 的刚体运动:把一张画着箭头的透明纸在桌面上滑动、绕某点旋转,纸始终朝上——这类操作就是 SE(2) 。若允许把纸翻过来,就得到 E(2) 的另一片。这个「能不能翻面」的二分,正是 det 的 ±1。
5.7 换成复数,结构定理长什么样
把平面点写成复数 z = x + iy ,结构定理会呈现出一张更清爽的面孔。
定理 5.16(复数形式) 每个等距
f : ℂ → ℂ 恰为下列两种形式之一:
保向:f (z ) = a z + b ; 反向:f (z ) = a z + b ,
其中
a ∈ U(1)(即 |
a | = 1)、
b ∈ ℂ 任意,且两式的
a ,
b 由
f 唯一确定。
证. 复数乘法的实矩阵是 a = e iθ ↔ R (θ ) ;共轭 z ↦ z 的实矩阵是 S 0 。于是 az + b 对应 R (θ )x + b (保向),a z + b 对应 R (θ )S 0 x + b (反向)。由定理 3.5 与 4.11,全部等距不出这两类;唯一性同前。∎
一张对照表
对象 矩阵语言 复数语言
保向线性部分 A ∈ SO(2)a ∈ U(1),z ↦ az
反向线性部分 A ∈ O(2)− a ∈ U(1),z ↦ a z
平移 x ↦ x + b z ↦ z + b
整体 Ax + b az + b 或 a z + b
小结 5.17 本节证明了本册的主定理:E(2) ≅ ℝ2 ⋊φ O(2) ,其中 φ (A )(b ) = Ab 是「正交矩阵乘向量」的自然作用。请连同四件事一起记住——① 每个等距唯一写成 t b A (定理 5.11);② 线性部分映射 σ 满射、核为 T(命题 5.13);③ T 正规(推论 5.6);④ 保向的一片 SE(2) ≅ ℝ2 ⋊ SO(2) (命题 5.15)。一半是「平移」,一半是「旋转或翻面」,而「翻面」这个开关又会反过来调节「旋转」的方向 ——这就是平面刚体运动的全部代数骨架。
1
T ≅ ℝ2
E(2)
O(2)
1
σ
Lin
分裂 s:A ↦ (x ↦ Ax)
图 5-1 结构定理的正合列画像:E(2) 夹在 ℝ2 与 O(2) 之间,σ 投出「线性部分」,金色虚线是把它「劈开」的截面 s 。有截面,正是「半直积」而非「普通扩张」的标志 。
思考题 5
直接验证:在 E(2) 中 t b A = A t A −1 b 。这说明「平移」与「正交」一般不 交换,也说明为何 E(2) 不是直积。
举出一个非平凡的例子,验证 T ∩ O(2) = {id} :找一个既是平移又固定原点的等距。
证明「截面 s 」确实是同态:s (AB ) = s (A )s (B ) 。若改用别的截面(例如 A ↦ (x ↦ Ax + c ₀) ,固定 c ₀ ≠ 0),它还是同态吗?
把 ℝ2 ⋊φ O(2) 的乘法按定义写开(φ 即矩阵乘 b ),验证它与等距的复合规则一致。
§6 等距的分类:平面上的五类刚体运动
有了结构定理,把平面的等距逐一辨认就成了一道代数练习。每个等距 f (x ) = Ax + b 由两件信息——线性部分 A 与平移部分 b ——决定。而 A 只有三种(恒等、旋转、反射,见 §4),b 再分两种情况,于是等距总共只有五类 。本节把这条分类讲全,并给出一个可直接使用的判别准则:看不动点方程 (I − A )x = b 有没有解、解集是什么形状 。
6.1 一切从不动点方程说起
给定 f (x ) = Ax + b ,一个点 x 称为不动点 ,若 f (x ) = x 。移项得
Ax + b = x ⟺ (I − A )x = b 。 (★)
这是一条线性方程组。「不动点有几处、是什么形状」完全由 (★) 的解集决定:无解、唯一解、一条直线(或全平面)。而这又只看矩阵
I − A 可逆与否,以及
b 是否落在它的像空间里。关键的代数事实是:
I − A 是否可逆,由
A 有没有固定向量决定。
引理 6.1 设
A ∈ O(2)。则
若 A = I ,则 I − A = 0 ,像为 {0},核为整个 ℝ2 。
若 A = R (θ ),θ ≢ 0 (mod 2π ),则 I − A 可逆(A 没有固定向量),唯一解 x 0 = (I − A )−1 b 。
若 A = S (α ) 是反射,设其不动直线(轴)为 L ,则核 ker(I − A ) = L 、像 im(I − A ) = L ⊥ (b 在像中 ⟺ b ⊥ L ⟺ Ab = −b )。
证. ② 若 (I − A )x = 0 即 Ax = x :x 是被 A 固定的向量。旋转 R (θ )(θ ≢ 0)把每个非零向量都转过一个非零角,唯有 0 不动,故核为 {0},I − A 可逆。
③ 反射 S (α ) 在轴 L 上取值恒等(Av = v )、在垂直方向 L ⊥ 上取负(Aw = −w )。于是 (I − A ) 把 L 映为 0、把 L ⊥ 中向量翻倍,故核 L 、像 L ⊥ 。b ∈ L ⊥ ⟺ b 无 L 分量 ⟺ Ab = b ∥ − b ⊥ = −b (因 b = b ⊥ )。∎
6.2 分类定理
定理 6.2(平面等距的分类) 设
f (
x ) =
Ax +
b 是平面等距,
b =
f (0)。则
f 恰为下列五类之一,且判定如下:
类别 线性部分 A 平移部分 b 不动点集
恒等 A = I b = 0整个平面
平移 A = I b ≠ 0空(无不动点)
旋转 A = R (θ ), θ ≢ 0任意 b 恰一个点 x 0
反射 A = S (α )Ab = −b 一条直线(反射轴)
滑移反射 A = S (α )Ab ≠ −b 空(无不动点)
证. 按 A 分三种情形讨论 (★) 的解集。
情形一:A = I 。 此时 (★) 化为 0 · x = b :b = 0 时每个点都是不动点(恒等);b ≠ 0 时无解(平移 x ↦ x + b ,每点都被搬走)。
情形二:A = R (θ ),θ ≢ 0。 由引理 6.1②,I − A 可逆,(★) 恰有唯一解 x 0 = (I − A )−1 b 。把原点搬到 x 0 (令 y = x − x 0 ),则 f 在新坐标下是 y ↦ A y ,即绕 x 0 转过角 θ 的旋转 。
情形三:A = S (α )。 由引理 6.1③,像空间是轴的正交补 L ⊥ 。
· 若 b ∈ L ⊥ (即 Ab = −b ),(★) 有解,解集为一条直线——具体地,沿轴方向平移 L 的整条平行线 L + x 0 (x 0 是任一解)。f 是关于直线 L + x 0 的反射 :沿此线不动、垂直方向反号。
· 若 b ∉ L ⊥ (即 Ab ≠ −b ),(★) 无解,f 无不动点。此时把 b 分解为轴方向与垂直方向之和 b = b ∥ + b ⊥ (b ∥ ≠ 0),则 f = t b ∥ ∘ (t b ⊥ ∘ A ) :括号里是反射(轴为某条直线 ℓ ),再沿 ℓ 的方向平移 b ∥ ≠ 0。这就是滑移反射 (glide reflection),滑移向量 (b + Ab )/2 = b ∥ ,轴为 ℓ 。它没有不动点,但它的平方是平移 f 2 = t 2b ∥ (下面 6.4 说明)。∎
判据速记 从一个等距的矩阵数据出发,判定只需三步:
先看 A → 再看不动点方程 (★) 是否有解 → 再看解集是点还是线。
A = I :b = 0 恒等;b ≠ 0 平移。
A 是旋转(det = 1, A ≠ I ):恒为旋转,中心 x 0 = (I − A )−1 b 。
A 是反射(det = −1):看 b 是否被 A 取反 ——Ab = −b 则反射,否则滑移反射。
6.3 五类运动的几何画像
把五类逐个摆出来,其中三类的名字已经说明了它们的动作,另两类(反射、滑移反射)值得多看一眼。
① 恒等与平移 恒等 id 不动一切点;平移 t b (b ≠ 0)沿固定方向 b 把每点搬走,没有一个点留下。平移是唯一「无不动点且保向」的运动 。
② 旋转 绕中心 x 0 转过角 θ 。它与平移同属保向 SE(2) 一族,区别只在于有没有那个唯一不动点。当 θ = π 时是中心对称(半周旋转):x ↦ 2x 0 − x 。小小的代数事实:两次中心对称的复合是一个平移 (合成 2(x 1 − x 0 ) ),这解释了为什么 SE(2) 里「旋转」与「平移」不能完全分开。
③ 反射 关于一条直线 ℓ 的翻面:ℓ 上每点不动,ℓ 外每点被沿垂直方向翻到对面。反射恒有无穷多 不动点(整条轴),且反向 (det = −1)。一个等距 f (x ) = Ax + b 是反射,当且仅当 Ab = −b (等价地 b ⊥ 原轴方向)。轴的位置:把原点搬到任一解 x 0 后,轴就是过 x 0 且沿 A 的不动方向的直线。
④ 滑移反射 这是最容易被忽略、却最有意思的一类:先关于某直线 ℓ 反射,再沿 ℓ 的方向平移一段非零距离 ,(两者的顺序无关)。走一遍「脚印」:沿 ℓ 走一步、翻个面,再走一步、翻个面…… 得到的正是一串交替朝上的脚印——滑移反射因此得名。它的滑移向量是 (b + Ab )/2 (沿轴),无不动点 ,但有整条「滑移轴」 (被映到自身的直线,点沿它平移)。
例 6.3 在坐标下算三个具体例子(
A 与
b 给出,分类一目了然):
A = R (π /2) (90° 旋转),b = (2, 0)。I − A = ,x 0 = (I −A )−1 b = (1, −1) 。绕 (1, −1) 逆转 90°。旋转 。
A = S 0 (沿 x 轴反射),b = (0, 3)。Ab = (0, −3) = −b ,故反射 ;轴为 y = 3/2 (水平线)。
A = S 0 ,b = (4, 3)。Ab = (4, −3) ≠ −b ,故滑移反射 ;滑移向量 (b +Ab )/2 = (4, 0) (沿 x 轴),滑移轴 y = 3/2 ,且 f 2 = t (8,0) 。
6.4 复合规则:五类如何相生
命题 6.4(滑移反射的平方) 若
f (
x ) =
Ax +
b 且
A 是反射,则
f 2 (x ) = x + (b + Ab ),
即
f 2 =
t b +Ab 。于是
f 是反射 ⟺ b + Ab = 0 ⟺ f 2 = id;否则
f 是滑移反射,其滑移向量为
(b + Ab )/2 。
证. f 2 (x ) = A (Ax + b ) + b = A 2 x + Ab + b 。反射满足 A 2 = I (翻两次回到原处),故 f 2 = t b +Ab 。它是 id 当且仅当 b + Ab = 0。∎
复合表 两条最常用的复合规律(其余可由此推出):
复合 结果
平移 ∘ 平移 平移(向量相加)
旋转 ∘ 旋转 旋转(转角相加);若转角和为 0,则是平移
反射 ∘ 反射(平行轴) 平移
反射 ∘ 反射(相交轴) 绕交点的旋转(转角 = 两轴夹角的两倍)
反射 ∘ 平移 反射或滑移反射
「两次反射 = 一个旋转或平移」这条,是 §4「两个 det = −1 相乘得 det = +1」的几何回声。
思想 五类运动其实有更漂亮的组织方式:保向的三种(恒等、平移、旋转)组成正规子群 SE(2) ,反向的两种(反射、滑移反射)是它的一整个陪集 。而「反向 —— 再反向 —— 回到保向」这条链条,正是决定 E(2)/SE(2) ≅ ℤ2 的幕后推手。分类定理因此不只是「列出五种动作」,它同时把 E(2) 的 ℤ2 结构显影了出来。
平移
旋转
反射
滑移反射
三类保向(SE(2)):恒等、平移、旋转
两类反向:反射、滑移反射 —— 构成 SE(2) 的另一个陪集
反射 ⟺ Ab = −b ⟺ f∘f = id;滑移反射 ⟺ Ab ≠ −b
滑移向量 = (b + Ab)/2(沿滑移轴)
唯一无不动点的保向运动是平移;唯一不固定的反向运动是滑移反射。
图 6-1 五类平面刚体运动一览。上半四幅给出各自的几何动作,下半重申判别准则。
思考题 6
证明:保向等距(SE(2) )只能是恒等、平移、旋转三者之一,绝不出现反射或滑移反射。
给定 A = R (π ) (半周旋转)、b = (3, 5),求旋转中心;再对 A = R (π /3) 重做一次。
一个滑移反射 f :证明 f 2 是平移,f 3 又是滑移反射。画出 f 反复作用在一只「左脚鞋印」上的轨迹。
「两个反射的复合是旋转或平移」,请按两轴的两种位置(平行 vs 相交)分别说明,并与 §4「det 相乘」的证法对照。
§7 E(2) 的子群一瞥:稳定子、有限点群与晶体学限制
结构定理把 E(2) 拆成了两块,但一个群真正的性格往往藏在它的子群 里。本节看三类最重要的子群:固定某一点的稳定子 (它同构于 O(2) ),有限子群(它们必固定一点),以及保持一个周期格子的子群——后者将逼出一条漂亮的「晶体学限制」:平面上能铺满自身的旋转只有 1、2、3、4、6 重,五重对称被算术挡在门外。
7.1 固定一点的子群,就是 O(2)
定义 7.1(稳定子) 设 P ∈ ℝ2 。称 Stab(P ) = { f ∈ E(2) : f (P ) = P } 为点 P 的稳定子 (或固定子群)。
命题 7.2 对任意 P ,Stab(P ) 是 E(2) 的子群,且通过共轭 f ↦ t −P f t P 同构于 O(2)。特别地 Stab(0) = O(2) 。
证. 子群:若 f , g 固定 P ,则 fg (P ) = f (P ) = P ;id 固定 P ;f −1 (P ) = P 。同构:后文证明。设 u = t −P (把 P 搬到原点)。则 f 固定 P ⟺ u f u −1 固定原点 ⟺ u f u −1 ∈ O(2) (约定 5.4)。映射 f ↦ ufu −1 是群同构(共轭恒为同构),把 Stab(P ) 满射到 O(2),故两者同构。∎
换句话说,围绕任何一点的对称动作,与围绕原点的对称动作是同一套字母表,只是换了个书写原点 。§4 关于 O(2) 的一切(旋转、反射、两片之分)立刻搬到任意点。
7.2 有限子群必固定一点
一般群可以没有不动点(平移就是例子),但有限群不行——这是本节最有用的一条,它的证明只用「取平均」这一招。
定理 7.3 设 G ≤ E(2) 是有限 子群。则存在一点 P 使 G ⊆ Stab(P ) (即 G 的每个元素都固定 P )。从而 G 同构于 O(2) 的一个有限子群。
证. 任取一点
x 0 (例如原点),考虑它的
轨道 { g (x 0 ) : g ∈ G } ,令
P 为这些点的
重心 :
P = (1/|G |) Σg ∈ G g (x 0 )。
设
h ∈
G 。因为
g ↦
hg 是
G 到自身的双射,轨道点集在
h 下只被重排,而
h 是
等距 (仿射且线性部分正交),它对「平均」的作用就是把平均映成平均:
h (P ) = (1/|G |) Σg h (g (x 0 )) = (1/|G |) Σg (hg )(x 0 ) = (1/||G| ) Σg ′ g ′(x 0 ) = P 。
(第三个等号只是把求和的指标
g 换成
g ′ =
hg 。)于是每个
h ∈
G 都固定
P 。再用命题 7.2 的共轭把
P 搬到原点,
G 同构于
O(2) 的一个有限子群。
∎
注 7.4 证明里「等距把平均映成平均」这一步,用的是 h 形如 x ↦ Ax + c 这一仿射 性质:平均在仿射映射下保持不变。这也是「有限 ⊂ 有不动点」的根源 ——无限群(如平移群 ℤ )里,「平均」往往发散,结论随之失效。
7.3 有限点群只有 Cn 与 Dn 两家
于是分类有限子群归结为分类 O(2) 的有限子群。结论异常干净:只有两类,正是正 n 边形的对称群。
定义 7.5 对整数
n ≥ 1,令
Cn = { R (2πk /n ) : k = 0, 1, …, n −1 }(n 个旋转,n 阶循环群);
Dn = Cn ∪ s ·Cn (再加上 n 条对称轴上的反射,共 2n 个元素)。
其中
s 是任一反射,
s ·C
n = {
s R (2
πk /
n ) }。C
n 是正
n 边形的
旋转 对称全体,D
n 是它
连同反射 的对称全体。
定理 7.6 O(2) 的有限子群恰为 Cn (n ≥ 1)与 Dn (n ≥ 1)。结合定理 7.3,E(2) 的每个有限子群都共轭于某个 Cn 或 Dn 。
证. 设 G ≤ O(2) 有限。
第一步:G 中的旋转构成循环群 Cn 。 令 H = G ∩ SO(2)(保向元)。若 H = {I },取 n = 1。否则 H 是一堆旋转 R (θ ) ;把每个 θ 取模 2π 落在 [0, 2π ) 中,因为 H 有限,其中有一个最小正角 θ 0 。任取 R (θ ) ∈ H ,做除法 θ = m θ0 + ρ (0 ≤ ρ < θ0 ,m 为整数),则 R (ρ ) = R (θ )R (−m θ0 ) ∈ H ;由 θ0 的最小性只能 ρ = 0。故 θ 是 θ0 的整数倍,H = ⟨R (θ0 )⟩ 是循环群;又 H 有限,θ0 = 2π /n ,H = Cn 。
第二步:若 G 不含反射,则 G = Cn (由第一步)。
第三步:若 G 含反射 s ,则 G = Cn ∪ s Cn = Dn 。 任取 g ∈ G :若 g 保向则 g ∈ Cn ;若反向,则 s −1 g = sg 保向(det = (−1)(−1) = 1),故 sg ∈ Cn ,得 g ∈ s Cn 。于是 G = Cn ⊔ s Cn ,各 n 个元素,共 2n 个。这就是 Dn 。∎
注 7.7(与正 n 边形对上号) Cn 是正 n 边形的保向 对称(只转不翻);Dn 是它的全部 对称(再算上沿 n 条对称轴的翻折)。两个小例子:正三角形的对称群是 D3 (6 个元素,同构于置换群 S3 );正方形的对称群是 D4 (8 个元素)。「平面上有限对称只有两家」这句话,正是本定理。
7.4 晶体学限制:为什么雪花不能五重对称
有限子群的分类没有限制 n ——正 n 边形对每个 n 都有对称群。但若要求对称动作不仅固定一点,还要把整张周期性的平面 (一个格)映回自身,n 就被死死限住了。这就是「晶体学限制」。
定义 7.8(格) 设
v 1 ,
v 2 ∈ ℝ
2 线性无关。集合
Λ = { m v 1 + n v 2 : m , n ∈ ℤ }
称为由
v 1 ,
v 2 生成的
格 (lattice)。它是一张「周期性格点网」,{
v 1 ,
v 2 } 称为一组
基 。
引理 7.9(迹判据) 若旋转 R (θ ) 把格 Λ 映入自身,则 2 cos θ 是整数。
证. 在基 {v 1 , v 2 } 下,R (θ ) 对应一个 2×2 矩阵 B 。因 R (θ ) 把每个格点映成格点,B 的每列都是整数(R (v 1 )、R (v 2 ) 的坐标是整数),故 B 是整矩阵 ,其迹 tr B 是整数。另一方面,矩阵的迹与所选基无关(相似不变量),R (θ ) 在任何直角坐标下的迹都是 2 cos θ ,故 2 cos θ = tr B ∈ ℤ 。∎
定理 7.10(晶体学限制) 若把格映入自身的旋转 R (θ ) 是 2π /n 的整倍角(即 n 重旋转),则 n ∈ {1, 2, 3, 4, 6}。
证. 由引理 7.9,
2 cos(2π /n ) ∈ ℤ 。而
cos(2π /n ) ∈ [−1, 1] ,故
2 cos(2π /n ) ∈ {−2, −1, 0, 1, 2} ,逐一解出
cos(2π /n ) = 1(n =1)、−1(n =2)、0(n =4)、1/2(n =6)、−1/2(n =3)。
(转角取 2
π /
n ∈ (0,
π ] 时对应
n = 1, 2, 3, 4, 6 五值。)
∎
思想 这条限制把一条几何直觉 (「五重对称的瓷砖铺不满平面」)翻译成了一条算术事实 (2cos(2π /5) = (√5−1)/2 ≈ 0.618 不是整数)。雪花的六重对称、蜂巢的六边形,都因为 6 恰好落在允许集里;而五角星、正五边形因此不能成为「铺满平面的砖」。几何的可能与不可能,最终由数论裁决 ——这正是本册反复出现的那条主线的最干净的例子。
格 Λ(周期性格点)
六重旋转:把格映回自身
60°
2cos(2π/n) ∈ ℤ ⟹ n ∈ {1,2,3,4,6}
图 7-1 晶体学限制:只有 60°(六重)、90°(四重)、120°(三重)等少数旋转能把格映回自身。五重(72°)因 2cos72° 不是整数而被排除。
小结 7.11 本节证明了三件事:① 固定一点的子群 ≅ O(2);② 有限子群必固定一点,因而共轭于 Cn 或 Dn ;③ 能保持一个格的旋转只有 1、2、3、4、6 重。 三者串起来,正是「平面上对称现象的全部清单」。
思考题 7
证明 Cn 是 Dn 的正规子群,且 Dn /Cn ≅ ℤ2 。再写出 Dn ≅ Cn ⋊ ℤ2 中的那个作用同态(提示:s R (θ ) s = R (−θ ) )。
为什么 D1 ≅ ℤ2 ?D2 有几个元素?它同构于哪个熟悉的群?
用定理 7.3 证明:E(2) 中不存在含非恒等平移的有限子群。(提示:平移无穷阶。)
把引理 7.9 的论证搬到三维:立方晶格允许的旋转是哪些?为什么正二十面体的五重对称在「周期晶体」里被禁,却能在准晶(quasicrystal)里出现?
§8 望向更远处:从 E(2) 到更广的对称
把 E(2) 的结构定理拿到手上,许多原本各自为政的东西忽然连成一线。本节收几个线头,让这本小册子结束时,读者手里攥着的不是一个孤立的结论,而是一张通往更大世界的车票。
8.1 从平面到空间:E(n)
整册书的证明从头到尾只用到两处「二维性」:内积的极化与 Cauchy–Schwarz,二者在任意维都成立。于是一字不改地把 ℝ2 换成 ℝn ,结构定理照旧。
定理 8.1(一般欧氏群) 对任意
n ≥ 1,
n 维欧氏群满足
E(n ) ≅ O(n ) ⋉ ℝn ≅ ℝn ⋊ O(n ),
每个等距唯一写成
x ↦ Ax + b (
A ∈ O(
n ),
b ∈ ℝ
n )。证明与 §3–§5 逐字相同。
注 8.2 维数一升,O(n ) 的内部结构立刻丰富起来:O(3) 里除了旋转与反射,还有「绕轴旋转」与「转轴的选择」问题;O(n ) 的连通片依旧是两片(det = ±1),但保向的 SO(n ) 不再是交换群(n ≥ 3 时),这与平面上的 SO(2) ≅ U(1) 是 Abel 群形成鲜明对比。「E(2) 交换吗?」答案是:平移之间、旋转之间交换,但旋转与平移之间、以及保向与反向之间一般不交换——这正是半直积而非直积的原因。
8.2 齐次坐标:把「转 + 挪」压进一个矩阵
工程上(机器人位姿、计算机图形学的刚体变换)最爱用的一招,是把等距 x ↦ Ax + b 写成一个 3×3 矩阵的动作:
这把「先旋转再平移」的两个动作
焊成了一步 。顺带得到一个漂亮的实现:
E(2) 同构于
GL(3, ℝ) 中形如上式的子群——
矩阵的矩阵乘法,就是等距的复合 。这也解释了为什么 §5 的乘法规则
t b A = A t A −1 b 会在矩阵乘法里自动生效。
注 8.3(SE(2) 与机器人) 平面刚体运动群 SE(2) 就是机器人在地面行走时「位置 + 朝向」的全部可能状态(位形空间 );它既不是纯平移也不是纯旋转,而是二者的半直积。路径规划、视觉里程计、SLAM 这些工程名词背后,站着同一个结构定理。
8.3 几何=变换群的不变量:Klein 的纲领
最后回望一眼本册的立意。§2 反复强调「等距保住了距离写出的一切」,§6 把等距归成五类,§7 用它们去数对称——这一切其实都在演示 1872 年 Klein 在埃尔朗根提出的一个观念:
Klein 的埃尔朗根纲领 一种几何,就是一个变换群与它保留的不变量。 把变换群取小,几何就变「刚」;取大,几何就变「软」——
E(2) → 保长度、保角 (欧氏几何);
仿射群 → 保共线、保平行(仿射几何);
射影群 → 只保交比 (射影几何)。
变换群越大,能留下的不变量越少,几何越「宽松」。本册研究的
E(2) ,是这条谱系上最「刚」的一端——这也正是它结构最清晰、最容易被彻底讲清的原因。
结语 从 §1 的一个「只带距离的点集」出发,我们用一条关键引理把几何换成了代数,又在 §5 证明了这个代数对象 E(2) 恰是「平移」与「旋转/翻面」的半直积。回头看,这条路径本身就是一次小小的「翻译」:把「图形保持不变」翻译成「方程有解」,把「对称」翻译成「群」,把「能不能铺满」翻译成「一个数是不是整数」。 数学的力量多半来自这种翻译——而 E(2) 是这门翻译手艺最干净的一次示范。
思考题 8
写出 A = R (π /2) 、b = (1, 2) 对应的 3×3 齐次矩阵,用它直接算出 f (0, 0) 与 f (1, 0) 。
验证齐次矩阵的乘法确实复现 t b A 的复合规则,并说明为什么 E(2) 是三维的(作为流形/李群,它有几个参数?)。
按 Klein 纲领:仿射群比 E(2) 大,它多了哪些新「动作」?由此丢失了哪个不变量(长度还在吗)?
用一句话向一个没学过群论的人解释:为什么「平面上翻面的动作」可以被一个叫 ℤ2 的东西记住?
附录 A 两套语言对照表
同一个 E(2) ,可以用三套语言描述。它们说的是同一件事,只是「翻译习惯」不同。下表可以当工具表,读别处文献遇到时对照查阅。
表 A-1 等距的三种写法
矩阵(实坐标) 复数 齐次矩阵(3×3)
素元 x ∈ ℝ2 z ∈ ℂ(x , 1)⊤
保向线性部分 A ∈ SO(2)a ∈ U(1)上左 2×2 块 = A
反向线性部分 A ∈ O(2)− 共轭 z ↦ z 上左 2×2 块 = A
平移部分 b ∈ ℝ2 b ∈ ℂ右上列 = b
动作 x ↦ Ax + b az + b 或 a z + b 矩阵乘向量
复合 (A 1 ,b 1 )(A 2 ,b 2 ) = (A 1 A 2 , A 1 b 2 +b 1 ) 代入相乘 矩阵相乘
判别反射 Ab = −b b + a b = 0—
结构定理 E(2) ≅ ℝ2 ⋊φ O(2) ,φ (A )(b ) = Ab (三套完全等价)
表 A-2 五类运动速查
A 的类型det A 额外条件 类别 不动点集
I +1 b = 0恒等 全平面
I +1 b ≠ 0平移 无
R (θ ) ≠ I +1 — 旋转 一点
S (α )−1 Ab = −b 反射 一条直线
S (α )−1 Ab ≠ −b 滑移反射 无
附录 B 一份可运行的核对脚本
下面这段 Python(只需 numpy )把本册几条主要结论逐条数值核对一遍:五类分类、共轭引理、唯一分解、半直积乘法与等距复合的一致性、以及晶体学限制。它既是「算一遍比读十遍更清楚」的练习,也可当作本册结论的独立体检。建议读者先自己写一遍,再与这份对照。
# e2_check.py —— E(2) 结构与分类的自我核对(需要 numpy)
import numpy as np, math
def rot(t): # 旋转矩阵 R(t)
return np.array([[math.cos(t), -math.sin(t)], [math.sin(t), math.cos(t)]])
def refl(a): # 关于与 x 轴成角 a 的直线的反射 S(a)
c, s = math.cos(2*a), math.sin(2*a)
return np.array([[c, s], [s, -c]])
def compose(f, g): # (A1,b1) 复合 (A2,b2):先 g 后 f
A1, b1 = f; A2, b2 = g
return (A1 @ A2, A1 @ b2 + b1)
def inverse(f): # 正交矩阵的逆 = 转置
A, b = f
return (A.T, -A.T @ b)
def classify(f, tol=1e-9):
A, b = f
if np.allclose(A, np.eye(2), atol=tol):
return "identity" if np.allclose(b, 0, atol=tol) else "translation"
if np.allclose(A @ b, -b, atol=tol):
return "reflection" # 反射:A b = -b
if np.allclose(np.linalg.det(A), 1.0, atol=tol):
return "rotation" # 保向且非恒等
return "glide_reflection" # 反向且 A b 不等于 -b
def fixed_point(f): # 解 (I - A) x = b
A, b = f
M = np.eye(2) - A
if abs(np.linalg.det(M)) < 1e-12:
return None
return np.linalg.solve(M, b)
# ---- 1. 五类各取一例,核对判别准则 ----
assert classify((np.eye(2), np.zeros(2))) == "identity"
assert classify((np.eye(2), np.array([3.0, 4.0]))) == "translation"
assert classify((rot(math.pi/3), np.array([1.0, 2.0]))) == "rotation"
assert classify((refl(0.0), np.array([0.0, 3.0]))) == "reflection"
assert classify((refl(0.0), np.array([4.0, 3.0]))) == "glide_reflection"
print("[1] 五类分类 通过")
# ---- 2. 共轭引理:f t_b f^-1 = t_{A b} 对任意 f、任意 b ----
rng = np.random.default_rng(7)
for _ in range(500):
A = rot(rng.uniform(0, 2*math.pi)) if rng.random() > 0.5 \
else refl(rng.uniform(0, math.pi))
bb = rng.uniform(-5, 5, 2) # 任意平移向量
f = (A, rng.uniform(-5, 5, 2)) # 任意等距
left = compose(compose(f, (np.eye(2), bb)), inverse(f))
assert np.allclose(left[0], np.eye(2), atol=1e-9) # 结果仍是平移
assert np.allclose(left[1], A @ bb, atol=1e-9) # 平移量 = A b
print("[2] 共轭引理 f t_b f^-1 = t_Ab 500 组随机 通过")
# ---- 3. 挪到原点后是正交线性:g(x) = f(x) - f(0) 线性且保内积 ----
for _ in range(500):
A = rot(rng.uniform(0, 2*math.pi)) if rng.random() > 0.5 \
else refl(rng.uniform(0, math.pi))
b = rng.uniform(-5, 5, 2); x = rng.uniform(-5, 5, 2); y = rng.uniform(-5, 5, 2)
g = lambda v: (A @ v + b) - b # 即 A @ v
assert np.allclose(g(x + y), g(x) + g(y)) # 加性
assert np.allclose(g(2.0*x), 2.0*g(x)) # 齐性
assert np.allclose(np.dot(g(x), g(y)), np.dot(x, y)) # 保内积
print("[3] g(x)=f(x)-f(0) 线性且保内积 500 组随机 通过")
# ---- 4. 半直积乘法 = 等距复合 ----
# ℝ² ⋊ O(2) 的乘法:(b1,A1)(b2,A2) = (b1 + A1 b2, A1 A2)
for _ in range(500):
A1 = rot(rng.uniform(0, 2*math.pi)); b1 = rng.uniform(-5, 5, 2)
A2 = refl(rng.uniform(0, math.pi)); b2 = rng.uniform(-5, 5, 2)
semi = (b1 + A1 @ b2, A1 @ A2) # 半直积侧的乘法
comp = compose((A1, b1), (A2, b2)) # 等距侧的复合 (A, b)
assert np.allclose(semi[0], comp[1]) and np.allclose(semi[1], comp[0])
print("[4] 半直积乘法 = 等距复合 500 组随机 通过")
# ---- 5. 晶体学限制:2cos(2π/n) 为整数的 n ----
good = [n for n in range(1, 25)
if abs(2*math.cos(2*math.pi/n) - round(2*math.cos(2*math.pi/n))) < 1e-9]
print("[5] 2cos(2π/n) 为整数的 n =", good, " (应为 [1, 2, 3, 4, 6])")
assert good == [1, 2, 3, 4, 6]
print("全部核对通过")
脚本在读什么
[1] 直接使用了定理 6.2 的判别准则——分类不是背下来的,是算出来的。
[2] 是引理 5.5(共轭引理)的逐字复核:任意等距夹住任意平移,结果仍是平移,且平移量被线性部分改写。这是 T 正规、以及半直积旋钮 φ 的全部来源。
[3] 说明「线性部分」这个名号确有实义:把 f 挪到原点后就剩纯线性。
[4] 是本册主定理的计算版:两个 (向量, 正交矩阵) 按半直积规则相乘,与两个等距直接复合,得到的完全是同一组数据。
[5] 把「雪花为什么六重」化成一个 for 循环——几何的限制,落在数论的地上。
延伸练习
给脚本加一个 f**n (重复复合)函数,验证:滑移反射的平方是平移、三次方又是滑移反射;旋转的 k 次方转角是 kθ 。
加一个函数,输入任意等距后输出它的标准形 (旋转中心、反射轴、滑移轴与滑移向量),并与几何作图对照。
把 refl/rot 换成一般的正交矩阵(用 SVD 从任意 2×2 正交阵采样),看分类是否随 det 自动分片。