iPhoneがフラットなテーブルに置かれているとします。私は、卓上平面の角度を決定したいと思います。角度が0の場合は、テーブルが重力ベクトルに対して正確に垂直であることを意味します。私は、加速度計の読み取り値を平均することによってノイズをフィルタリングしてい.M加速度計を使用してグランドプレーンに対してデバイスプレーンを取得します
#define kThresholdMovementHigh 0.05
- (void)accelerometer:(UIAccelerometer *)accelerometer
didAccelerate:(UIAcceleration *)acceleration
{
// did device move a lot? if so, reset sums
if (fabsf(acceleration.x - accelerationXAverage) > kThresholdMovementHigh ||
fabsf(acceleration.y - accelerationYAverage) > kThresholdMovementHigh ||
fabsf(acceleration.z - accelerationZAverage) > kThresholdMovementHigh )
{
NSLog(@"deviceDidMove a lot");
accelerationXSum = acceleration.x;
accelerationYSum = acceleration.y;
accelerationZSum = acceleration.z;
readingsCount = 1;
}
else
{
// because the device is at rest, we can take an average of readings
accelerationXSum += acceleration.x;
accelerationYSum += acceleration.y;
accelerationZSum += acceleration.z;
readingsCount ++;
}
accelerationXAverage = accelerationXSum/readingsCount;
accelerationYAverage = accelerationYSum/readingsCount;
accelerationZAverage = accelerationZSum/readingsCount;
float angle = RadiansToDegrees(atanf(accelerationZAverage/sqrtf(pow(accelerationXAverage, 2) + pow(accelerationYAverage, 2)))) + 90;
labelAngle.text = [NSString stringWithFormat:@"%.2f°", angle];
}
に.H
double accelerationXAverage;
double accelerationYAverage;
double accelerationZAverage;
double accelerationXSum;
double accelerationYSum;
double accelerationZSum;
int readingsCount;
に
radians = atanf (z/sqrt (x^2 + y^2)
:私は、次の式を使用しています。加速度計の更新間隔は1/60で、実験中にはデバイスを10秒間置くようにしました(したがって、平均600回の読み値です)。
この式はうまくいくように見えますが、それは私に期待していたことについての角度を与えてくれます。しかし、私はまた、私はデバイスが静的な位置に回転してこれをしようとすると、机の上にまだフラットな、私は同じ答え(重力ベクトルに相対的な理由は、角度が変更されていない) 。しかし、それは私が試してみるときに得られるものではありません。角度は数度変化します。
私は正しい式を使用していますか?同じ卓上のさまざまなプレースメントでアングルが異なるのはなぜですか?それは単なる誤差のマージンですか?
画像を追加しました(http://gotoandplay.freeblog.hu/)ので、同じx-y軸とz軸について話しています。
kThresholdMovementHigh.Whatでエラーが発生しています。 – srinadh
kThresholdMovementHighは単なる定数です。しきい値の下には「ノイズ」、つまり無視する動きがあります。スレッショルドの上には、ユーザーが意図的に移動するように処理したいムーブメントがあります。 #defineを含めるように質問を更新しました。あなたのアプリに最適なものを判断する必要があります。 –