本文涉及知识点
计算几何
仿射矩阵的秩
不讨论平移,故仿射矩阵为 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++**实现。
