Matrix学习3、Matrix的基本三种变换之Translation、Skew、Rotate

原创 2012年06月04日 10:02:02

Matrix的3*3矩阵:

    {MSCALE_X,MSKEW_X,MTRANS_X,  
    MSKEW_Y,MSCALE_Y,MTRANS_Y,  
    MPERSP_0,MPERSP_1,MPERSP_2}  

一、平移(Translation)变换

Translation的变换是通过改变MTRANS_X和MTRANS_Y来实现的,Matrix提供了三个方法

preTranslate(float dx, float dy)

setTranslate(float dx, float dy)

postTranslate(float dx, float dy)

平移的变换特别简单,相信学过数学的人都知道,不说了。


二、扭曲(Skew)变换

skew变换是通过改变MSKEW_X,和MSKEW_Y来实现的,Matrix提供了下面的几个方法来设置skew

        matrix.setSkew(kx, ky)
        matrix.setSkew(kx, ky, px, py)
        matrix.preSkew(kx, ky)
        matrix.preSkew(kx, ky, px, py)
        matrix.postSkew(kx, ky)
        matrix.postSkew(kx, ky, px, py)

经过自己测试,发现skew的变换是如下的规律:

点(x,y)经过skew(kx,ky,px,py)变换之后,坐标为(kx*(y-py)+px,ky*(x-px)+py),如果,px和py没有,则默认为都为0。

图片变换的效果




三、旋转(Rotate)的变换

    {MSCALE_X,MSKEW_X,MTRANS_X,  
    MSKEW_Y,MSCALE_Y,MTRANS_Y,  
    MPERSP_0,MPERSP_1,MPERSP_2}  
Rotate的变换是通过设置4个值来改变的,MSCALE_X,MSKEW_X,MSKEW_Y,MSCALE_Y来进行变换的,有如下的方法

        matrix.setRotate(degrees)
        matrix.setRotate(degrees, px, py)
        matrix.preRotate(degrees)
        matrix.preRotate(degrees, px, py)
        matrix.postRotate(degrees)
        matrix.postRotate(degrees, px, py)

这就不用解释了,degrees即我们要旋转的度数,px,py是我们旋转的角度通过这个设置,它会直接改变matrix矩阵里面的值,得到相应的变换矩阵。


还可以通过具体设置我们想要旋转的sin、cos角度来得到变换

        matrix.setSinCos(sinValue, cosValue)
        matrix.setSinCos(sinValue, cosValue, px, py)











版权声明:本文为博主原创文章,未经博主允许不得转载。

旋转矩阵(Rotate Matrix)的性质分析

学过矩阵理论或者线性代数的肯定知道正交矩阵(orthogonal matrix)是一个非常好的矩阵,为什么这么说?原因有一下几点: 正交矩阵每一列都是单位矩阵,并且两两正交。最简单的正交矩阵就是...
  • zhang11wu4
  • zhang11wu4
  • 2015年11月10日 16:00
  • 33795

cocos2d-x学习:CCSprite总结

精灵是2D游戏中得主角,这次就总结一下cocos2d-x中精灵的使用。 一,加载 首先,创建一个变量 CCSprite *pSprite; 加载函数分为两组initWithX...
  • cg0206
  • cg0206
  • 2012年09月05日 11:33
  • 12358

getRotationMatrix2D函数

getRotationMatrix2D函数 主要用于获得图像绕着 某一点的旋转矩阵  函数调用形式: Mat getRotationMatrix2D(Point2f center, ...
  • qq_18343569
  • qq_18343569
  • 2015年08月24日 16:24
  • 6378

unity3d四元数和旋转矩阵

一 四元数 Quaternion中存放了x,y,z,w四个数据成员,可以用下标来进行访问,对应的下标分别是0,1,2,3。 主要介绍几个函数 根据两个向量计算出旋转量,计算出来的旋转量为...
  • kfqcome
  • kfqcome
  • 2013年08月31日 13:36
  • 26166

android Matrix.setRotate 和 postRotate的区别

今天在做一个模拟时钟的项目时,需要对指针进行旋转操作。开始使用的是setRotate()方法对指针图片进行旋转操作,之后又需要对指针进行位移,又使用了setTranslate()方法,发现旋转效果没有...
  • g475266696
  • g475266696
  • 2012年04月17日 16:41
  • 15991

android Matrix.setRotate 和 postRotate的区别

android Matrix.setRotate 和 postRotate的区别
  • qq_27789551
  • qq_27789551
  • 2016年08月27日 14:41
  • 1715

Android学习记录(9)—Android之Matrix的用法

Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。 首先介绍一下矩阵运算。加法和减法就不用说了,对应位相加就好。图像处理,主要用到的是乘法 。下面...
  • loongggdroid
  • loongggdroid
  • 2014年01月23日 15:58
  • 16814

Android中OpenGL使用Matrix.rotateM的困惑

使用Android那本书在学习OpenGL,学习的过程中需要把代码从java翻译为C的实现,于是对android中使用Matrix.rotateM的使用有一些困惑,关于左乘还是右乘的问题,在stack...
  • lihei12345
  • lihei12345
  • 2015年01月17日 23:06
  • 4399

简单的学习Matrix的缩放,平移,旋转,倾斜

/* * translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种*/ public class MyView extends View{ private ...
  • u011057161
  • u011057161
  • 2014年06月07日 17:19
  • 1757

Android OpenGL20 setIdentityM,translateM,rotateM,multiplyMV等方法

在opengl中,默认世界坐标系已经定位好了,要绘制图形,给出图形的顶点坐标参数很多情况下是按照世界坐标系设定各自顶点坐标. 比如,下面给出了一个立方体的各自顶点坐标,那么下面是按照世界坐标系给出的...
  • qq_31726827
  • qq_31726827
  • 2016年05月24日 19:56
  • 2834
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Matrix学习3、Matrix的基本三种变换之Translation、Skew、Rotate
举报原因:
原因补充:

(最多只允许输入30个字)