1

ユーザーが電話を下に動かしたときと、元に戻したときを検出しようとしています。電話は上下の動画のみです (左右の動きはありません)。

加速度データを記録していますが、上に戻っても常に負です。どうしてこれなの?

[_motionManager startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc] init]
                                     withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
                                         dispatch_async(dispatch_get_main_queue(), ^{
                                             [self performSelectorOnMainThread:@selector(update:) withObject:accelerometerData waitUntilDone:NO];
                                         });

-アップデート:

- (void)update:(CMAccelerometerData *)accelData {
      NSLog(@"acceldata.z %f",accelData.acceleration.z);
}

サンプルデータ

2014-03-14 02:24:02.973 myApp[16294:60b] acceldata.z -0.863266
2014-03-14 02:24:02.993 myApp[16294:60b] acceldata.z -0.855530
2014-03-14 02:24:03.004 myApp[16294:60b] acceldata.z -0.853592
2014-03-14 02:24:03.024 myApp[16294:60b] acceldata.z -0.793396
2014-03-14 02:24:03.043 myApp[16294:60b] acceldata.z -0.774567
2014-03-14 02:24:03.053 myApp[16294:60b] acceldata.z -0.749664
2014-03-14 02:24:03.072 myApp[16294:60b] acceldata.z -0.716141
2014-03-14 02:24:03.082 myApp[16294:60b] acceldata.z -0.733749
2014-03-14 02:24:03.102 myApp[16294:60b] acceldata.z -0.752518
4

2 に答える 2

0

iOS から返される加速度データは「正規化」されており、値 1.0 は地球の重力と同等であることを表します。つまり、表を上にしてテーブルに置かれた電話は、一貫して -1.0 前後の "Z" 値を返します (静的な値になることは決してありません。電話が完全に静止しているときでも、常にわずかに変化しています)。

オブジェクトのacceleration.zCMAccelerometerDataは、電話の前面/背面に対して垂直に走る軸を表します。

データ (-0.86 ~ -0.71 の値) に基づいて、携帯電話の画面を地球の中心に向かって移動しています。X 軸と Y 軸の値がないと、何が起こっているのかを正確に伝えるのは困難です。基本的に、-0.8 の値は、z 軸が地球の中心に向かって 0.2 * 9.8m/s/s で加速していることを示します。

正の値が必要な場合は、電話の画面を下に向けます。または、電話を「落とす」こともできます。これにより、下向きの加速度が地球の重力による加速度を超えます。

電話が地球の重力に対して完全に垂直でない場合に備えて、実際には 3 つの値すべてを使用して加速度のベクトルを決定する必要があります。

于 2014-03-14T17:14:52.080 に答える