Vektor-Quaternion-Vektor



  • Hi,

    ich habe einen Richtungsvektor und will jetzt die Orientierung im Raum als Quaternion berechnen. Wie mache ich das? Und wie berechne ich aus dem Quaternion wieder den Vektor?

    Quaternions wollen irgendwie nicht in meinen Schaedel, deshalb bin ich fuer Anworten sehr dankbar.

    Ciao
    Kande



  • IMHO geht das so:

    Vector mit v.x, v.y, v.z
    >
    Quenternion(v.x, v.y, v.z, w=1) 
    Berechnung mit dem Quanternion, zum Beispiel Rotation
    >
    Vector(q.x, q.y, q.z)
    


  • um einen einen Quaternion in einen Vector zu konvertieren würde ich (?das?) Quaternion mit dem Vector malnehmen:

    ich benutze immer einen negativen z-Vector: RichtungsVector = RichtungsQuaternion* Vector3(0, 0, -1);

    es kommt darauf an, wie du den Richtungsvector vorher in ein Quaternion umgewandelt hast. Ich würde sagen, dass man die Umkehrrechnung machen muss.

    keine Ahnung , ob das richtig ist:

    RichtungsQuarternion = Quarternion(0, 0, -1, 0) / RichtungsVector;

    oder so...



  • Danke fuer die Antworten, dennoch sind immer noch Fragen offen, denn ich gebe zu, dass ich so meine Probleme damit habe ein Konstrukt im 4 dimensionalen Raum zu verstehen, deshalb tue ich mir da so schwer.

    [quote]Quenternion(v.x, v.y, v.z, w=1) und Vector(q.x, q.y, q.z)[/quote]

    Hmmm.... aber das bedeutet doch, dass ich meinen Richtungsvektor als Rotationsachse benutze. Ich will aber dass mein Quaternion in genau die Richtung deutet, in die mein Vektor zeigt. Also nehmen wir mal an mein Vektor sei V(0,0,1) so zeigt mein Vektor mit dem Betrag 1 in z Richtung. Nun ist die Rotationsachse aber orthogonal zum Richtungsvektor, sollte also soetwas sein wie RV(0,1,0).
    Und wie genau sieht eine Multiplikation eines Vektors mit einem Quaternion aus? Multipliziert man nur die drei Realteile?



  • DEvent schrieb:

    IMHO geht das so:

    Vector mit v.x, v.y, v.z
    >
    Quenternion(v.x, v.y, v.z, w=1) 
    Berechnung mit dem Quanternion, zum Beispiel Rotation
    >
    Vector(q.x, q.y, q.z)
    

    Einen Vektor allein kann man gar nicht in ein Quaternion umwandeln, da ein Quaternion benutzt wird, um eine Orientierung anzugeben. Ein Vektor allein gibt keine Orientierung an, da man sich immer noch um die eigene Achse drehen könnte und der Blickrichtungsvektor gleich bliebe.
    Am besten schaust Du mal in die DirectX-SDK-Dokumentation, dort steht einiges zum Thema Quaternions.



  • OK, was wenn ich eine Position im Raum habe und ein Quaternion und eine Laenge, also Die Position im Raum zeigt den Anfang eines Vektors und das Quaternion die Orientierung im Raum und die Laenge den Betrag des Vektors. Wie berechne ich dann das Ende des Vektors?
    Und in die Andere Richtung muss es doch auch moeglich sein, wenn ich den Anfang, das Ende und den Betrag eines Vektors habe und seine Drehachse, dann muss es doch auch moeglich sein einen Vektor in ein Quaternion umzuwandeln.



  • Mit einem Richtungsvector kannst du wenig anfangen, wie schon ThomasRiker sagt.

    Einen Vektor allein kann man gar nicht in ein Quaternion umwandeln, da ein Quaternion benutzt wird, um eine Orientierung anzugeben. Ein Vektor allein gibt keine Orientierung an, da man sich immer noch um die eigene Achse drehen könnte und der Blickrichtungsvektor gleich bliebe.
    Am besten schaust Du mal in die DirectX-SDK-Dokumentation, dort steht einiges zum Thema Quaternions.

    um es etwas korrekter zu gestallten:

    man könnte 3 Vectoren benutzen:

    Vector1 = Quarternion * Vector(0, 0, 1);
    Vector2 = Quarternion * Vector(0, 1, 0);
    Vector3 = Quarternion * Vector(1, 0, 0);

    es gibt eine Funktion (ich glaube ich hab die mal im Zusammenhang mit einer Kamera in DirectX benutzt) die die drei Richtungsvectoren in eine Matrize umwandeln und aus der Matrize bekommst du ganz einfach ein Quarternion.



  • Naja, was ich mit dem Vektor mache ist ja egal.

    Wie schon gesagt, mir geht es lediglich darum, dass man doch mit einem Quaternion, einer Position im Raum und einem Betrag einen eindeutigen Punkt im 3 dimensionalen Raum beschreiben kann. Also:

    Punkt im Raum = Positionsvektor + Richtung aus Quaternion normalisiert * Betrag

    Aber wie bekomme ich den Richtungsvektor aus dem Quaternion? Vielleicht ist das verstaendlicher. Ich kann mir nicht vorstellen, dass das nicht moeglich sein soll.



  • RichtungsVector = RichtungsQuaternion* Vector3(0, 0, -1);

    Wo bei deinem Modell forne ist, wurde bei der Modellierung festgelegt, vielleicht musst du den Vector3(0, 0, -1); etwas abändern. In DirectX wird dein Vector wahrscheinlich nicht Vector3 heißen....



  • Von einem Model war nie die Rede. Ich will auch nicht mit Bibliotheken wie DirectX arbeiten, ueber diesen Punkt bin ich schon laengst hinweg, sondern es geht mir um die 3D Mathematik.

    Es geht mir schlicht und ergreifend darum, wie ich einen Punkt (Vektor) im 3 dimensionalen Raum berechne, wenn ich einen Punkt im Raum habe (beschrieben durch einen Ortsvektor), ein Quaternion habe, der (die, das?) mir ja eine Orientierung (Richtung) im Raum beschreibt und eine Laenge (float), die mir die Entfernung zwischen dem Ort (beschrieben durch den Ortsvektor) in Richtung der Orientierung (beschrieben durch den Quaternion) angibt.

    Kurz gesagt, koennte man doch den Quaternion in einen Richtungsvektor umwandeln, denn ein Richtungsvektor macht nichts anderes, er gibt eine Richtung im Raum an. Dann koennte man naemlich einfach rechnen

    Punkt im Raum = Ortsvektor + (normierter Richtungsvektor * Laenge)

    Also, wie berechne ich einen normierten im Ursprung beheimateten Richtungsvektor aus einem Quaternion?


Anmelden zum Antworten