Android矩阵setValues()行主要或列专业

时间:2015-08-24 19:16:28

标签: android matrix graphics

我在我的项目中使用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]};

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];
  }