Bis jetzt habe ich die Rotation und Translation eines bestimmten Objekts separat behandelt, wobei normale Quaternionen für die Rotation und Vektoren für die Translation verwendet wurden. Ich möchte jedoch doppelte Quaternionen verwenden, um sowohl die Translation als auch die Rotation eines Objekts zu handhaben, da ich beabsichtige, sie später für die Starrkörperdynamik zu verwenden. Grundsätzlich möchte ich es, damit ich ein Objekt mit einer anfänglichen Doppelquaternion haben kann, dieses Dual mit einer zweiten Doppelquaternion multiplizieren kann, die die Änderung seiner Verschiebung beschreibt, und am Ende eine dritte Doppelquaternion habe, die seine endgültige Position beschreibt, nachdem die Änderung angewendet wurde. Ich möchte, dass sich ein bestimmtes Objekt (ich verwende eine Kugel als Beispiel) lokal um seinen eigenen Schwerpunkt dreht, sich aber global bewegt. Hier ist ein Video der Art von Bewegung, nach der ich suche, die anscheinend mit zwei Quaternionen erreicht wurde:
http://www.youtube.com/watch?v=k9I7Bbj02O8
Leider wird der Link zu diesem Beispielquellcode nicht geladen. Jetzt habe ich mehrmals versucht, dies zum Laufen zu bringen, aber das Objekt, das ich verschiebe (wieder eine Kugel), bewegt sich entweder global, dreht sich aber nicht lokal oder dreht sich lokal, bewegt sich aber nicht global (seine Bewegung basiert darauf, wie es ist gedreht wird). Grundsätzlich fasst dies zusammen, was ich tue:
1) Zu Beginn des Programms habe ich ein Objekt mit einer anfänglichen doppelten Quaternion, die seine Position und Drehung beschreibt (ich werde diese Quaternion Q1 nennen).
2) Ich ändere die Rotations- und / oder Translationsgeschwindigkeit des Objekts. Daraus berechne ich ein zweites Quaternion, Q2, das seine Änderung in Rotation und Beschleunigung beschreibt.
3) Ich multipliziere dann die beiden Quaternionen miteinander (ich habe an diesem Punkt beide Multiplikationsordnungen ausprobiert, aber ich glaube, die richtige Reihenfolge sollte Q2 * Q1 sein). Die Formel, mit der ich sie multipliziere, lautet Q1 * Q2 = r1 * r2 + e (r1 * d2 + d1 * r2).
4) An dieser Stelle habe ich eine dritte doppelte Quaternion, die den neuen Standort und die neue Ausrichtung des Objekts beschreiben soll. Der Realteil des Duals ist eine Quaternion, die seine Ausrichtung beschreibt, und der Dualteil kann unter Verwendung der Formel t = 2 * dual * (real ') in einen Translationsvektor umgewandelt werden, wobei real' das Konjugat des Realteils des dritten Duals ist Quaternion.
Diese Methode liefert jedoch nicht die gewünschten Ergebnisse. Die Ergebnisse, die ich erhalte, sind vorhersehbar. Sie sind einfach nicht der Typ, den ich suche. Das ist lokale Rotation, aber globale Übersetzung. Könnte mir bitte jemand die richtige Methode dazu sagen?
quelle
Antworten:
Nun, falls Sie immer noch interessiert sind, wenn Sie mit der Doppelquaternion beginnen möchten - nur der grundlegenden Transformation - hin und her (dh starren Transformationen) -, sollten Sie sich ein Anfängerpapier zu diesem Thema ansehen
Ein Leitfaden für Anfänger zu Dual-Quaternionen: Was sie sind, wie sie funktionieren und wie sie für 3D-Zeichenhierarchien verwendet werden
Link: http://wscg.zcu.cz/wscg2012/short/A29-full.pdf
Chow für jetzt,
Simons
quelle
Sie finden die Webseite im Internetarchiv.
http://wayback.archive.org/web/*/http://quaternion.110mb.com/
Aber leider ist es nicht sehr hilfreich.
Bitte werfen Sie einen Blick auf das folgende wissenschaftliche Papier. http://www.scss.tcd.ie/publications/tech-reports/reports.06/TCD-CS-2006-46.pdf Hier wird ausführlich erklärt, was Sie tun müssen.
quelle