我在我的项目中使用android.graphics.Matrix。我想在Matrix中设置值,所以我将使用setValues(float [] values)函数。我怀疑float [] values参数是行主要还是列主要。换句话说,值数组如:
values = {m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2]};
或者
values = {m[0][0], m[1][0], m[2][0], m[0][1], m[1][1], m[2][1], m[0][2], m[1][2], m[2][2]};
答案 0 :(得分:2)
检查Matrix.setTranslate(0, 12)
的结果会显示以下顺序:1.0, 0.0, 0.0, 0.0, 1.0, 12.0, 0.0, 0.0, 1.0
要调用此布局行major或column major取决于您要转换的矢量的视图。
想象它们是列向量,因此后期乘以你将得到以下场景:
| 1 0 0 | x
| 0 1 12 | x y
| 0 0 1 | 1
将它们视为行向量,您会得到相反的印象,如下所示:
| 1 0 0 |
(x y 1) x | 0 1 0 |
| 0 12 1 |
你应该能够找到"权利"版本并指定你的m [i] [j],或者相应地是m [j] [i](?)。
答案 1 :(得分:0)
它们是行主要的,事后。
(即前3个值对应于第一行,后3个值对应于第二行,后3个值对应于最后一行-假设您使用的是post操作,即
M'= T * M,
其中T是变换矩阵,M是原始矩阵。)
如果您要从列主矩阵接收值,这确实很重要,因为它可以大大改变结果。
Matrix上没有转置方法,但是您可以使用以下代码:
public static void transpose(float[]m, float[] result) {
for (int i=0;i<3;i++)
for (int j=0;j<3;j++)
result[j*3+i] = m[i*3+j];
}