Ich habe eine Physik-Engine implementiert, die auf den Konzepten des klassischen Textes Advanced Character Physics von Thomas Jakobsen basiert . Reibung wird im Artikel nur sehr kurz diskutiert und Jakobsen selbst stellt fest, wie "andere und bessere Reibungsmodelle als diese implementiert werden könnten und sollten".
Wie kann man generell ein glaubwürdiges Reibungsmodell zusätzlich zu den Konzepten aus dem genannten Artikel implementieren? Und wie könnte die gefundene Reibung in Rotation auf einem Kreis übersetzt werden?
Ich möchte nicht, dass es bei dieser Frage um meine spezifische Implementierung geht, sondern darum, wie Jakobsens Ideen allgemeiner mit einem großartigen Reibungssystem kombiniert werden können. Aber hier ist eine Live-Demo, die den aktuellen Zustand meines Motors zeigt, der in keiner Weise mit Reibung umgeht : http://jsfiddle.net/Z7ECB/embedded/result/
Unten sehen Sie ein Bild und ein Beispiel dafür, wie die Kollisionserkennung in einem Motor funktionieren könnte. In der Verlet-Integration werden immer die aktuelle und die vorherige Position gespeichert. Basierend darauf wird eine neue Position berechnet. In jedem Frame berechne ich den Abstand zwischen den Kreisen und den Linien. Wenn dieser Abstand kleiner als ein Kreisradius ist, ist eine Kollision aufgetreten, und der Kreis wird entsprechend der Größe der Überlappung (Versatz auf dem Bild) senkrecht aus der betreffenden Linie heraus projiziert.
Die Geschwindigkeit ist aufgrund der Verlet-Integration implizit, sodass sich durch Ändern der Position auch die Geschwindigkeit ändert. Was ich wissen muss, ist, irgendwie die Reibung auf dem Kreis zu bestimmen und ihn parallel zur Linie rückwärts zu bewegen, um seine Geschwindigkeit zu verringern.
quelle
Antworten:
Sie sollten sich das Papier "Positionsbasierte Dynamik" von Mathias Mueller et al. Anschauen. Es ist im Grunde das gleiche wie Jacobsons 'Papier und er könnte Ihnen mehr Informationen über Reibung geben.
http://www.matthiasmueller.info/publications/posBasedDyn.pdf
Sie geben an, dass Reibung die Geschwindigkeit des Partikels in der Kollisionsebene im Wesentlichen um einen Skalarwert dämpft.
Beachten Sie, dass Sie dadurch keine Coulomb-Reibungseffekte erhalten (der Impuls in die Kollision wirkt sich nicht auf die Größe der Reibungskraft aus). Möglicherweise können Sie dies jedoch erreichen, indem Sie die Geschwindigkeit des Partikels in der Kollisionsebene berücksichtigen.
quelle
In einem "normalen" Starrkörpermotor würden Sie Reibung als Impulse senkrecht zur Normalen modellieren. Ich würde vermuten, dass dies in diesem Zusammenhang bedeuten würde, anstelle von Impulsen die Position des betroffenen Partikels angemessen einzustellen. Mit den vorhandenen Einschränkungen sollte dies, wenn ich den Artikel richtig verstehe, iterativ einen Zustand erreichen, in dem die Reibung auch die Rotation beeinflusst hat. Ich vermute, dass der Autor mit "besserem Modell" eine bessere Methode zur Bestimmung des Reibungsbetrags meint als eine lineare Projektion der gegenseitigen Durchdringung. Dies ist jedoch eine Vermutung auf meiner Seite, da ich die Physik mit diesem Ansatz selbst nie implementiert habe.
BEARBEITEN:
Um die Größe der Reibungskräfte zu berechnen, haben Sie den Versatzwert in Ihrem Bild. Da Sie verlet mit festem Zeitschritt verwenden, wissen wir, dass dieser Versatz tatsächlich die Geschwindigkeit ist, die der Kontakt in Richtung der Kontaktnormalen hatte (nun ja nicht genau, und ich denke, das meint der Autor mit einer besseren Annäherung an die Reibung ). Es ist wichtig, die Geschwindigkeit entlang der Kontaktnormalen zu kennen, da wir damit den Impuls bestimmen können. Der beste Weg ist, Reibung in Form von Impulsen in jedem Rahmen anzuwenden, in dem ein Kontakt besteht. Die Größe der Reibung in den Achsen parallel zur Kontaktebene wird durch den Reibungskoeffizienten bestimmt (bestimmt durch die Materialien, zum Beispiel 0,7 für ziemlich hohe Reibung). Die maximale Reibung, die Sie haben könnten, ist der Reibungskoeffizient multipliziert mit dem Versatz. Beachten Sie, dass dieser Wert größer sein kann als die tatsächliche Geschwindigkeit entlang einer der Achsen. In diesem Fall haben Sie Haftreibung und das Partikel sollte sich in dieser Achse überhaupt nicht bewegen. Wenn der Wert kleiner als dieser Wert ist, bewegt sich das Partikel ein wenig, wird jedoch verlangsamt, dh dynamische Reibung.
quelle