Android中的矩阵旋转如何通过倒置和乘法实现?如何操作?

3
我希望使用从方法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);

我该怎么做呢?


为什么你想要这样做?这样做的结果是什么,以及如何使用它? - Thracian
2个回答

1

一个旋转矩阵的逆矩阵(不包括平移/缩放/剪切)是矩阵的转置,即使用行作为列。需要注意的是这是一个特殊情况,对于任何矩阵来说,转置并不是逆矩阵,只有旋转矩阵才适用。

这意味着在转置矩阵中下标为0、1、2、3的元素将成为下标为0、4、8、12的值,下标为4、5、6、7的值则成为下标为1、5、9、13的值,以此类推。

但是,如果您计划在后面乘以转置,则最好一开始就不要转置,因为直接与矩阵的转置相乘更加匹配内存布局,因此可以进行并行乘法(如果您想使用SIMD)。


0

看起来你正在使用OpenGL,可能是因为你使用的矩阵是android.opengl.Matrix函数,对吗?难道你的矩阵没有必要的4x4(即float[16])格式吗?

我绝不是专家。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接