假设我初始化AffineTransform如下:
AffineTransform af = new AffineTransform(2,3,4,5,6,7);
如何使用android的sdk创建等效的Matrix?
I82*_*uch 12
[ x'] [ m00 m01 m02 ] [ x ] [ m00x + m01y + m02 ]
[ y'] = [ m10 m11 m12 ] [ y ] = [ m10x + m11y + m12 ]
[ 1 ] [ 0 0 1 ] [ 1 ] [ 1 ]
Run Code Online (Sandbox Code Playgroud)
不确定,但也许
Matrix m = new Matrix();
m.setValues(new float[]{2,3,4,5,6,7,0,0,1});
Run Code Online (Sandbox Code Playgroud)
编辑:评论者指出订单应该是
m.setValues(new float[]{2,4,6,3,5,7,0,0,1});
Run Code Online (Sandbox Code Playgroud)
AffineTransform 中提供的顺序如下:
java.awt.geom.AffineTransform.AffineTransform(float m00, float m10, float m01, float m11, float m02, float m12)从表示 3x3 变换矩阵的 6 个可指定条目的 6 个浮点值构造一个新的 AffineTransform。
参数:
m00 3x3矩阵的X坐标缩放元素
m10 3x3矩阵的Y坐标剪切元素
m01 3x3矩阵的X坐标剪切元素
m11 3x3矩阵的Y坐标缩放元素
m02矩阵的X坐标平移元素3x3 矩阵
m12 3x3 矩阵的 Y 坐标平移元素
一个示例实现:
new AffineTransform(
q0, q1, q2,
q3, q4, q5);
Run Code Online (Sandbox Code Playgroud)
反直觉地产生:
[ m00 m01 m02 ] [ q0 q2 q4 ]
[ m10 m11 m12 ] = [ q1 q3 q5 ]
[ 0 0 1 ] [ 0 0 1 ]
Run Code Online (Sandbox Code Playgroud)
要完成相同的结果android.graphics.Matrix:
Matrix m = new Matrix();
m.setValues(new float[] {
q0, q2, q4,
q1, q3, q5,
0, 0, 1
}
Run Code Online (Sandbox Code Playgroud)
我认为 Matrix 的setValues()方法文档可以改进;它应该反映其参数的顺序是:
void android.graphics.Matrix.setValues(float[] values)将数组中的 9 个值复制到矩阵中。根据 Matrix 的实现,这些可能被转换为 Matrix 中的 16.16 个整数,这样对 getValues() 的后续调用将不会产生完全相同的值。
这些值按以下顺序提供到 3x3 矩阵中:
Run Code Online (Sandbox Code Playgroud)float[] { m00, m01, m02, m10, m11, m12, m20, m21, m22 }在哪里:
M00的X坐标的3×3矩阵的缩放元素(
Matrix.MSCALE_X)
M01的X坐标的剪切的3×3矩阵的元素(Matrix.MSKEW_X)
M02的X坐标的3×3矩阵(平移元素Matrix.MTRANS_X)
M10的Y坐标的剪切的3×3矩阵(的元素Matrix.MSKEW_Y)
M11的3x3 矩阵的 Y 坐标缩放元素 (Matrix.MSCALE_Y)
m12 3x3 矩阵的 Y 坐标平移元素 (Matrix.MTRANS_Y)
m20 3x3 矩阵的第一个透视元素 (Matrix.MPERSP_0)
m21 3x3 矩阵的第二个透视元素 (Matrix.MPERSP_1)
m22第三个透视元素3x3 矩阵 (Matrix.MPERSP_2)
| 归档时间: |
|
| 查看次数: |
6227 次 |
| 最近记录: |