座标系线性变换

线性变换基础(3D数学编程中,形式转换经常是错误的根源,所以这部分大家要多多思考,仔细运算)

一般来说,方阵(就是行和列都相等的矩阵)能描述任意的线性变换,所以后面我们一般用方阵来变换

其实简单的说,线性变换就是保留直线和平行线,原点没有移动,而其他的几何性质,如长度、角度、面积和体积可能被改变

视觉的直观角度上讲,线性变换可能“拉伸”坐标系,但不会“弯曲”和“卷折”坐标系(毕竟是“线性”的变换嘛,不然可能就叫做曲线变换了)。

下面先引入一个直观的变换例子

先在单位基向量处画一个茶壶

 

然后我们给出一个变换矩阵

然后我们让这个茶壶的坐标按上面的矩阵经行变换

这个变换包含z轴顺时针旋转45°和不规则缩放

 

在讨论具体的变换之前,还必须要搞清楚,我们到底要变换什么。在这里我们所提到的变换,其内容主要就两个:变换物体变换坐标系

变换物体,意味着变换物体上所有的点,这这点将被移动到一个新的位置,我们仍使用同一坐标系来描述变换前和变换后的位置。

变换坐标,意味着物体上的点实际没有移动,我们只是在另外一个坐标系中描述它的位置而已。

 

其实这两种变换实际上是等价的,将物体变换一个量等价于将坐标系变换一个相反的量

ps:下面我们实现的变换都是物体变换

 

旋转

2D中绕原点旋转的参数只有一个:角度θ,它描述了旋转量。(逆时针旋转经常被认为是正方向,顺时针方向时负方向

根据几何知识我们可知旋转矩阵应该为

 

在3D场景中,一般都是绕轴旋转,并且在绕轴旋转θ°时,必须知道哪个方向别认为“正”,哪个方向被认为“负”。

在左手坐标系中定义此方向的规则为左手规则

 

 

左手坐标系
从哪里看正方向负方向
从轴的负端点向正端点看逆时针顺时针
从轴的正端点向负端点看顺时针逆时针

 

绕轴变换中最为常见的就是绕坐标轴旋转

X轴

 

 可得到变换矩阵

同理得到Y轴和Z轴的变换公式

Y轴

Z轴

ps:对于任意轴的旋转,可能等我们学完了平移,将任意轴平移旋转至坐标轴变换后在移后即可。

 

缩放

通过比例因子K按比例变大或缩小来缩放物体。

如果在各方向应用同比例的缩放,且沿原点“扩张”物体,那么就是均匀缩放。(均匀缩放可以保持物体的角度和比例不变)

如果需要挤压或拉伸物体,在不同方向应用不同的因子即可,这称作非均匀缩放。(非均匀缩放时,物体角度将发生变化)

ps:如果 |k|<1 ,物体将变短,如果 |k|>1,物体变长。如果 |k|=0,就是正交投影。

最简单的缩放方法是沿着每个坐标轴应用单独的缩放因子。

2D中有两个缩放因子,。缩放矩阵为:

缩放实例

对于3D,需要增加第三个缩放因子,3D缩放矩阵:

 

正交投影(平行投影)(投影意味着降维操作)

有一种投影方法是在某个方向上用零作为缩放因子。这种情况下,所有点都被拉平至垂直的轴或平面上,这种投影称作正交投影

最简单的投影方式是向坐标轴或平面投影。

在2D环境下,向 x 轴投影

    

在2D环境下,向 y 轴投影

 

在3D环境下,向 xy 平面投影、向xz平面投影和向yz平面投影的矩阵

正交投影效果图

 

 

 

镜像(反射)

镜像是一种变换,起、其作用是将物体沿直线,或平面翻折。

ps:一个物体只能镜像一次,如果再次镜像物体将翻回正面,这和在原位置旋转物体的效果一样了。

在2D环境下,沿任意轴镜像的矩阵为

其中向量n为任意轴方向的单位向量,例如如果任意轴为x轴,则n=(1,0),所以关于x轴的镜像矩阵为

在3D环境下,沿任意轴镜像的矩阵为

 

 

切变

切变是一种坐标系“扭曲”变换,非均匀地拉伸它。这是一种很少用到的变换,它也被称扭曲变换

切变的时候角度会发生变化,但是令人惊奇的是面积体积保持不变

切变的基本实现思想是,某一坐标的乘积加到另一个坐标上去:x' = x + sy

 

在2D环境下,x坐标根据坐标y以参数s控制切变方向和向量的切变矩阵

  

在2D环境下,y坐标根据坐标x以参数s控制切变方向和向量的切变矩阵

3D坐标中的切变矩阵两个坐标轴别另一个坐标轴改变的矩阵

### 坐标变换与坐标变换的概念及实现方法 #### 一、概念区分 坐标变换和坐标变换虽然名称相似,但在实际应用中有显著的区别。 1. **坐标变换** 坐标变换是指将某个固定点的坐标从一个坐标表示为另一个坐标的过程。例如,在SLAM技术中,通常会涉及将地图上的静态点从局部传感器坐标(如激光雷达或相机坐标)转换到全局的世界坐标中[^1]。这种操作的核心在于保持目标点的位置不变,仅改变其描述方式。 2. **坐标变换** 坐标变换则关注的是不同坐标之间相对位置的变化。它定义了一个坐标相对于另一坐标的姿态调整过程,即旋转和平移参数。例如,当讨论从坐标A转变为坐标B时,实际上是让坐标A经历一列旋转变换以及可能存在的平移来匹配坐标B的方向和原点位置[^2]。 两者的关可以总结如下:如果考虑从坐标A至坐标B的一次坐标变换,这实际上相当于执行了一次反向的坐标变换——即将坐标B视为初始状态并将其映射回坐标A的状态下所对应的逆运算结果。 #### 二、数学基础 无论是哪种类型的变换都离不开线性代数的支持,尤其是齐次坐标的引入极大地简化了几何计算流程: - 对于简单的二维平面情况下的任意一点(x,y),我们可以通过增加额外维度z=1形成三维列向量[x y 1]^T来进行统一处理; - 当扩展到三维空间时同样适用此原则,并且加入更多自由度用于表征角度变化等复杂场景需求。 具体而言, 假设存在两个直角笛卡尔坐标统C1={O₁,X₁,Y₁,Z₁} 和 C2={O₂,X₂,Y₂,Z₂}, 它们之间的相互关可通过刚体运动模型描述出来: \[ P_{c2}=R\cdot P_{c1}+t \] 其中\( R \)代表3×3大小正交矩阵反映纯旋转成分;而矢量 \( t=[tx ty tz ]^{T}\in R³\) 则体现了纯粹位移贡献部分[^3]. 上述方程组表达了如何利用特定形式的变换矩阵完成由源坐标指向目的坐标的数据迁移工作. #### 三、编程实践 (Python 示例) 下面展示一段基于NumPy库实现的基础版本代码片段用来演示两种常见情形下的数值模拟效果对比分析: ```python import numpy as np def create_transformation_matrix(rotation=np.eye(3), translation=np.zeros((3,))): """ 构建完整的仿射变换矩阵. 参数: rotation -- 3x3 的旋转矩阵,默认单位阵表明无任何方向偏转发生。 translation -- 长度为3的一维数组指定沿各轴单独移动距离,默认零意味着停留在当前位置上不做变动。 返回值: T -- 综合后的4x4规格整体变换矩阵结构对象实例化产物。 """ T = np.block([[rotation,translation.reshape(-1,1)], [np.zeros((1,3)),[[1]]]]) return T if __name__ == "__main__": # 定义简单例子验证逻辑正确与否 rot_example = [[0,-1,0], [1, 0,0], [0, 0,1]] trans_example = [-5,8,7] transf_matr = create_transformation_matrix(rot_example,trans_example) print("Transformation Matrix:\n",transf_matr) ``` 以上脚本首先封装好创建通用型四阶增广变换矩阵的功能函数`create_transformation_matrix()` , 接着设置一组人为给定的具体输入样本数据组合测试最终输出表现形态特征是否满足预期设定标准要求条件限制范围之内即可. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值