3

我一直在试图理解这些两行代码安卓:了解功能remapCoordinateSystem

SensorManager.getRotationMatrix(RTmp, I, grav, mag); 
SensorManager.remapCoordinateSystem(RTmp, SensorManager.AXIS_X,SensorManager.AXIS_MINUS_Z, Rot); 

我读the documentation of remapCoordinateSystem(),但是我很失落。

任何人都可以向我解释究竟getRotationMatrixremapCoordinateSystem做什么?特别是SensorManager.AXIS_X,SensorManager.AXIS_MINUS_Z

+0

这可能有所帮助:http://android-developers.blogspot.de/2010/09/one-screen-turn-deserves-another.html – felixd 2014-01-30 19:17:11

回答

0

完全没有意义地提出这样一个问题通常很难回答。你也应该熟悉的格式(例如:4位表示代码):

SensorManager.getRotationMatrix(RTmp, I, grav, mag); 
SensorManager.remapCoordinateSystem(RTmp, SensorManager.AXIS_X,SensorManager.AXIS_MINUS_Z, Rot); 

但是:

我会说,你正在使用的文档在正确的轨道上。正如您看到的,getRotationMatrix拉动将“世界坐标系”转换为当前设备坐标系所需的当前旋转矩阵。 此外remapcoordinateSystem将给定的坐标系相应地转换为给定的旋转矩阵。但是如上所述 - 根据上下文,很难告诉你为什么有人这样做。

3

我相信getRotationMatrix()返回转换设备坐标世界坐标,如android documentation提到的,不是“世界”到“设备”旋转矩阵。

计算倾斜矩阵I以及旋转矩阵R 从装置变换的向量坐标系世界坐标系其被定义为一个直接的标准正交基,其中

1

我认为getRotationMatrix()的功能被@Noname清楚地解释了。我试图回答你的第二个和第三个问题,考虑remapCoordinateSystem()SensorManager.AXIS_X,SensorManager.AXIS_MINUS_Z

remapCoordinateSystem()确实在改变坐标系,设置新的X,Y,Z轴,其中SensorManager.AXIS_X,SensorManager.AXIS_MINUS_Z是您手机的坐标系。从你的代码中,我相信你正在做纵向增强现实。这就是为什么你设置Y轴为SensorManager.AXIS_MINUS_Z FYI。如果你想在横向上做同样的事情,你将设置坐标系如下:

SensorManager.remapCoordinateSystem(RTmp, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, Rot); 

我希望这有助于。