参考笔记:
3D点云变换(平移、旋转、缩放)以及python实现_三维点云旋转-CSDN博客
[计算机视觉] 什么是齐次坐标?为什么要引入齐次坐标?-CSDN博客
本文详细讲解了从两种变换方式:"坐标系动,点不动" 和 "点动,坐标系不动" 的 2D、3D 坐标变换。通过公式推导展示了 旋转变换、缩放变换、平移变换 的矩阵表示,在三维坐标变换中并用了点云作为案例演示,给出了 python 实现方法
三维坐标变换的前置内容(必看):
目录
1.坐标变换的两种方式
无论是二维坐标变换还是三维坐标变换,都存在着两种变换方式:
① 坐标系动,点不动(被动变换)
② 点动,坐标系不动(主动变换)
两种方式分别对应不同的应用场景
2.二维坐标变换
2.1 旋转变换
2.1.1 坐标系动,点不动
如下图所示,在二维平面 上,由绿色坐标系逆时针旋转 θ° 到蓝色坐标系。可以看到,点 A 是没有移动的,变化的是点 A 分别在前后两个坐标系中的坐标值,即从
变换到了
如图中黑色虚线的分解方式所示,通过矢量分解(类似于物理中力、速度等矢量的分解),将绿色坐标系中的 分别分解到蓝色坐标系的 x 轴和 y 轴,可以得到:
看到这个公式可能很多人会懵,而且我看很多博客都没有讲解只是给出公式。这里我用图片解释一下
首先是 的计算公式解释,如下图所示:
然后是 的计算公式解释,如下图所示:
🆗,解释清楚后,我们可以把这两个等式用矩阵来表示,如下图所示:
其中 称为二维情形下的旋转变换矩阵,它表示了 A 点在前后坐标系中的值的映射关系
2.1.2 点动,坐标系不动
如下图所示,在二维平面 上,点
沿着逆时针旋转 θ° 得到
,可以看到坐标系是没有移动的,变化的是 A 点在该坐标系中的坐标值,即从
变换到了
可以得到,变换公式如下:
展开可得:
又因为:
所以:
其矩阵形式:
其中 称为二维情形下的旋转变换矩阵,它表示了在当前坐标系下
到
的旋转变换关系
的映射关系
2.1.3 两种旋转变换矩阵比较
我们这里分别看一下 "坐标系动,点不动" 和 "点动,坐标系不动" 的旋转变换矩阵,如下所示:
两个矩阵的行列式均为: ,因此都为可逆矩阵。而通过线性代数求逆矩阵的知识可得:
即这两种情况下的旋转变换矩阵是互逆的
2.2 缩放变换
2.2.1 坐标系动,点不动
在二维平面 中,设有一点
,缩放向量为
,其中
表示 x 轴长度的缩放因子,
表示 y 轴长度的缩放因子,且规定
可以看到,点 A 是没有移动的,变化的是点 A 分别在前后两个坐标系中的坐标值,即从 缩放变换到了
需要特别注意的是:在 "坐标系动,点不动" 的情况下,如果 轴坐标轴的长度扩大
倍,则在新坐标值中点的
值就要缩小
倍;如果
轴坐标轴的长度缩小
倍,则在新坐标轴中点的
值就要扩大
倍(大家可以自己好好仔想想是不是这个道理);
轴同理,这里不再赘述
所以变换公式如下:
转换为矩阵表示,如下:
其中 称为二维情形下的缩放变换矩阵,它表示了 A 点在前后坐标系中的值的映射关系