二维坐标基本变换(平移、旋转、缩放、镜像、阵列) | 您所在的位置:网站首页 › 坐标图形旋转 › 二维坐标基本变换(平移、旋转、缩放、镜像、阵列) |
诸如图像、模型等的基本变换,实际上都是点坐标的变换,通过矩阵,可以非常方便的达到这个目的。在下文仅介绍二维坐标变换原理。 首先,定义点类如下: //定义点类,亦可表示向量 class vec2 { public: float v[2];//v[0]为横坐标,v[1]为纵坐标 vec2(){} ~vec2(){} //构造函数,例vec2 p(0,0);表示构造p点坐标为(0,0) vec2(const float &x, const float &y){v[0] = x; v[1] = y;} //重载[],如vec2 p ;p[0]即表示x坐标值,p[1]表示y坐标值 float &operator[] (int i) { return v[i]; } const float &operator[] (int i) const { return v[i]; } };注意,为了形式统一,变换矩阵应统一为3*3阶,同理,对于三维坐标变换矩阵应是4*4阶。关于矩阵的表示,实际上便是一个二维数组,其相关运算可以直接利用Eigen库,具体如何配置就不在此赘述。矩阵如何定义可参考如下,注意矩阵的初始化不应该是全部元素为0,而是对角元素为1,其余为0,即单位矩阵E. class Matrix2D { public: double A[3][3]; } ;对于一点 我们将这个矩阵称为原始矩阵 对于平移我们需要知道一个平移的方向和平移的距离,因此可以通过一个向量表示这2个量,即
平移后的坐标即为 对于旋转我们需要的是一个弧度θ,则旋转矩阵 若只是乘上 旋转后的坐标即为 对于缩放我们需要的是一个缩放系数t,则缩放矩阵 若输入缩放中心 缩放后的坐标即为 对于镜像,我们需要输入对称轴,即输入2个点p,q,但实际上计算需要的是对称轴的法向量 另外就是需要一个表示对称轴位置的点,在输入的对称轴2点中随便取一点即可,表示为 镜像后的坐标即为 阵列可以分为环形阵列和方向阵列。 1.环形阵列 和旋转变换类似,输入阵列中心 环形阵列的每个对象坐标为 2.方向阵列 和平移变换类似,输入2个点,表示阵列的方向,实际上我们需要的是单位方向向量 方向阵列的每个对象坐标为 在MFC中实现的效果如下图所示: |
CopyRight 2018-2019 实验室设备网 版权所有 |