Android - получение текущего вращения матрицы - PullRequest
3 голосов
/ 03 сентября 2011

Мне нужно иметь возможность устанавливать вращение матрицы, а не добавлять к ней.Я считаю, что единственный способ установить вращение - это узнать текущее вращение матрицы.

Примечание: matrix.setRotate() не подойдет, потому что матрица должна сохранять свою информацию.

Ответы [ 3 ]

6 голосов
/ 03 февраля 2015
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 голос
/ 03 сентября 2011

Что вы можете сделать, это позвонить по номеру getValues и кэшировать значения.Позже, когда вы захотите вернуть их обратно, просто вызовите setValues в матрице.

Обновите

Матрица вращения и матрица преобразования хорошо объяснены здесь

1 голос
/ 03 сентября 2011

Боюсь, я не могу помочь вам с интеграцией (я сделал это только во Flash), но похоже, что вы должны попытаться выполнить свои матричные вычисления самостоятельно, что лучше всего делать с помощью "кватернионов",что делает добавление вращений довольно тривиальным.См. http://introcs.cs.princeton.edu/java/32class/Quaternion.java.html для примера реализации Java.Вы хотели бы создать вторую матрицу кватернионов, которая описывает ваше изменение вращения и добавить (в данном случае plus) к вашей текущей матрице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...