iPod touch 3 でプロジェクトを実行しているデバイス モーションを取得するために、コア モーションを使用しています。私のメソッドで使用される CMAttitudeReferenceFrame - (void)startDeviceMotionUpdatesUsingReferenceFrame:(CMAttitudeReferenceFrame)referenceFrame toQueue:(NSOperationQueue *)queue withHandler:(CMDeviceMotionHandler)handler は CMAttitudeReferenceFrameXArbitraryZVertical です。ドキュメントに従って、Z 軸が垂直で、X 軸が水平面内の任意の方向を指す参照フレームについて説明します。デバイスが画面を上向きにしてテーブルの上に静止している場合、cmdevicemotion からの重力は約 -1 を読み取ります。これは正しい値です。しかし、画面に垂直なベクトルが自分の方を向くように電話を 90 度ひっくり返すと、Z に沿った重力の値はどこにも -1 付近を示しません。Z軸は地球に向いた垂直方向のままだと思っていました。それとも、Z 軸が画面の法線に沿って固定されているということですか? また、画面の法線が地球の重力の方向に沿うようにデバイスを手に持って歩き回り、しばらくしてからデバイスにヨーイング、たとえば 45 度を与えると、CMAttitudeReferenceFrameXArbitraryZVertical の任意の X 軸はまだ一方向の動きの方向を指していますか(参照フレームの x です)?
ユーザーが直線を進んでいない場合、たとえば円を描いて移動している場合、参照フレーム CMAttitudeReferenceFrameXArbitraryZVertical (または CMAttitudeReferenceFrameXArbitraryCorrectedZVertical) を使用する任意の X 軸は、私の円運動速度のように円に接線方向に向けられますか?状況: 1. 画面の法線ベクトルが地球を指す重力の方向と一致するようにデバイスを保持すると、デバイスの平面に沿ったデフォルトの Y 軸が私の動きの方向を指し、接線になります。 2. 参照フレーム内のデバイスの空間的な向きを変更しないという上記の制限なしで、デバイスをいじっているだけで、移動中にさまざまな任意の向きになります。円周