Accelerometer Low-Pass-Filterung

Immer noch auf der BigNerdRanch iOS-Entwicklung Buch.

In der Accelerometer Kapitel, Sie zuerst zu implementieren accelerometer-tracking, aber es ist ziemlich nervös. Sie dann schlagen die Anwendung eines low-pass-filter, um es durch eine änderung der original-code:

- (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];
}

zu diesem:

- (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];
}

Ziemlich einfache Frage: Woher haben Sie diese Werte aus? Ich habe auf der Suche durch die Dokumentation und ich habe etwas gefunden über low-pass-Filter, die schlägt vor, die folgenden code:

   #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.
}

Jedoch zuerst habe ich versucht mit diesem code, und ich bekam eine Fehlermeldung (durch die Analyse meiner app) sagt, " die Links-Wert '*' ist einen Müll Wert. Meine accelerometer-tracking hat nicht funktioniert entweder.

Ich bin ziemlich verwirrt, was diese Werte bedeuten. Zum Beispiel, in den ersten Teil des Codes, warum multiplizieren Sie die Beschleunigung der Werte durch 10? Um einen "größeren" Bewegung? Ich könnte einige machen Sinn, aber der zweite code mit dem low-pass-filter macht absolut keinen Sinn für mich.

  • Ich glaube, der Grund für die Multiplikation mit 10 ist, dass UIAcceleration gibt Sie zurück, Werte in G, die 1 G ist 9.81 Meter pro Sekunde pro Sekunde. 10 ist eine Annäherung von 9.81.
InformationsquelleAutor cabaret | 2011-08-04
Schreibe einen Kommentar