2012-11-08 44 views
4

iPhone的陀螺儀接收數據相對旋轉到一定的參考態度並沒有改變(除非倍增。)可以說,我的臉用我的iPhone攝像頭牆,左右旋轉45度(roll += PI/4)。轉換世界物體座標

現在,如果我將手機擡向天花板,由於座標空間是固定的(世界座標空間,不會隨手機移動或旋轉),偏航和俯仰都會改變。是否有方法可以確定此角度(地平面和攝像機方向矢量之間的那個),滾動,偏航和俯仰?

編輯:不是打開另一個問題,我會盡力在這裏的。 Luc的解決方案有效。但如何獲得另外兩個旋轉角度?我已經閱讀了發佈的鏈接上的信息,但自從我學習線性代數以來已經有數年了。實際上,這可能比編程問題更重要。

+0

這聽起來並不正確。這些小陀螺儀測量固定在手機上的軸(而不是地球)的旋轉速率。不確定他們是否處理該數據,併爲某些更高級別的數據提供API。 – phkahler

+0

這就是我最初的想法。我把手機旋轉了90度,所以它指向天花板,音高也在變化。往回走,向左旋轉90度,朝天花板旋轉,偏航改變而不是俯仰。 – Mercurial

+0

我想要在任何時候實時確定地面飛機和手機之間的角度。我只需要垂直角度,因爲我使用openGL在屏幕上繪製了一些東西,它們的位置基於手機的垂直角度,即地平面和手機相機矢量之間的垂直角度。 – Mercurial

回答

2

我真的不代碼爲iPhone,所以我會相信你的「真實世界座標」框架。

在這種情況下,你希望兩個z軸向量之間的點積。這會給你你正在尋找的角度的餘弦,因此非常接近。由於平面之間的夾角只有真正有意義的,因爲90°之間的值,你確實有你在餘弦需要的所有信息。

此處沒有膠乳格式,否則我會進入更多細節,但是如果您有興趣,我會在最後的結果中包含您的三次旋轉的旋轉矩陣: rotation matrix

現在水平計劃的z軸矢量是(0,0,1)(讀此爲垂直矢量雖然),並用該矩陣旋轉,只需獲得其第三列。

所以我們希望有第三列,我們(0,0,1)向量的內積,所以你得到cos(β)cos(γ)這是cos(pitch)*cos(roll)

總之,你的計劃之間的角度是arccos(cos(pitch)*cos(roll))。這個值會告訴你你的iPhone傾向於多少,而不是朝哪個方向傾斜。但是你可以從我們所說的矢量(矩陣的最右邊一列)的值中解決這個問題。

+0

我不是旋轉矩陣和矢量的專家,但我完全明白爲什麼公式是arccos(cos(pitch)* cos(roll))。雖然它在某些位置上看起來像是遇到了一個萬向節鎖,或者看起來像是這樣。解決我問題的公式是-sin(roll)* yaw + cos(roll)* pitch。你真的很有幫助,沒有你我就不會解決它。謝謝。 – Mercurial

+0

實際上又遇到過類似的問題,你的配方就像魅力一樣。謝謝一堆! – Mercurial

相關問題