Angenommen, Sie haben ein Objekt, das frei im Raum schwebt. Sie haben einen Vektor, auf den dieses Objekt zeigen soll, und einen Vektor, der die Richtung darstellt, in die es gerade zeigt. Aus diesen beiden können Sie die Rotation (Matrix, Quaternion, was auch immer) erhalten, die die Änderung der Ausrichtung darstellt, um die beiden Vektoren in Ausrichtung zu bringen.
Wenn Sie nur die Möglichkeit haben, ein Drehmoment (Ableitung der Winkelgeschwindigkeit) auf Ihr Objekt aufzubringen, was ist ein guter Algorithmus zum Aufbringen eines Drehmoments über die Zeit, der das Ziel nicht überschreitet / unterschreitet?
(In diesem Fall handelt es sich um ein Raumschiff, das sich mithilfe von Triebwerken automatisch in Fahrtrichtung ausrichten möchte. Das Rollen ist irrelevant.)
quelle
Antworten:
Dies kann wie der ähnliche Fall für die lineare Beschleunigung behandelt werden.
Erste zu beachtende Tatsache: Da das Schiff mit einer Winkelgeschwindigkeit von Null startet und Sie möchten, dass es mit einer Winkelgeschwindigkeit von Null endet, bedeutet dies, dass die gesamte Geschwindigkeitsänderung gleich Null sein muss.
Daraus können wir erkennen, dass das Integral der Beschleunigung über die Zeit gleich Null sein muss - es muss genau so viel positive Beschleunigung wie negative Beschleunigung geben.
Daher muss Ihre Lösung, was auch immer sie ist, auf diese Eigenschaft beschränkt sein: Gleiche "Gesamt" -Beschleunigung vorwärts und rückwärts.
Die Form Ihres Beschleunigungs-Zeit-Diagramms sollte folgendermaßen aussehen:
Wenn man das betrachtet, gibt es so viele mögliche Formen und Gestalten, in denen Ihre Beschleunigung sein könnte! Lassen Sie uns einige Annahmen für die gewünschte Beschleunigungsform treffen, um eine einfache / präzise Antwort zu geben.
Um eine einfache Antwort zu erhalten, muss die Beschleunigung in einem von drei Zuständen erfolgen: vorwärts, rückwärts oder null. Vorwärts und rückwärts sind gleich groß und die Zustände können sofort umgeschaltet werden. (Es gibt kein allmähliches Hochfahren der Beschleunigung)
Mit dieser Gleichung können Sie die Änderung der Entfernung für eine bestimmte Beschleunigung über einen bestimmten Zeitraum ermitteln:
Die einfachste Lösung wäre hier, zu beschleunigen, bis Sie den halben Punkt erreicht haben, und dann den Rest des Weges abzubremsen.
Wir nehmen
P
die Gesamtstrecke, die Sie zurücklegen möchten:Also im Wesentlichen:
a
fürsqrt(P/a)
Zeiteinheiten (Einheiten basierend auf Ihren Einheiten für die Beschleunigung)Dies ist nicht die einzige Lösung. Sie gelangen in kürzester Zeit dorthin (
2*sqrt(P/a)
). Aber was ist, wenn Sie eine entspanntere Version wünschen?In diesem Fall können Sie 1/3 des Weges beschleunigen, für 1/3 ausrollen und den Rest des dritten abbremsen. Oder 1/4, rollen Sie für 1/2, bremsen Sie auch 1/4 ab.
Oder Sie könnten für eine festgelegte Zeit beschleunigen und dann für eine festgelegte Zeit abbremsen, aber warten Sie, bis Sie die genaue Position erreicht haben, bevor Sie mit dem Abbremsen beginnen.
quelle