質問

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

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

私は、何かがアップコーディングされているが、実際に加速度計の測定値がどのように動作するかを理解していないと、正しい方向にナッジを使用することができます。私の現在のコードは、現在の角度を記録しますが、電話が平坦である場合でも、私は乱暴に数回秒を変える測定値を取得します。

- (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
役に立ちましたか?

解決

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

私はaccelerationXと-Yは、このようにインスタンス変数とされるべきだと思います

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

あなたが探していたより多くの何を与える必要があります。

他のヒント

その理由は、彼らが地元ではありませんしながら、あなたは、ローカル変数を使用しているということです。

次の操作を実行してみます:

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

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

...

other declarations

加速度計デリゲートで更新変数ます:

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

これは、突然のジャンプなく、より正確な結果を与える必要があります。

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