デバイスからの磁場X、Y、Z値をグローバル参照フレームに変換するで私の答えを読んだ場合、あなたはまだそれを理解していません。
A1。回転行列にデバイス座標系の磁場ベクトルの座標を乗算して、ワールド座標系 の磁場ベクトルの座標を取得します。
強調しておきますが、上記の回転行列であり、逆回転行列ではありません。
呼び出しによって得られる回転行列はgetRotationMatrix
、基底行列をデバイス基底から世界基底に変更したものです。つまり、デバイス座標系の座標を持つ任意のベクトルvが与えられた場合、同じベクトルvのワールド座標系の座標は、回転行列にデバイスシステム座標の座標を 乗算することによって取得できます。
逆回転行列は、基底行列をワールド基底からデバイス基底に変更したものです。したがって、この行列に座標を乗算すると、行列にワールド座標系のベクトルの座標を乗算して、デバイス座標系の同じベクトルの座標を取得すると解釈されます。したがって、逆回転行列に、磁気センサーによって返される磁場ベクトルの座標を掛けると、次に、座標はワールド座標系のベクトルの座標として解釈されるため、磁場ベクトルを表さず、結果の積は世界座標系の磁場ベクトル。実際には、デバイス座標系のベクトルの座標です。
A2。 getOrientation
デバイスがフラットの場合にのみ意味があります。私にとって、それは角度計算の束にすぎません。幾何学的に何をしようとしているのかを見てから、回転行列を使用して必要なものを計算します。たとえば、バックカメラが向いている方向を計算するために、-zの方向(画面に直交するベクトルの反対)と見なします。したがって、この方向を見つけるために、-zを世界の東北平面に投影し、この投影ベクトルと北軸の間の角度を計算しました。このように考えると、デバイスを回転させても-zの方向は変わりません。したがって、投影ベクトルはデバイスを回転させたときと同じです。を使用する場合は、正しい結果を得るにはgetOrientation
事前に電話する必要があります。 remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR)
getOrientation
A3。は、地磁気パラメータが完全にNorth-Sky平面にあるベクトルの座標であるgetRotationMatrix
と想定しています。この平面にあるベクトルは、x座標が0に等しい必要があります。これは単なる基本的な線形代数です。
A4。答えはいいえだ。空間位置を取得するには、固定座標系を基準にしてこれらのベクトルを表現する必要があります。デバイス座標系のこれらのベクトルの座標のみでは、デバイス基底からこの固定基底への基底行列の変化を計算できる固定基底を見つける方法はありません。基底変換を計算するには、上記のリンクに記載されている2つの条件が満たされている必要があります。