矩阵变换与图片平移,旋转,缩放的原理
2013-04-01 12:25
260 查看
矩阵这个东西看起来很简单,但是我觉得要把它理解成某一种东西(比如说变换)还是有点难度。我在这个问题上面就困扰了很久。某一天,脑袋里面突然灵光一闪,貌似理解了一些,心中甚是欢喜,隧写下这篇文章,以至于以后有所帮助。
1.对矩阵的理解
我个人觉得矩阵就是一个用括号括起来的东西,除此之外没有什么感觉。但是转换这个东西就有点意思了。
比如说:我可以把它看成是一个函数,是某种准则或者是一个魔法箱。
T(X)=AX;
这就是一个矩阵转换,左边是一个函数(我是这样看的),右边是一个矩阵与向量X相乘。
先解释一下左边:
T(X)------------------我们知道函数是一种映射关系,我们给一个X值,经过这个函数的计算我们就可以得到另一个值。
同理,我们给一个向量X给这函数,那么这个函数会给一个输出的值(假设这个值也是向量)。经过这样变化,那么我们
可以这样理解,X进入T这个变换函数变成了另外一个X',我认为这就是T对X进行的一次变换。不知道我理解的对不对,如果不对,希望高手指教
理解了变换了,接下来举一个例子:
例如一个向量X=(1,2);我不知道这个具体的变换函数是什么,就用T表示
假设X经过T变换后,会得到另外一个向量X'=(5,6);变换这个概念解决了,接下来就是怎么获得这个变换函数
2获取变换函数:
其实这个变换函数就是A矩阵。因为T(X)=AX;
很容易证明符合这个变换的矩阵是唯一,也就是说你求出来的A是只有一个的。
下面给出证明:
证明:T(X)=AX;A的唯一性;
X=IX;I是单位矩阵-------------------------X=[e1,......................en]X
[e1,......................en]是向量X的正交基底;
X=x1*e1+x2*e2+......................xn*en;
等式两边同时线性变换;
T(X)=T(x1*e1+x2*e2+......................xn*en);
=>T(X)=X[T(e1)...................T(en)]
所以A就是[T(e1)...................T(en)];
证明过程完毕。
有证明结果可知A就是[T(e1)...................T(en)];
那么我们想对X做变换,那我们先对这个基底做变换,求得A矩阵,然后就可以求得X'=AX;
变换之后的向量,
举个例子:
比如说我想把一下向量都旋转30度
a=(1,2); b=(3,4);c=(0,1);
根据上面的的说明,我首先得找到这些向量的正交基底,很显然是e1=(1,0);e2=(0,1);
然后我们对基底做变换,旋转30度,做顺时针旋转。
T(e1)=(cos(PI/6),-sin(PI/6)) T(e1)=(sin(PI/6),cos(PI/6));
所以A就是
cos(PI/6) sin(PI/6)
-sin(PI/6) cos(PI/6)
把以上向量a,b,c与A相乘一下,就获得了a,b,c旋转30的向量。
好了,写完了。
1.对矩阵的理解
我个人觉得矩阵就是一个用括号括起来的东西,除此之外没有什么感觉。但是转换这个东西就有点意思了。
比如说:我可以把它看成是一个函数,是某种准则或者是一个魔法箱。
T(X)=AX;
这就是一个矩阵转换,左边是一个函数(我是这样看的),右边是一个矩阵与向量X相乘。
先解释一下左边:
T(X)------------------我们知道函数是一种映射关系,我们给一个X值,经过这个函数的计算我们就可以得到另一个值。
同理,我们给一个向量X给这函数,那么这个函数会给一个输出的值(假设这个值也是向量)。经过这样变化,那么我们
可以这样理解,X进入T这个变换函数变成了另外一个X',我认为这就是T对X进行的一次变换。不知道我理解的对不对,如果不对,希望高手指教
理解了变换了,接下来举一个例子:
例如一个向量X=(1,2);我不知道这个具体的变换函数是什么,就用T表示
假设X经过T变换后,会得到另外一个向量X'=(5,6);变换这个概念解决了,接下来就是怎么获得这个变换函数
2获取变换函数:
其实这个变换函数就是A矩阵。因为T(X)=AX;
很容易证明符合这个变换的矩阵是唯一,也就是说你求出来的A是只有一个的。
下面给出证明:
证明:T(X)=AX;A的唯一性;
X=IX;I是单位矩阵-------------------------X=[e1,......................en]X
[e1,......................en]是向量X的正交基底;
X=x1*e1+x2*e2+......................xn*en;
等式两边同时线性变换;
T(X)=T(x1*e1+x2*e2+......................xn*en);
=>T(X)=X[T(e1)...................T(en)]
所以A就是[T(e1)...................T(en)];
证明过程完毕。
有证明结果可知A就是[T(e1)...................T(en)];
那么我们想对X做变换,那我们先对这个基底做变换,求得A矩阵,然后就可以求得X'=AX;
变换之后的向量,
举个例子:
比如说我想把一下向量都旋转30度
a=(1,2); b=(3,4);c=(0,1);
根据上面的的说明,我首先得找到这些向量的正交基底,很显然是e1=(1,0);e2=(0,1);
然后我们对基底做变换,旋转30度,做顺时针旋转。
T(e1)=(cos(PI/6),-sin(PI/6)) T(e1)=(sin(PI/6),cos(PI/6));
所以A就是
cos(PI/6) sin(PI/6)
-sin(PI/6) cos(PI/6)
把以上向量a,b,c与A相乘一下,就获得了a,b,c旋转30的向量。
好了,写完了。
相关文章推荐
- 基于Android 实现图片平移、缩放、旋转同时进行
- Android -- 图片处理, 画画板,缩放,旋转,平移,镜面,倒影,图片合成,颜色处理
- Android单点触控实现图片平移、缩放、旋转功能
- Android单点触控对图片进行平移,缩放,旋转操作
- 自学QT之图片操作(缩放、平移、扭曲和旋转等)
- 图片缩放,旋转,平移,镜面效果,倒影效果,图片合成
- Android单点触控技术,对图片进行平移,缩放,旋转操作
- 组合属性动画:缩放、渐变 平移和旋转+ImageLoader加载图片+MVP+OKhttp+拦截器+请求网络数据二级列表购物车
- VS2010-MFC:用OpenGL在对话框中的PictureControl(图片控件)中绘制三维模型,可旋转、平移、缩放,可用于三维模型的预览
- Android 利用Matrix实现图片随手指平移、旋转、缩放
- Qt绘图,显示图片图像,平移,缩放,旋转和扭曲图片的方法
- 自定义控件: android中手势操作图片的平移、缩放、旋转 并保存
- Android 图片的平移、缩放、倒影、旋转实现
- 创建图片内存副本和旋转,缩放,平移,镜面,倒影
- 【转】 Qt绘图,显示图片图像,平移,缩放,旋转和扭曲图片的方法 声明:本
- Android 利用Matrix实现图片随手指平移、旋转、缩放
- Android 通过Matrix来对图片进行缩放,旋转和平移
- Android单点触控技术,对图片进行平移,缩放,旋转操作
- 图像处理中的旋转、平移、缩放——仿射变换的原理和优化
- wpf 图片平移、旋转和缩放