我需要能够设置矩阵的旋转而不是添加到它。我相信设置旋转的唯一方法是知道矩阵的当前旋转。
注意:matrix.setRotate()无法满足要求,因为矩阵需要保留其信息。
注意:matrix.setRotate()无法满足要求,因为矩阵需要保留其信息。
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));
很抱歉,我无法帮助您进行集成(我只在Flash中完成了此操作),但听起来您应该尝试自己进行矩阵计算,最好使用“四元数”,这使得添加旋转非常简单。请参见http://introcs.cs.princeton.edu/java/32class/Quaternion.java.html以获取Java实现示例。您需要创建第二个四元数矩阵,描述您的旋转变化,并将其添加到当前矩阵中(在本例中为plus
)。