Stehe gerade etwas auf dem Schlauch, wie die Beschleunigungsdaten eines Accelerometers in eine Strecke umzurechnen sind. Mathematisch sieht es wohl so aus (siehe Bild). http://www.maschinenbau-wissen.de/skript3/mechanik/kinematik/324-gleichmaessig-beschleunigt Nur wie führe ich eine doppelte Integration in Echtzeit in C# aus(Unity)? Hat jemand ein Codebeispiel für sowas? Möchte die gewonnenen "Weg"-Daten aus der Beschleunigung als Translation auf einen Körper in Unity anwenden. Speziell die Zeit bereitet mir Probleme, die ist in der Formel in Sekunden angegeben, aber einfach zur Laufzeit hochzählen funktioniert schonmal nicht. Also was für "t" nehmen?
:
Bearbeitet durch User
Die Seite erklärt eigentlich alles was du brauchst: https://docs.unity3d.com/ScriptReference/Time-deltaTime.html
Rudi L. schrieb: > Speziell die Zeit bereitet mir Probleme, die ist in der Formel in > Sekunden angegeben, aber einfach zur Laufzeit hochzählen funktioniert > schonmal nicht. Was meinst du mit Laufzeit? Für die Auswertung von Daten eines Abtastsystemes musst du erstmal die zeitdiskrete Form deiner Integration hinschreiben. Dann wird daraus eine Summation. Und der Abstand zwischen zwei Abtastungen ist dann dein Zeitschritt.
Wolfgang schrieb: > Was meinst du mit Laufzeit? Habe zuerst mit jeder Berechnung die Sekunden hochgezählt, was natürlich Quatsch ist.. Meinte damit im Laufenden Betrieb (Ist ja in einer Gameengine). > Für die Auswertung von Daten eines Abtastsystemes musst du erstmal die > zeitdiskrete Form deiner Integration hinschreiben. Dann wird daraus eine > Summation. Und der Abstand zwischen zwei Abtastungen ist dann dein > Zeitschritt. Und da hab ich das Problem. Wie muss ich die oben genannte Formel umstellen, dass ich die Rechnung in Code umsetzen kann.
Rudi L. schrieb: > Mathematisch sieht es wohl so aus (siehe Bild). > http://www.maschinenbau-wissen.de/skript3/mechanik/kinematik/324-gleichmaessig-beschleunigt Schon im Link steht, dass die Formel den Sonderfall der konstanten Beschleunigung behandelt. > Nur wie führe ich eine doppelte Integration in Echtzeit in C# > aus(Unity)? Was für eine Integration? Die Formel enthält keine und braucht auch keine, da die Beschleunigung in ihrem Geltungsbereich halt konstant ist. > Hat jemand ein Codebeispiel für sowas? Lerne selber denken! Hier geht es im wesentlichen darum, sich die Bedeutung der drei Teilterme wirklich klar zu machen und sie dann sinnvoll zu benutzen. > Speziell die Zeit bereitet mir Probleme, die ist in der Formel in > Sekunden angegeben, aber einfach zur Laufzeit hochzählen funktioniert > schonmal nicht. Doch, na klar funktioniert das (wobei natürlich für deine praktische Anwendung ein Intervall von 1s deutlich zu groß sein wird). Der Trick ist, die Beschleunigung über das Meßintervall als konstant zu betrachten. Dann gilt die Formel nämlich. Und zwar für jedes Meßintervall wieder. Wobei für alle außer dem ersten ein Teilterm entfällt und für alle außer dem ersten ein weiterer Teilterm genau dem entspicht, was im vorigen Intervall berechnet wurde. Erkennst du jetzt, was du tun musst?
c-hater schrieb: > Rudi L. schrieb: > >> Mathematisch sieht es wohl so aus (siehe Bild). >> > http://www.maschinenbau-wissen.de/skript3/mechanik/kinematik/324-gleichmaessig-beschleunigt > > Schon im Link steht, dass die Formel den Sonderfall der konstanten > Beschleunigung behandelt. Genau. Wird der Zeitabschnitt für jede Berechnung extrem klein gewählt sollte das ja gelten. Da die Änderung der Beschleunigung dann als konstant angesehen werden kann. >> Nur wie führe ich eine doppelte Integration in Echtzeit in C# >> aus(Unity)? > > Was für eine Integration? Die Formel enthält keine und braucht auch > keine, da die Beschleunigung in ihrem Geltungsbereich halt konstant ist. Ja, stimmt, da das Ergebnis in der Formel schon die Strecke ist und bereits zweimal integriert wurde. Das muss mit dem "a" aus den Sensordaten aber erst passieren. >> Hat jemand ein Codebeispiel für sowas? > > Lerne selber denken! Hier geht es im wesentlichen darum, sich die > Bedeutung der drei Teilterme wirklich klar zu machen und sie dann > sinnvoll zu benutzen. > >> Speziell die Zeit bereitet mir Probleme, die ist in der Formel in >> Sekunden angegeben, aber einfach zur Laufzeit hochzählen funktioniert >> schonmal nicht. > > Doch, na klar funktioniert das (wobei natürlich für deine praktische > Anwendung ein Intervall von 1s deutlich zu groß sein wird). Der Trick > ist, die Beschleunigung über das Meßintervall als konstant zu > betrachten. Dann gilt die Formel nämlich. Und zwar für jedes > Meßintervall wieder. Wobei für alle außer dem ersten ein Teilterm > entfällt und für alle außer dem ersten ein weiterer Teilterm genau dem > entspicht, was im vorigen Intervall berechnet wurde. > > Erkennst du jetzt, was du tun musst? Ich schlaf nochmal drüber. Wie gesagt in der Theorie ist es klar, aber Codetechnisch komme ich zu keinen sinnvoll verwertbaren Ergebnissen. KS schrieb: > Die Seite erklärt eigentlich alles was du brauchst: > https://docs.unity3d.com/ScriptReference/Time-deltaTime.html Danke, das sieht vielversprechend aus.
Dem Poster fehlt das wissen der Mathematik. Er denkt mit ein paar Codezeilen copy/pasten sei das alles machbar. Ja. Das Integral schon, eine Game Engine aber eben nicht. Da braucht's noch etwas Physik und Mathematik.
Joggel E. schrieb: > Dem Poster fehlt das wissen der Mathematik. Er denkt mit ein paar > Codezeilen copy/pasten sei das alles machbar. Ja. Das Integral schon, > eine Game Engine aber eben nicht. Da braucht's noch etwas Physik und > Mathematik. Naja, in Unity an sich sieht man recht schnell Erfolge. Die Bewegung per Tastatur funktioniert gut. Bin jetzt erstmal dabei den Einfluss der Erdbeschleunigung mit Hilfe der Rotationsmatrix zu entfernen, dass der Beschleunigungsvektor in jeder Drehrichtung "0,0,0" ergibt. Die Werte vom Gyroskop sind schon implementiert. Drehungen gehen, nur eben noch keine Translation. Hast du trotzdem was sinnvolles beizutragen Joggel E.? Vielleicht ein kleines Codefragment ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.