Получить сингулярную переменную или поворот в градусах из RotationMatrix.getValues()

Я использую этот учебник: http://mobile.tutsplus.com/tutorials/android/android-sdk-creating-a-rotating-dialer/ Что дает мне вращающийся номеронабиратель на основе изображения. Однако я пытаюсь расширить его, добавив функциональность. Однако, чтобы добавить эту функциональность, мне нужно получить текущую позицию щелчка. Однако, поскольку он использует матрицу вращения для поворота изображения, я не могу получить единственную позицию для анализа того, где пользователь щелкает. Есть ли способ объединить 9 значений, найденных в матрице вращения, в одну переменную, которая указывает, где пользователь касается?


person user1475036    schedule 22.06.2012    source источник


Ответы (1)


Это больше вопрос о компьютерной графике, чем об Android. Используя однородные координаты, вращение по часовой стрелке вокруг начала координат будет представлено как (я использую Нотация Octave/MATLAB здесь, чтобы выразить это):

rotationMatrix = [ cos(theta) sin(theta) 0; -sin(theta) cos(theta) 0; 0 0 1 ]

Предполагая, что матрица просто вращается вокруг начала координат, вы можете вызвать java.lang.Math.acos и передать первое значение в массиве, возвращенном Matrix.getValues, чтобы получить тета. Это значение в радианах, поэтому, если вам нужны градусы, вам нужно преобразовать его.

OTOH, в зависимости от того, что вы делаете, вы можете просто вызвать Matrix.invert, чтобы получить инверсию, и умножить точку, содержащую координаты касания, на эту инверсию Matrix, чтобы «отменить» преобразования.

person Aaron Klotz    schedule 22.06.2012