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

本文涉及知识点

数学

计算几何

仿射矩阵的秩

不讨论平移,故仿射矩阵为 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++**实现。

相关推荐
李老师讲编程1 分钟前
C++信息学奥赛练习题-杨辉三角
数据结构·c++·算法·青少年编程·信息学奥赛
qq_2965446517 分钟前
短视频下载教程,抖音B站视频下载
c++
2201_7569890923 分钟前
C++中的事件驱动编程
开发语言·c++·算法
2301_8223776535 分钟前
模板元编程调试方法
开发语言·c++·算法
啟明起鸣1 小时前
【C++ 性能提升技巧】C++ 的引用、值类型、构造函数、移动语义与 noexcept 特性,可扩容的容器
开发语言·c++
故以往之不谏1 小时前
函数--值传递
开发语言·数据结构·c++·算法·学习方法
2301_811232981 小时前
低延迟系统C++优化
开发语言·c++·算法
txinyu的博客2 小时前
解析muduo源码之 ThreadLocal.h
c++
橘子师兄2 小时前
C++AI大模型接入SDK—ChatSDK封装
开发语言·c++·人工智能·后端
2401_857683542 小时前
C++中的原型模式
开发语言·c++·算法