инвертировать и умножить матрицу вращения Android? как - PullRequest
1 голос
/ 27 мая 2011

Я хочу сделать следующее исчисление, используя матрицу вращения, извлеченную из метода getRotationMatrix():

SensorManager.getRotationMatrix(mRi, mI, mGData1, mMData2);

SensorManager.getRotationMatrix(mRi, mI, mGData, mMData);

//invert(mRi) and multiply it by mR, mRi and mR are float[] with length 16, is this the right way? I'm not getting any result. Rmult returns 0.         

Matrix.invertM(Rinv,0,mRi,0);
Matrix.multiplyMM(Rmult, 0, Rinv, 0, mR, 0);

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 27 мая 2011

Инверсия матрицы вращения (без перемещения / масштабирования / сдвига) - это транспонирование матрицы, которая использует строки в качестве столбцов.Обратите внимание, что это особый случай, транспонирование для любой матрицы не является обратной, она работает только для матриц вращения.

Это означает, что элементы с индексами 0, 1, 23 в транспонированной матрице будут значения с индексами 0, 4, 8, 12, значения с индексами 4, 5, 6, 7 будут значения с индексами 1, 5, 9, 13 и т. Д.

Хотя, если вы планируете постмножение с транспонированием, может быть проще , а не вообще сделать транспонирование вообще, потому что умножение с транспонированием матрицы напрямую более близкосоответствует расположению памяти, чтобы можно было выполнять параллельное умножение (если вы когда-либо захотите использовать SIMD).

0 голосов
/ 05 сентября 2012

Похоже, вы используете opengl. Возможно, потому что используемые вами матрицы являются функциями android.opengl.Matrix, верно? Может ли быть так, что ваши матрицы не имеют требуемого формата 4x4 (то есть float [16])?

Я ни в коем случае не эксперт.

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