Wie berechne ich die Kräfte, die von einem gespannten Draht ausgeübt werden, der 2D-Objekte umwickelt?


10

Angenommen, ich habe ein Physikprimitiv, das ich als "Draht" bezeichnen werde, der um eine 2D-Umgebung gewickelt ist (wie in dieser Frage beschrieben ).

Hier ist eine Illustration, wie das aussehen könnte:

Draht um statische und dynamische Spielobjekte gewickelt

In der Beispielabbildung: Die Box wird vom Draht nach oben gezogen (hochgehalten), und die Box zieht den Draht nach unten. Das Objekt auf der Feder wird vom Draht nach unten gedrückt, drückt aber auch den Draht nach oben.

Obwohl ich noch nicht herausgefunden habe, wie ich es implementieren soll, gehe ich davon aus, dass der Draht frei über die Punkte gleitet, um die er gewickelt ist.

Wie berechnen Sie in einer 2D-Physiksimulation (dh rahmenbasiert) die Kräfte (oder Impulse), die auf die Objekte ausgeübt werden sollen, die an einem solchen Draht befestigt oder von diesem umwickelt sind?


Wie ich in meiner ersten Frage angedeutet habe , stelle ich mir vor, dass, wenn das einzige nicht statische Objekt "auf" dem Draht die Masse am Ende wäre, die Kraft mit einer Verbindung fester Länge zwischen der Masse und dem vorherigen Punkt identisch wäre das auf dem Draht.

Antworten:


9

Die Box, die am Draht zieht, übt eine Spannung auf den Draht aus. Spannung ist eine Kraft, gemessen in Newton. Wenn wir vereinfachende Annahmen treffen (keine Reibung zwischen Draht und Umgebung), ist die Spannung an allen Punkten entlang des Drahtes gleich.

Wenn wir Ihr Beispiel als statisch betrachten, ist die Spannung am Draht nur das Gewicht der Box:

T = m * g

Dabei ist m die Masse des Kastens und g die Erdbeschleunigung (dh 9,8 m / s ^ 2). Beachten Sie, dass dies nur im statischen Fall gültig ist. Eine Erklärung zur Berechnung im dynamischen Fall finden Sie weiter unten.

Die Kraft an jeder Biegung des Drahtes ist dann nur die Projektion der Spannung auf die relevante Richtung. Zum Beispiel ist die Kraft an der Spitze des Federobjekts eine Kraft entlang der Kontaktnormalen von der Größe:

F = T * cos(angle between wire and contact normal)

In diesem Fall wäre die Kontaktnormalenrichtung die Halbierung des Winkels zwischen den Drahtsegmenten. Die Kraft an Ihrem zweiten markierten Punkt auf die Umgebung ist irrelevant, da sie keinen Einfluss auf die Spannung oder irgendetwas anderes hat.

Im dynamischen Fall ist die Spannung einfach die Zwangskraft, die Sie auf die Box ausüben, um sie am Draht zu halten. Wenn die Physik-Engine also impulsbasiert ist, ist die Spannung nur:

T = impulse / timestep

Dies führt zu dem allgemeinen Algorithmus zum Umwickeln des Drahtes um die Umgebung. Die wichtige Eigenschaft ist die Gesamtlänge des Drahtes. Es muss nur das letzte Segment simuliert werden, alle früheren Segmente können als fest betrachtet werden. Damit die Länge des letzten Segments bekannt ist, subtrahieren Sie einfach die Längen der früheren Segmente von der Gesamtlänge. Dann kann das letzte Segment eine einfache Federbeschränkung sein. Teilen Sie dann einfach ein Segment, wenn es sich mit der Umgebung schneidet, und entfernen Sie die Teilung, wenn sich die Biegung gerade richtet.


Also - nur um zu verdeutlichen: Ich hätte die freie Masse auf einer Verbindung mit fester Länge, die bei der nächsten "Biegung" des Drahtes an der Welt befestigt wird. Ich finde heraus, welchen Impuls diese Verbindung auf die Box in jedem Rahmen ausübt, und von dort kann ich die Spannung im Draht bekommen?
Andrew Russell

Auch - ich mache mir Sorgen F = T * cos(angle between wire and spring axis). Welcher Winkel genau? Außerdem: Ich glaube nicht, dass es (in der Simulation) eine sinnvolle Möglichkeit gibt, den Draht "wissen" zu lassen, dass an diesem Objekt eine Feder angebracht ist.
Andrew Russell

@ Andrew - Für Ihren ersten Punkt ist die von der Verbindung auf die Box ausgeübte Kraft per Definition gleich der Spannung im Draht. Für Ihren zweiten Punkt haben Sie Recht, dies war nicht sehr klar, es ist tatsächlich der Winkel zwischen dem Draht und dem Kontaktpunkt normal. Ich habe die Antwort bearbeitet, um dies klarer zu machen.
Niall

4

Ich schätze definitiv Ihre Frustration in diesen drahtbasierten Threads, es ist ein schwer zu lösendes Problem. Wir haben nie eine perfekte Kollision erreicht, aber die Einschränkungssimulation ist definitiv machbar und unkompliziert.

Eine Drahtbeschränkung ist tatsächlich fast identisch mit einer regulären Abstandsbeschränkung. Anstelle von zwei Randbedingungen haben Sie n + 1 für einen Draht mit n Segmenten, einen für jeden Scheitelpunkt - an den Endpunkten ist der Jacobi identisch mit einer Abstandsbedingung (dh es ist so etwas wie d / | d |, wobei d der Vektor ist zwischen Punkten), und für die internen Knoten ist der Jacobi so etwas wie (a / | a | - b / | b |), wobei a und b die Vektoren vom Knoten zu den benachbarten Knoten sind. (Entschuldigung, es ist ein paar Jahre her, seit ich das berührt habe ...)

Sie können es nicht a-la vortäuschen "nur das letzte Segment ist dynamisch", da Objekte wie in Ihrem Beispiel mit anderen Segmenten interagieren können, Sie jedoch nur Massen an den Enden des Seils simulieren müssen - intern kann das Seil sei masselos. Die an jedem Knoten berechneten Einschränkungsimpulse müssen auf das Objekt angewendet werden, das an diesem Knoten kollidiert.

Hier sind einige verwandte Artikel:

Die ersten drei sind relativ neu und sollten viel helfen. Seite 75 des unteren Dokuments beschreibt eine "Multibar" -Einschränkung, die im Wesentlichen ein Draht ist.

Viel Glück :)

Raigan


0

Die Grundidee ist, dass die Länge des Seils gleich bleibt. Wenn es hochgeschoben wird, müssen Sie dort einen "Split Point" erstellen. Dann bestimmt das Seil, auf welcher Seite es befestigt ist, weil es in dieser Richtung nicht "wachsen" kann. Da es an etwas auf der rechten Seite befestigt ist, wird das Stück Seil auf der linken Seite kürzer und das Stück zwischen dem Teilungspunkt und dem angebrachten Punkt wird etwas länger. Berechnen Sie dann, wie Niall sagte, die Spannung des Drahtes. Wie ich das tun würde, ist die Spannung jedes "Stücks" Seil zu berechnen. Sie können dies dann verwenden, um die beteiligten Kräfte zu bestimmen.

Hoffe das hilft.


Nicht wirklich, sorry.
Andrew Russell
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.