Koordinatentransformation



  • Du kannst vom ersten zum zweiten Koordinatensystem mit folgender Matrix wechseln:

    (0  1  0)
    S = (1  0  0)
        (0  0 -1)
    

    Damit kannst Du auch die Rotationsmatritzen zwischen den beiden Koordinatensystemen hin- und herschieben:

    Matrix A im einen Koordinatensystem entspricht SAS im anderen Koordinatensystem, da S selbstinvers ist.



  • hm ja , die matrix würde die Achsen so transformieren:

    x = y
    y = x
    z = -z

    Allerdings hab ich das auch schon versucht und das Ergebnis war nicht richtig 😞

    Ich habe jetzt versucht auf folgende art zu transformieren:

    M = ST

    mit M als Transformierte Rotationsmatrix,
    S =

    [ 0, 1, 0]
    [-1, 0, 0]
    [ 0, 0, 1]
    

    Und T der Rotationsmatrix des Objekts im ersten Programm.

    Damit kriege ich die richtigen Drehungen aber den negativen Winkel!!

    Ich merk grad dass das was ich im ersten Post geschrieben habe quatsch ist...



  • Vergiss Rotationsmatrizen, Basistransformation heisst das Zauberwort.
    Und die Transformationsmatrix hat dir Jester schon gegeben...
    http://de.wikipedia.org/wiki/Basistransformation



  • [quote="Azrael, il Meraz"
    M = ST

    mit M als Transformierte Rotationsmatrix,
    [/quote]

    versuch mal M = STS, mit dem S, das ich oben angegeben habe.



  • Ich hab gesagt dass ich mit genau dieser Matrix schon versucht hab, die Koordinaten zu transformieren. Hier ist das Ergebnis:

    Bei beiden Programmen ist der betrachtete Gegenstand nach X ausgerichtet:
    Programm Nr.1 mit M = T:

    0  1  0
    -1  0  0
     0  0  1
    

    Programm Nr.1 mit M = STS:

    0 -1  0
     1  0  0
     0  0  1
    

    Programm Nr.2:

    1  0  0
     0  1  0
     0  0  1
    


  • Und das funktioniert nicht? Sicher, dass die Basistransformation, die Du angegeben hast stimmt?

    edit: und was genau heißt "an der X-Achse ausgerichtet"?



  • Azrael, il Meraz schrieb:

    Ich merk grad dass das was ich im ersten Post geschrieben habe quatsch ist...

    Hier hab ich eine graphische darstellung:
    http://xcpp.org/ressources/Problem.png



  • Azrael, il Meraz schrieb:

    Hier hab ich eine graphische darstellung:
    http://xcpp.org/ressources/Problem.png

    Auf jedem der drei Bilder ist nur genau ein Koordinatensystem zu sehen. Und nur auf dem obersten Bilder sind die Achsen X,Y und Z beschriftet.
    Wo ist da also eine Koordinatentransformation?

    Weiter zeigen Bild 2 und Bild 3 genau das gleiche. Die Matrix rechts daneben ist aber verschieden. Was willst Du damit ausdrücken?



  • Sorry beim zweiten bild ist rot die X-, grün die Y- und Blau die Z-Achse.

    Das ist gerade mein Problem - das ist absolut das gleiche, allerdings speichern die Programme die relative Drehung auf unterschiedliche Art und Weise.

    Während für das erste Programm (3ds max übrigens) diese Position die Ausgangsposition ist und deshalb die Einheitsmatrix als Drehung gespeichert hat, sieht das zweite Programm (Blender3D) darin eine 90° Drehung um die Z Achse.

    Ein Versuch, die Matrix wieder um -90° zurückzudrehen liefert falsche Ergebnisse.
    Meine frage ist wie man die Drehmatrix "richtig" umwandelt



  • ok habs hinbekommen. Hier meine Lösung in python:

    # turn the matrix (Y becomes the X axis)
        tm = (YtoXMatrix*tm)
        # translation part
        trpart = rtrpart = tm.translationPart()
        # obvious
        rotpart = tm.rotationPart()
        rm = rotpart.copy()
        rm.resize4x4()
        if not righthanded:
            rm[3][0] = trpart.x
            rm[3][1] = trpart.y
            rm[3][2] = trpart.z
            rm[3][3] = 1.0
        else:
            rm[3][0] = -trpart.x
            rm[3][1] = -trpart.y
            rm[3][2] = -trpart.z
            rm[3][3] = 1.0
        rotation = rm.rotationPart().invert()
        translation = rm.invert().translationPart()
    

    mit YtoXMatrix =

    [ 0,1,0,0]
    [-1,0,0,0]
    [ 0,0,1,0]
    [ 0,0,0,1]
    

    Liefert das richtige ergebnis


Anmelden zum Antworten