Accéléromètre Filtrage Passe-Bas

Toujours sur le BigNerdRanch de Développement iOS du livre.

Dans l'Accéléromètre chapitre, ils ont d'abord mettre en œuvre accéléromètre suivi, mais il est assez nerveux. Ils suggèrent alors d'appliquer un filtre passe-bas pour changer le code d'origine:

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
    HypnosisView *hv = (HypnosisView *)[self view];

    [hv setXShift:10.0 * [acceleration x]];
    [hv setYShift:10.0 * [acceleration y]];

    [hv setNeedsDisplay];
}

:

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
    HypnosisView *hv = (HypnosisView *)[self view];

    float xShift = [hv xShift] * 0.8 + [accel x] * 2.0;
    float yShift = [hv yShift] * 0.8 + [accel y] * 2.0;

    [hv setXShift:xShift];
    [hv setYShift:yShift];

    [hv setNeedsDisplay];
}

Assez simple question: où sont-ils ces valeurs? J'ai été à la recherche par le biais de la documentation et j'ai trouvé quelque chose à propos des filtres passe-bas, ce qui suggère le code suivant:

   #define kFilteringFactor 0.1

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
    //Use a basic low-pass filter to keep only the gravity component of each axis.
    accelX = (acceleration.x * kFilteringFactor) + (accelX * (1.0 - kFilteringFactor));
    accelY = (acceleration.y * kFilteringFactor) + (accelY * (1.0 - kFilteringFactor));
    accelZ = (acceleration.z * kFilteringFactor) + (accelZ * (1.0 - kFilteringFactor));

   //Use the acceleration data.
}

Cependant, j'ai d'abord essayé avec ce code et j'ai eu une erreur (par l'analyse de mon application) en disant: "la gauche de la valeur de '*' est une poubelle de la valeur". Mon accéléromètre de suivi ne fonctionne pas non plus.

Je suis assez confus quant à ce que ces valeurs moyennes. Par exemple, dans la première partie du code, pourquoi font-ils multiplier les valeurs de l'accélération par 10? Pour obtenir un "plus grand" mouvement? J'ai pu faire un certain sens de celui-ci, mais le deuxième code avec le filtre passe-bas n'a absolument aucun sens pour moi.

Je pense que la raison pour multiplier par 10, c'est que UIAcceleration vous donne en retour des valeurs dans G, ce qui 1G est de 9,81 mètres par seconde par seconde. 10 est une approximation de 9.81.

OriginalL'auteur cabaret | 2011-08-04