Android - 获取矩阵的当前旋转

时间:2011-09-03 03:50:51

标签: java android matrix

我需要能够设置矩阵的旋转而不是添加它。我认为设置旋转的唯一方法是知道矩阵的当前旋转。

注意:matrix.setRotate()不会这样做,因为矩阵需要保留其信息。

3 个答案:

答案 0 :(得分:6)

float[] v = new float[9];
matrix.getValues(v);
// translation is simple
float tx = v[Matrix.MTRANS_X];
float ty = v[Matrix.MTRANS_Y];

// calculate real scale
float scalex = v[Matrix.MSCALE_X];
float skewy = v[Matrix.MSKEW_Y];
float rScale = (float) Math.sqrt(scalex * scalex + skewy * skewy);

// calculate the degree of rotation
float rAngle = Math.round(Math.atan2(v[Matrix.MSKEW_X], v[Matrix.MSCALE_X]) * (180 / Math.PI));

从这里开始 http://judepereira.com/blog/calculate-the-real-scale-factor-and-the-angle-of-rotation-from-an-android-matrix/

答案 1 :(得分:1)

我担心我无法帮助你进行集成(我只在Flash中完成此操作),但听起来你应该尝试自己进行矩阵计算,最好使用“四元数”,这使得添加旋转非常简单。有关示例Java实现,请参阅http://introcs.cs.princeton.edu/java/32class/Quaternion.java.html。您可能需要创建第二个四元数矩阵来描述您的旋转变化,并将其添加(在本例中为plus)到当前矩阵。

答案 2 :(得分:1)

您可以执行的操作是调用getValues并缓存值。稍后当你想要它们时,只需在矩阵上调用setValues

更新

旋转矩阵和变换矩阵关系很好地解释了here