贵州做网站公司
贵州做网站公司~专业!靠谱!
10年网站模板开发经验,熟悉国内外开源网站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等网站程序,可为您提供网站建设,网站克隆,仿站,网页设计,网站制作,网站推广优化等服务。我们专注高端营销型网站,企业官网,集团官网,自适应网站,手机网站,网络营销,网站优化,网站服务器环境搭建以及托管运维等。为客户提供一站式网站解决方案!!!

Android中的Matrix

来源:网络转载 时间:2024-01-29 07:51:58

写在前面

看这篇笔记之前先看一下参考文章,这篇笔记没有系统的讲述矩阵和代码的东西,参考文章写的也有错误的地方,要辨证的看。

  1. 如何计算矩阵乘法
  2. android matrix 最全方法详解与进阶(完整篇)
  3. Android Matrix 最全方法详解与进阶
  4. 1-4 Canvas 对绘制的辅助 clipXXX() 和 Matrix

矩阵的乘法

比如有矩阵A和矩阵B,他们分别为:

可以看到A为2行3列的矩阵,B为3行2列的矩阵,矩阵乘法符合下面的规则:

  1. 只有A的列数和B的行数相等,A和B才可以做乘法
  2. A*B的结果C是2行2列的矩阵,行数等于A的行数,列数等于B的列数
  3. 结果矩阵C的第一行第一列数值为A的第一行和B的第一列中的数字分别相乘后再相加。其他行列结果依次类推
  4. 矩阵的乘法不满足交换律,即A*B != B*A
  5. 矩阵的乘法满足结合律M‘ = T*(M*R) = T*M*R = (T*M)*R

详细信息可以看这里:如何计算矩阵乘法

Android中常用的四种矩阵变换

Android中使用3×3的矩阵进行图形的变换,它看起来大概是下面这样:

在Android中,使用一个3×1的矩阵来表示一个点:

x,y分别代表x,y轴上的坐标,而1代表屏幕在z轴上的坐标为默认的。如果将1变大,那么屏幕会拉远, 图形会变小。

平移(Translate)

图例:

错切(Skew)

水平错切

图例:

垂直错切

图例:

复合错切

图例:

旋转(Rotate)

图例:

缩放(Scale)

图例:

Matrix的组合

应用矩阵进行图形变换的主要原因,是因为矩阵是可以通过矩阵的乘法进行组合使用的,如果想对canvas绘制的bitmap时,先平移T(dx, dy),再旋转R(θ),最后缩放S(k1,k2),就可以将三个变换矩阵相乘,M‘ = ABC,再对canvas应用M’矩阵即可。

Matrix的坐标系

矩阵的操作可以看作是以坐标原点为原点的坐标系在三维空间中做的变换,不同于canvas的屏幕坐标系坐标系,矩阵Matrix的坐标系为左手坐标系:

这个坐标系对应的每个轴的旋转方向(从原点看出去,每个轴的旋转方向都是逆时针):

Matrix的操作可以看做是对上面左手坐标系的变换

因为Matrix变换后是对每个canvas的点起作用,其实也可以看做对这个三维坐标系起了作用,canvas绘制的是三维坐标系上的图像对canvas二位坐标系的投影。

所以,可以用自己的左手模拟进行平移旋转等操作,更加直观的想象变换后的效果。

Matrix的左乘和右乘

在Android中,有关矩阵的操作都是成对的,比如preTranslate(float dx, float dy)和postTranslate(float dx, float dy),通过看api的介绍,如果原矩阵为M,那么pre表示的是左乘,post表示右乘:

preTranslate : M’ = M * T(dx, dy) // 左乘 postTranslate: M’ = T(dx, dy) * M // 右乘

因为矩阵的变换是顺序执行的,所以在平时最常用的应该是pre左乘,所有的变换操作都依次执行,比如canvas常用的translate等变换方法其实就是左乘。右乘其实就是在所有操作之前增加一步操作,合理的运用右乘可以方便代码的编写。

比如:图形变换是以左边原点为原点的,所以旋转、缩放等功能应用到canvas.drawbitmap()方法时(因为bitmap常从原点往右下方画),图像表现出来的结果就特别奇怪,需要将canvas的坐标系移动到图像的中心点再操作然后再把坐标系移回去,那么如果只用pre左乘的话,代码是这样的:

Matrix matrix = new Matrix();matrix.preTranslate(pivotX,pivotY);// 各种操作,旋转,缩放,错切等,可以执行多次。matrix.preTranslate(-pivotX, -pivotY);

如果合理使用右乘,那么代码就成了:

Matrix matrix = new Matrix();// 各种操作,旋转,缩放,错切等,可以执行多次。matrix.postTranslate(pivotX,pivotY);matrix.preTranslate(-pivotX, -pivotY);

减少了postTranslate和preTranslate之间的距离。

155028.html

标签:androidmatrix-

SEO小店网站优化 能带来大量精准流量的网站才是好网站,小店网络公司SEO优化推广可以为企业网站带来大量的有效流量。 ...

汉寿网站排名快速提升 汉寿网络公司快速提升企业网站排名,通过网站优化推广,让汉寿企业网站在搜索引擎的排名长期稳定。 ...

SEO张家界网站优化 能带来大量精准流量的网站才是好网站,张家界网络公司SEO优化推广可以为企业网站带来大量的有效流量。 ...

宝马自行车标志是什么样子?宝马自行车标志和汽车标志相似。这是宝马制造的高端自行车。但目前在国内很少见到。宝马自行车的车架造型源于宝马汽车制造技术的车架材料处理和成型工艺,保证了车辆的整体刚性和韧性。这款自行车结合了宝马汽车的设计理念和宝马高超的材料制造加工技术,成为了一件工业艺术品。宝马自行车为什么那么便宜?宝马自行车一般不在实体店卖,大部分在网店卖。网店在销售成本上有很大优势,在价格上也比其他品...

京东路的日子歌曲歌词?歌名:《北京东路的日子》原唱:许艺豪、陆天舒、姜伟民、张、梁静媛、游、徐艺轩歌词:王元音乐:王元编曲:孙蕾歌词:当初,我们都是孩子。成为天使的最后愿望。歌谣中的歌谣隐藏着童话的影子。我的孩子应该飞向哪里?当初,我们都是孩子。成为天使的最后愿望。歌谣中的歌谣隐藏着童话的影子。我的孩子应该飞向哪里?当有一天你听到有人在说那些奇怪的语言。当有一天你看到满大街的书还是先学着找乐子当有...

淘宝店铺头像尺寸多大?淘宝店铺头像的尺寸是8080像素的。下面请附上淘宝店铺其他尺寸要求。1、店标尺寸:文件格式GIF、JPG、JPEG、PNG文件大小80K以内,建议您尺寸80PX*80PX(PX是像素)2、店铺公告尺寸:320*4003、宝贝分类尺寸:宽度168px*相同高度不限4、店铺推荐尺寸:600*4505、计数器尺寸:137*946、论坛签名尺寸:468*607、店标尺寸:文件格式GI...

TOP