分享:【高等几何 线性代数】正交矩阵、正交变换、齐次矩阵

整理一篇学习笔记,把看到的一些要点和自己的理解都记下来。

这篇文章涉及知识点

数学 几何

预备知识

正交矩阵:n阶矩阵A,

A

A

T

=

E

,

A

T

AA^T=E,A^T

AAT=E,AT是转置矩阵。1=|E|=

A

A

T

A

=

±

1

|A||A^T| \to |A|= \pm 1

∣A∣∣AT∣→∣A∣=±1。
留意:行列式为1的矩阵,不一定是正交矩阵,如错切(剪切)矩阵。
行列式

±

1

\neq \pm 1

=±1的矩阵B,
旋转对应的矩阵:

{

cos

θ

sin

θ

sin

θ

cos

θ

}

\begin{Bmatrix}\cos\theta & -\sin \theta \\ \sin\theta& \cos\theta \end{Bmatrix}

{cosθsinθ​−sinθcosθ​}
反射对应的矩阵:

{

cos

2

θ

s

i

n

2

θ

sin

2

θ

cos

2

θ

}

\begin{Bmatrix}\cos2\theta &sin 2\theta \\ \sin2\theta& -\cos2\theta \end{Bmatrix}

{cos2θsin2θ​sin2θ−cos2θ​}
错切矩阵:

{

1

k

0

1

}

x

=

x

+

k

y

,

y

=

y

\begin{Bmatrix}1& k \\ 0&1 \end{Bmatrix}即x'=x+ky,y'=y

{10​k1​}即x′=x+ky,y′=y
缩放

{

k

x

0

0

k

y

}

\begin{Bmatrix}kx & 0 \\ 0&ky \end{Bmatrix}

{kx0​0ky​}

2阶正交矩阵和旋转反射

显然旋转矩阵和反射矩阵是正交矩阵。
正交矩阵A=

{

a

b

c

d

}

\begin{Bmatrix}a &b \\ c & d\end{Bmatrix}

{ac​bd​}根据正交的定义:

{

a

b

c

d

}

×

{

a

c

b

d

}

=

{

a

2

+

b

2

a

c

+

b

d

a

c

+

b

d

c

2

+

d

2

}

\begin{Bmatrix}a &b \\ c & d\end{Bmatrix} \times \begin{Bmatrix}a &c \\b & d\end{Bmatrix}=\begin{Bmatrix}a^2+b^2 &ac+bd \\ ac+bd & c^2+d^2\end{Bmatrix}

{ac​bd​}×{ab​cd​}={a2+b2ac+bd​ac+bdc2+d2​}

a

2

+

b

2

=

c

2

+

d

2

=

1

,

a

c

+

b

d

=

0

a^2+b^2=c^2+d^2=1,ac+bd=0

a2+b2=c2+d2=1,ac+bd=0(1)

旋转矩阵一定是正交矩阵

cos

2

θ

+

(

sin

θ

)

2

=

1

sin

2

θ

+

cos

2

θ

=

1

cos

θ

sin

θ

+

(

sin

θ

cos

θ

)

=

0

\cos^2 \theta+(-\sin \theta)^2=1 \\ \sin^2\theta+\cos^2\theta=1\\ \cos\theta\sin\theta+(-\sin \theta \cos \theta)=0

cos2θ+(−sinθ)2=1sin2θ+cos2θ=1cosθsinθ+(−sinθcosθ)=0

反射矩阵一定是正交矩阵

cos

2

2

θ

+

sin

2

2

θ

=

1

sin

2

2

θ

+

(

cos

2

θ

)

2

=

1

cos

2

θ

sin

2

θ

+

(

sin

2

θ

cos

2

θ

)

=

0

\cos^2 2\theta+\sin^2 2\theta=1 \\ \sin^2 2\theta+(-\cos 2\theta)^2=1\\ \cos 2\theta \sin 2\theta+(\sin 2\theta - \cos 2\theta)=0\\

cos22θ+sin22θ=1sin22θ+(−cos2θ)2=1cos2θsin2θ+(sin2θ−cos2θ)=0

正交矩阵一定是旋转矩阵或反射矩阵

a

=

sin

α

,

c

=

sin

β

,

a=\sin \alpha,c=\sin\beta,则

a=sinα,c=sinβ,则

sin

α

sin

β

+

cos

α

cos

β

=

0

\sin \alpha \sin\beta+\cos \alpha\cos \beta=0

sinαsinβ+cosαcosβ=0
根据余弦差公式 cos(α−β)=cosαcosβ+sinαsinβ ,得

α

=

β

±

90

\alpha=\beta \pm 90^\circ

α=β±90∘
如果

β

=

α

+

90

\beta= \alpha+ 90^\circ

β=α+90∘

A

=

{

sin

α

c

o

s

α

sin

(

α

+

90

)

cos

(

α

+

90

)

}

=

{

sin

α

cos

α

cos

α

sin

α

}

A=\begin{Bmatrix}\sin \alpha & cos \alpha \\ \sin(\alpha+90) &\cos(\alpha+90)\end{Bmatrix}=\begin{Bmatrix}\sin \alpha & \cos \alpha \\ \cos \alpha &-\sin \alpha\end{Bmatrix}

A={sinαsin(α+90)​cosαcos(α+90)​}={sinαcosα​cosα−sinα​}

cos

2

θ

替换

sin

α

,

sin

2

θ

替换

cos

α

用\cos 2\theta 替换\sin \alpha,\sin 2\theta替换\cos \alpha

用cos2θ替换sinα,sin2θ替换cosα后,便是反射。
如果

β

=

α

90

\beta= \alpha - 90^\circ

β=α−90∘

c

=

sin

(

α

90

)

=

cos

α

,

d

=

cos

(

a

l

p

h

a

90

)

=

sin

α

c=\sin(\alpha-90)=-\cos \alpha,d=\cos(alpha-90)=\sin \alpha

c=sin(α−90)=−cosα,d=cos(alpha−90)=sinα
即:

A

=

{

sin

α

cos

α

cos

α

sin

α

}

A=\begin{Bmatrix}\sin \alpha & \cos \alpha \\ -\cos \alpha &\sin \alpha\end{Bmatrix}

A={sinα−cosα​cosαsinα​}

α

=

θ

+

90

A

=

{

cos

θ

sin

θ

sin

θ

cos

θ

}

\alpha = \theta + 90 A=\begin{Bmatrix}\cos \theta & -\sin\theta \\ \sin \theta & \cos \theta \end{Bmatrix}

α=θ+90A={cosθsinθ​−sinθcosθ​} 就是旋转。
有限个正交矩阵相乘仍然是正交矩阵,故一个正交矩阵可以表示有限次旋转和反射。

齐次矩阵与平移

令A是二阶正交矩阵,

B

=

{

0

0

}

C

=

{

e

f

}

,

D

=

{

A

B

C

1

}

,

E

=

{

x

,

y

}

B =\begin{Bmatrix}0&0 \end{Bmatrix} ,C =\begin{Bmatrix}e \\ f \end{Bmatrix} ,D= \begin{Bmatrix}A&B\\C&1 \end{Bmatrix},E=\begin{Bmatrix}x,y\end{Bmatrix}

B={0​0​},C={ef​},D={AC​B1​},E={x,y​} 则

{

E

F

}

=

{

E

1

}

×

D

\begin{Bmatrix}E' &F\end{Bmatrix}=\begin{Bmatrix}E &1\end{Bmatrix} \times D

{E′​F​}={E​1​}×D

E

=

E

A

+

C

,

F

=

1

E'=EA+C,F=1

E′=EA+C,F=1即E’=E乘以正交矩阵,再加上平移。即齐次矩阵支持旋转反射和平移。C可以表示有限次平移。
故齐次矩阵可以表示任意有限次旋转、反射、平移。
F必须恒为1,否则相同的C平移量不同。
留意:齐次矩阵不是3阶正交矩阵。
齐次矩阵可以拆分两个矩阵相乘,B是零矩阵用0表示:

D

=

{

A

0

0

1

}

×

=

{

1

0

C

1

}

D=\begin{Bmatrix}A&0\\0&1 \end{Bmatrix} \times=\begin{Bmatrix} 1&0 \\C & 1 \end{Bmatrix}

D={A0​01​}×={1C​01​}

任意仿射操作都存在等效操作,第一步缩放最后一步平移

如果不是后面不是平移则交换

2阶矩阵A代表其它操作,v代表平移,P表示原始点,P’表示变换后的点。
P’=PA+v
(P+v)A-vA+v= PA+v。
即交换顺序后补偿一个v-vA。

先错切缩放反射是缩放的前一操作则交换两者顺序并增加一个平移

A是任意二阶矩阵,B是二阶缩放矩阵。

A

B

=

{

a

b

c

d

}

{

s

x

0

0

s

y

}

=

{

a

s

x

b

s

y

c

s

x

d

s

y

}

AB=\begin{Bmatrix}a&b\\c&d\end{Bmatrix}\begin{Bmatrix}s_x&0\\0&s_y\end{Bmatrix}=\begin{Bmatrix}as_x&bs_y\\cs_x&ds_y\end{Bmatrix}

AB={ac​bd​}{sx​0​0sy​​}={asx​csx​​bsy​dsy​​}

B

A

=

{

s

x

0

0

s

y

}

{

a

b

c

d

}

=

{

s

x

a

s

x

b

s

y

c

s

y

d

}

BA=\begin{Bmatrix}s_x&0\\0&s_y\end{Bmatrix}\begin{Bmatrix}a&b\\c&d\end{Bmatrix}=\begin{Bmatrix}s_xa&s_xb\\s_yc&s_yd\end{Bmatrix}

BA={sx​0​0sy​​}{ac​bd​}={sx​asy​c​sx​bsy​d​}
则 AB=BA+

{

0

,

b

s

y

b

s

x

c

s

x

c

s

y

0

}

\begin{Bmatrix}0,&bs_y-bs_x\\cs_x-cs_y&0\end{Bmatrix}

{0,csx​−csy​​bsy​−bsx​0​}

总结

通过操作后,缩放在最前面,平移子最最后面。两个缩放可以合并成一个缩放,故顶多只有一个缩放,在最前面;两个平移可以合并成一个平移,故顶多一个平移,在最后面。
反射和错切解析成旋转缩放,那么整个操作就只有缩放旋转平移,按上述操作移动操作顺序后,最多三步:缩放旋转平移。
工程场景通常是均匀缩放,且缩放倍数为正。
典型应用:自来水管是否完全相同,数学描述两条折线能否通过旋转平移重合。连通无环图,枚举第二棵树的叶子Left2和第一个棵树的第一个叶子节点Leaf1是否对应。令两者的相邻的端点分别为N2,N1。则

v

1

=

L

e

a

f

2

N

2

v

1

=

L

e

a

f

1

N

1

的夹角就是旋转角度

v1=\vec{Leaf2N2}和v1=\vec{Leaf1N1}的夹角就是旋转角度

v1=Leaf2N2

​和v1=Leaf1N1

​的夹角就是旋转角度,

L

e

f

t

1

L

e

f

t

2

\vec{Left1 Left2}

Left1Left2

​就是平移的向量。
如果容许均匀缩放,则缩放系数是

v

1

v

2

\frac{ |v1|}{|v2|}

∣v2∣∣v1∣​

展望

下面的知识点,过于复杂,需要学习专门课程。
任意可逆矩阵2阶方阵都可以分解成

A

=

R

(

θ

)

.

S

.

H

R

(

θ

)

是旋转矩阵,

S

:对角缩放矩阵,

H

:

错切矩阵

(

上三角、下三角

)

A=R(\theta).S.H,R(\theta)是旋转矩阵,S:对角缩放矩阵,H:错切矩阵(上三角、下三角)

A=R(θ).S.H,R(θ)是旋转矩阵,S:对角缩放矩阵,H:错切矩阵(上三角、下三角)通过QR分解或极分解。
QR 分解 《数值线性代数》 / 《矩阵计算》 也是《线性代数》的进阶内容
极分解 《矩阵论》 / 《高等代数》 的专题 也是《数值线性代数》中矩阵分解的一部分
错切矩阵可以通过“旋转 + 非均匀缩放 + 反向旋转”精确表示。

反射矩阵可以通过“旋转 + 非均匀缩放 + 反向旋转”精确表示。

扩展阅读

算法为骨,CAD为魂亲士工具箱:支持中望CAD2024、AutoCad2013及以上,多年承接CAD工程的精华开发中遇到的麻烦,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》《数学》。学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作活到老,学到老。明朝中后期,大约50%的进士能当上堂官(副部及更高);能当上堂官的举人只有十余人。子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法C++实现。


这篇笔记就先到这里,后面用到新的思路或者发现有问题再补充。

评论 (0)

暂无评论