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)











版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LonelyRoamer/article/details/7626262

android Matrix.setRotate 和 postRotate的区别

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

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

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

Matrix旋转bitmap一些坑

废话: 今天写了一个音乐播放器中CD旋转的View,其中在旋转Bitmap的时候发现一些问题,记录一下,也希望帮到有一样困惑的朋友我要将一张CD图片的bitmap不断的旋转,达到预期效果一开始在网上找...
  • lift_class
  • lift_class
  • 2017-03-16 15:26:01
  • 854

Android中的Matrix,以及set,pre和post的区别

①sin(α+β)=sinαcosβ+cosαsinβ ②cos(α+β)=cosαcosβ-sinαsinβ 公式①可以由单位圆方法或托勒密定理推导出来。 参见:http://blog.sina.c...
  • gaojinshan
  • gaojinshan
  • 2013-12-15 15:15:16
  • 8641

cocos2d-x学习:CCSprite总结

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

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

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

Android中OpenGL使用Matrix.rotateM的困惑

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

Linux下logrotate命令使用.配置和理解

对于Linux 的系统安全来说,日志文件是极其重要的工具。系统管理员可以使用logrotate 程序用来管理系统中的最新的事件,对于Linux 的系统安全来说,日志文件是极其重要的工具。系统管理员可以...
  • junli_chen
  • junli_chen
  • 2017-08-15 15:22:26
  • 1195

android matrix 最全方法详解与进阶(完整篇)

1 概述这里我们会详细讲解matrix的各个方法,以及它的用法。matrix叫做矩阵,在前面讲解 ColorFilter 的文章中,我们讲解了ColorMatrix,他是一个4*5的矩阵。而这...
  • cquwentao
  • cquwentao
  • 2016-05-18 16:43:27
  • 32147

矩阵的平移(translate)没有想象的那么简单

矩阵在计算机图形学中的地位是举足轻重的,几乎所有的变换都需要通过矩阵来完成。比如我接触的DirectX9就用IDirect3DDevice9::SetTransform()的第二个参数就要求传入矩阵的...
  • jiangcaiyang123
  • jiangcaiyang123
  • 2014-03-06 23:30:35
  • 4844
收藏助手
不良信息举报
您举报文章:Matrix学习3、Matrix的基本三种变换之Translation、Skew、Rotate
举报原因:
原因补充:

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