9 Stimmen

Wie misst man die Entfernung, die das iPhone beim freien Fall zurücklegt?

Während des freien Falls soll das iPhone auf allen drei Achsen Beschleunigungswerte von 0 senden. Wie lässt sich also die vom iPhone zurückgelegte Strecke ermitteln?

10voto

danatel Punkte 4674

Vertrauen Sie nicht auf die Newtonschen Gesetze, sie ignorieren den Luftwiderstand, die Drehung des Iphones usw. Verwenden Sie stattdessen einen empirischen Ansatz. Lassen Sie das Gerät aus verschiedenen Höhen fallen, z. B. 1 m, 2 m, 5 m, 10 m, 30 m... Wiederholen Sie den Vorgang mehrmals für jede Höhe. Messen Sie bei jedem Fall die Zeit. Approximieren Sie die Ergebnisse durch Spline. Berechnen Sie die inverse Funktion.

3voto

Die einfachste und naivste Implementierung besteht darin, die Beschleunigungsdaten abzutasten und die folgende Formel zu verwenden.

v+=a*dt;
d+=v*dt;

Aber das kann im Laufe der Zeit abdriften, lesen Sie dies für eine Erklärung, warum und eine bessere Lösung: http://gafferongames.com/game-physics/integration-basics/

2voto

Brian Agnew Punkte 260470

Wenn Ihre Beschleunigungsmesser Null anzeigen, haben Sie das Problem zu bestimmen, wann Ihre Bewegung abgeschlossen ist.

Bestimmen Sie also die Abbremsung beim Aufprall, dann die Höchstgeschwindigkeit zu Beginn der Abbremsung und arbeiten Sie sich von dort aus rückwärts vor. Unter der Annahme einer linearen Bewegung, der Abwesenheit von Endgeschwindigkeit und Luftwiderstand, einer linearen Verzögerung (vielleicht) und dass Ihr Telefon noch funktioniert!

2voto

Paul Dixon Punkte 286600

Aus dem Stand

Entfernung = 0,5 x Beschleunigung x Zeit 2

Erdbeschleunigung = 9,81 m/s 2

Ich gehe davon aus, dass Sie das Telefon nicht weit genug fallen lassen, um die Endgeschwindigkeit zu erreichen. Falls doch, bezweifle ich, dass Ihre App von großem Nutzen sein wird, wenn Sie das Telefon wiederfinden :)

1voto

Nikolai Ruhe Punkte 80427

Luftwiderstand ignorieren:

float t; // time since drop
float distance = 9.81f * 0.5f * t * t;

Für größere Entfernungen (Abwurf aus dem Flugzeug) können Sie auch die Ortungsdienste nutzen. CLLocation enthält eine Höhenangabe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X