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); 

我希望這有助於。