質問

ヨーピッチとロールは、AndroidのSensorManager.getOrientation()から取得します。これにより、Y軸がY軸を指すヨーとピッチとがY軸の周りであるとする。(そして私のスクリーンの向きはランプスに固定されているので、y軸は変わりません)。しかし、私が欲しいのはヨーピッチと負のZ軸のロール(ポイント 電話)のロール、私の電話の画面が飛行機のコックピットの風景窓である場合、ヨーは何だろうかピッチとロールは?

役に立ちましたか?

解決

あなたが言っていることを理解しているなら、あなたは現在のヨーピッチとロールが+ y軸がデフォルトの「正面」ベクトルであるかのように戻ることを見ています。ヨー、ピッチ、ロールが-z軸とデフォルトの 'front'ベクトル、デフォルトの 'up'ベクトルとして+ xベクトルとして計算されるような座標変換をしたいと思います。

最初に、現在の設定でヨー、ピッチ、ロールから現在のフロントおよびアップベクトルを計算する必要があります。これは3D回転行列を使用して行うことができます。 http://en.wikipedia.org/wiki/rotation_matrix#rotations_in_three_dimensions

ヨー角を使用してZ周りを回転させ、Xの回転としてピッチを回転させ、y周りの回転としてロールします。これらの行列を一緒に乗算し、その結果、新しい前面および上のベクトルを取得するために、前面ベクトル(0,1,0)とアップベクトル(0,0,1)に乗算します。

次に、新しいヨー、ピッチ、ロール角を計算する必要があります。ヨーは、YZ平面に投影された前面ベクトル(X値を0に設定)と-Zベクトル(0,0、-1)、ピッチがXZ平面に投影された前面ベクトルの間の角度です。 Zベクトル、ロールは、XY平面上に投影されたアップベクトルと+ Xベクトル(1,0,0)との間の角度です。 FX=フロントベクトルのXコンポーネント、FYがYコンポーネントなどになりますので、次の手順を実行します。

yaw   = acos ( -z dot (0,  Fy, Fz) ) / sqrt(Fy*Fy + Fz*Fz)
pitch = acos ( -z dot (Fx, 0,  Fz) ) / sqrt(Fx*Fx + Fz*Fz)
roll  = acos ( +x dot (Ux, Uy, 0 ) ) / sqrt(Ux*Ux + Uy*Uy)
.

私が間違ったものを選んだ場合、あなたは他のベクトルのためにこれをすることができるはずです。

他のヒント

Androidで使用されているボディ軸の規則は、航空宇宙で使用されているのと同じではありません(理由で理由で)。「平面」のx軸は、Androidデバイスの「Y」軸と等価である(そして同様にX軸は、Enu Ro Ned Conevtionsに応じてy軸、正または負に関連している)。ヨーピッチAnsロールの表記法に関する良い記事はここで見つけることができ、あなたの質問に答えるための始まりになるかもしれません: http://www.sensorplatforms.com/underStanding-Orientation-Conventions-mobile-platforms/

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top