5

iPhone の向きを 45 度刻みで検出したいと考えています。理想的には、任意の軸に沿った方向の角度を取得できるようにしたいと考えています。

私が行う必要がある検出は、iPhone の Trism が向きが変わったときに画面の現在の下部位置に向かって矢印を点滅させる方法に似ています。

私は何かをコーディングしましたが、加速度計の読み取り値がどのように機能するのか本当に理解できず、正しい方向にナッジを使用できます. 私の現在のコードは現在の角度をログに記録しますが、電話が平らな場合でも、読み取り値は 1 秒に数回大きく変化します。

- (void) checkOrientation:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration
{
    int accelerationX = acceleration.x * kfilteringFactor + accelerationX * (1.0 - kfilteringFactor);
    int accelerationY = acceleration.y * kfilteringFactor + accelerationY * (1.0 - kfilteringFactor);

    float currentRawReading = (atan2(accelerationY, accelerationX)) * 180/M_PI;
    NSLog(@"Angle: %f",currentRawReading);
}

電話が平らなときのログからのサンプル:

2009-06-16 17:29:07.987 [373:207] Angle: 0.162292
2009-06-16 17:29:07.994 [373:207] Angle: 179.838547
2009-06-16 17:29:08.014 [373:207] Angle: 179.836182
2009-06-16 17:29:08.032 [373:207] Angle: -90.000000
2009-06-16 17:29:08.046 [373:207] Angle: 179.890900
2009-06-16 17:29:08.059 [373:207] Angle: -90.000000
2009-06-16 17:29:08.074 [373:207] Angle: 179.917908
2009-06-16 17:29:08.088 [373:207] Angle: -179.950424
2009-06-16 17:29:08.106 [373:207] Angle: 90.000000
2009-06-16 17:29:08.119 [373:207] Angle: 90.000000
2009-06-16 17:29:08.134 [373:207] Angle: -179.720245
4

2 に答える 2

5

あなたの問題は、必要intなときに変数を使用していることだと思いますfloat

accelerationXと –Y はインスタンス変数であるべきだと思うので、次のようになります。

accelerationX = acceleration.x * kfilteringFactor + accelerationX * (1.0 - kfilteringFactor);
accelerationY = acceleration.y * kfilteringFactor + accelerationY * (1.0 - kfilteringFactor);

あなたが探していたものをもっと提供してくれるはずです。

于 2009-06-16T06:56:06.987 に答える
4

その理由は、ローカルであってはならないのに、ローカル変数を使用しているためです。

次のことを試してください。

インスタンス変数を宣言します。

@interface YourViewControllerClass: UIViewController {
    float accelerationX, accelerationY;
}

...

other declarations

加速度計デリゲートの変数を更新します。

 accelerationX = acceleration.x * kfilteringFactor + accelerationX * (1.0 - kfilteringFactor);
 accelerationY = acceleration.y * kfilteringFactor + accelerationY * (1.0 - kfilteringFactor);

突然ジャンプすることなく、より正確な結果が得られるはずです。

于 2009-06-16T12:26:44.690 に答える