前提:矩陣是大學(xué)線性代數(shù)課程的教學(xué)內(nèi)容答毫,跟我一樣已經(jīng)還給老師的同學(xué)看本章前一定要去補(bǔ)充一下矩陣的基本知識(shí)褥民。
具體知識(shí)點(diǎn)可以自行知乎/百度(矩陣原理、矩陣乘法規(guī)則洗搂、矩陣縮放原理消返、矩陣平移原理、單位矩陣耘拇、左乘撵颊、右乘...)
以上大概搞明白了,那就可以接著往下看了惫叛!
上代碼倡勇!
一、preTranslate
Matrix A=new Matrix();
A.setScale(0.5f,0.5f);
A.preTranslate(10,10);
以上代碼具體矩陣操作分步的含義:
1.new Matrix()
A=
A為單位矩陣
2.A.setScale(0.5f,0.5f)
設(shè)置x/y軸縮放比例
A =
3.A.preTranslate(10,10)
C =
A = A * C =
總結(jié):preTranslate為左乘嘉涌,A左乘C妻熊,記AxC
補(bǔ)充:
A.preTranslate(B)
A.preTranslate(C)
= A*B*C
二夸浅、postTranslate
Matrix A=new Matrix();
A.setScale(0.5f,0.5f);
A.postTranslate(10,10);
以上代碼具體矩陣操作分步的含義:
1、2兩步同上
3.A.postTranslate(10,10)
A = C * A =
總結(jié):postTranslate為右乘扔役,A右乘C帆喇,記CxA
補(bǔ)充:
A.postTranslate(B)
A.postTranslate(C)
= C*B*A
三、setScale亿胸、postSkew
RectF rect1 = new RectF();
RectF rect2 = new RectF();
RectF rect = new RectF(400, 400, 1000, 800);
Matrix matrix = new Matrix();
matrix.setScale(0.5f, 1f);
matrix.mapRect(rect1, rect);
Log.i(TAG, "mapRadius1: "+rect.toString());
matrix.postSkew(1,0);
matrix.mapRect(rect2, rect);
Log.i(TAG, "mapRadius2: "+rect.toString());
mapRadius1: RectF(200.0, 400.0, 500.0, 800.0)
mapRadius2: RectF(600.0, 400.0, 1300.0, 800.0)
1.setScale(0.5f, 1f)計(jì)算同上
2.postSkew(1, 0)
A =
x1y1 = (200, 400) 番枚,寫作數(shù)組為:
新的x1y1坐標(biāo)為 (600, 400)
A * x1y1 =
1 * 200 + 1 * 400 + 0*1 = 600
0 * 200 + 1 * 400 + 0*1 = 400
0 * 200 + 0 * 400 + 1*1 = 1
參考博客:
1.https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B09%5DMatrix_Basic.md
2.https://blog.csdn.net/qq_21727627/article/details/104340349
3.https://blog.csdn.net/CAir2/article/details/106646680