Matrix
来源:互联网 发布:伪娘交友软件 编辑:程序博客网 时间:2024/06/06 05:58
Matrix的本质是一个3x3的矩阵,初始状态是
调用set()设置矩阵,调用pre()叠加前置矩阵,调用post()叠加后置矩阵。
需要注意的是,对于叠加矩阵,比如说[pre][set][post],并不是对元素进行了3次变换,而是先计算出最终矩阵,然后只进行1次变换。
举例来说:
matrix.setTranslate(100,100);
matrix.postScale(0.5f,0.5f);
并不是先将元素移动到(100, 100),然后再对元素缩放(0.5, 0.5),而是缩放0.5再只移动(50, 50)
对一个元素运用Matrix,本质相当于是对这个元素中的每个点进行矩阵变换,其中(x0,y0)是变换前的点,(x,y)是变换后的点。
如下程序演示一下,Matrix的四个方法translate()、rotate()、scale()、skew()产生的矩阵分别是怎样的:
packagecom.itheima28.copybitmap;
import android.app.Activity;
import android.graphics.Matrix;
import android.os.Bundle;
import android.util.Log;
public class MainActivityextendsActivity {
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Matrix matrix=newMatrix();
// printMatrix(matrix);
// matrix.setValues(new float[]{
// 0.5f, 0, 0,
// 0, 1, 0,
// 0, 0, 1
// });
// matrix.reset();
// matrix.setTranslate(100, 100);
// matrix.reset();
// matrix.setRotate(90, 100, 100);
// matrix.reset();
// matrix.setScale(0.5f, 0.5f);
// matrix.reset();
// matrix.setSkew(2, 4);
matrix.reset();
//写两次post会一个接到另一个后面//估计两次pre是一个接到另一个前面
matrix.postTranslate(100,200);
matrix.postTranslate(500,600);
printMatrix(matrix);
}
public voidprintMatrix(Matrix matrix){
float[] values=new float[9];
matrix.getValues(values);
for(inti=0;i<3;i++){
StringBuffer buffer=newStringBuffer();
for(intj=0;j<3;j++){
buffer.append(values[i*3+j]+" ");
}
Log.e("ShadowfaxGHH",buffer.toString());
}
}
}
- 《Matrix》
- Matrix
- Matrix
- Matrix
- Matrix
- Matrix
- Matrix
- mAtrix
- Matrix
- matrix
- Matrix
- Matrix
- Matrix
- Matrix
- Matrix
- Matrix
- Matrix
- Matrix
- SQL Server 2005之用Windows身份验证方式无法登录
- Educational Codeforces Round 3 B
- Unity预计算实时GI (三)了解光照图
- 音频编程基础
- OpenCV改变图片的对比度和亮度
- Matrix
- 线程池优化部分代码
- 大数据IMF传奇行动绝密课程第66课:Spark SQL下Parquet中PushDown的实现
- spring配置文件的一些解释
- 第一周训练 E题
- Java基础-多线程实现顺序执行
- Java面试整理 关于线程
- git将当前分支上修改的东西转移到新建分支
- Java中字符串的分隔问题 "|" "." "*" "_" 特殊符号解决方案