【计算几何 线性代数】仿射矩阵的秩及行列式

本文涉及知识点

数学

计算几何

仿射矩阵的秩

不讨论平移,故仿射矩阵为 2 × 2 2\times 2 2×2。

矩阵的秩:高斯消元后,非0行的数量。

秩为0(0矩阵),任意点变换后都是(0,0)。

秩为1,令矩阵为 ( a b k × a k × b ) \begin{pmatrix}a & b \\ k\times a& k\times b \\ \end{pmatrix} (ak×abk×b)
x ′ = a × x + b × y , y ′ = k × a × x + k × b × y x'=a \times x+b \times y,y'=k\times a \times x + k\times b \times y x′=a×x+b×y,y′=k×a×x+k×b×y

如果k =0,则y=0。否则,变换后的点必定在直线 y=kx上。

仿射变换的面积变化

将图像划分成无数个边长无穷小的正方形。对于任意一个小正方形,移动坐标轴原点,旋转缩放坐标轴,使得此小正方形的坐标左下角在(0,0),右上角在(1,1)。

P1(0,0)变换后仍然是(0,0)。

P2(0,1)变换后是(b,d)。

P3(1,1)变换后(a+b,c+d)。

P4(1,0)变换后是(a,c)。
P ⃗ 1 P 2 = ( b , d ) , P ⃗ 4 P 3 = ( b , d ) \vec P1P2=(b,d),\vec P4P3=(b,d) P 1P2=(b,d),P 4P3=(b,d)故P1P2和P3P4平行。
P ⃗ 2 P 3 = ( a , c ) , P ⃗ 1 P 4 = ( a , c ) \vec P2P3=(a,c),\vec P1P4=(a,c) P 2P3=(a,c),P 1P4=(a,c)故P2P3和P1P4平行。

即变换后P1P2P3P4是平行四边形,通过叉乘求其有向面积为ac-bd。即仿射矩阵的行列式。

如果有向面积为负,则说明向量 P ⃗ 1 P 2 到 P ⃗ 1 P 3 \vec P1P2到\vec P1P3 P 1P2到P 1P3的方向发生变化。

|P1P2|变换前长度为1,变换后长度为 b b + d d \sqrt{bb+dd} bb+dd 。

|P1P3|变换前长度为1,变换后长度为 a a + c c \sqrt{aa+cc} aa+cc 。

故线段的长度变化不成固定的倍数。

了解雅可比矩阵

存在映射F,将 R n → R m \R^n \rightarrow \R ^m Rn→Rm,即输入是n个元素的向量,输出是m个元素的向量。根据x求输出的第r个元素的过程是 F r F_r Fr。

雅可比矩阵 是m行n列矩阵。 J F ( x ) J_F(x) JF(x)的r行c列元素是 ∂ F r ∂ x c \frac{ \partial F_r}{ \partial x_c} ∂xc∂Fr。

偏导数,就是除 x c x_c xc外,其它x都是常量且不变,求导。

由于线性变换的偏导数是常量,故 ∀ x 1 , x 2 , J F ( x 1 ) = J F ( x 2 ) \forall x1,x2,J_F(x1)=J_F(x2) ∀x1,x2,JF(x1)=JF(x2),且雅可比矩阵就是原始矩阵。

n=m=2,雅可比矩阵的行列式的决定值就是面积的变化倍数。n=m=3,就是体积变化的倍数。证明过程,对我而言比较复杂,略过。

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
员工说:技术至上,老板不信;投资人的代表说:技术至上,老板会信。
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步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++**实现。

相关推荐
xu_yule2 小时前
算法基础-背包问题(01背包问题)
数据结构·c++·算法·01背包
特立独行的猫a2 小时前
C++ Core Guidelines(C++核心准则):2025现代C++开发关键要点总结
c++·core guidelines·核心准测
Joy-鬼魅2 小时前
VC中共享内存的命名空间
c++·vc·共享内存命名空间
dragoooon343 小时前
[C++——lesson30.数据结构进阶——「红黑树」]
开发语言·数据结构·c++
云泽8083 小时前
C++ STL 栈与队列完全指南:从容器使用到算法实现
开发语言·c++·算法
历程里程碑3 小时前
C++ 17异常处理:高效捕获与精准修复
java·c语言·开发语言·jvm·c++
xu_yule4 小时前
算法基础(背包问题)—分组背包和混合背包
c++·算法·动态规划·分组背包·混合背包
你的冰西瓜4 小时前
C++中的vector容器详解
开发语言·c++·stl
刻BITTER4 小时前
C++ 获取任意整数类型的最大、最小值和长度
开发语言·c++