3D Vektor rotieren

Diskutiere 3D Vektor rotieren im Mathematik Forum; Hallo, ich habe einen 3D Vektor v und wollte ihn um die z-Achse rotieren. Hier mein bisheriger Versuch: v.x = v.x * Math.cos(angle)...

  1. member42
    member42 Mitglied
    Hallo,
    ich habe einen 3D Vektor v und wollte ihn um die z-Achse rotieren.

    Hier mein bisheriger Versuch:
    Code (Java):

                v.x = v.x * Math.cos(angle) - v.y * Math.sin(angle);
                v.y = v.x * Math.cos(angle) + v.y * Math.sin(angle);
                v.z = v.z;
     
    Aber anscheinend stimmt was mit der Formel nicht, den die Rotation funktioniert nicht.
     
  2. Vielleicht hilft dir dieses Training hier weiter.
  3. Robat
    Robat Bekanntes Mitglied
    Hab jetzt nicht geschaut ob die Formel stimmt aber hast du den Winkel im Bogenmass angegebenen?
     
    member42 gefällt das.
  4. httpdigest
    httpdigest Aktives Mitglied
    Du musst die berechneten v.x und v.y in Zwischenvariablen speichern, da die erste Zuweisung v.x überschreibt, welches aber in der zweiten Zeile gelesen wird, und da muss es noch der original Wert sein.
     
    member42 gefällt das.
  5. member42
    member42 Mitglied
    Danke, ich speicher den Wert jetzt zwischen und wandle den Winkel in Bogenmaß um, aber die Rotation funktioniert immer noch nicht.

    Code (Java):


    angle = Math.toRadians(angle);
    tmpX = v.x * Math.cos(angle) - v.x * Math.sin(angle);
    tmpY = v.y * Math.cos(angle) + v.y * Math.sin(angle);
                                       
    v.x = tmpX;
     v.y = tmpY;
     v.z = v.z;
     
     
  6. httpdigest
    httpdigest Aktives Mitglied
    member42 gefällt das.
  7. httpdigest
    httpdigest Aktives Mitglied
    Hier die Matrix-Vector Multiplikation der Rotationsmatrix mit dem Vektor nochmal als ASCII-Art:
    Code (Text):

    /            \   /   \   /                   \
    | +cos, -sin | * | x | = | x * cos - y * sin |
    | +sin, +cos |   | y |   | x * sin + y * cos |
    \            /   \   /   \                   /
     
     
    member42 gefällt das.
  8. member42
    member42 Mitglied
    Ich habe ein Würfel aus 8 Vektoren, der um sich selbst rotieren soll. Mit der Formel klappt es jetzt auch, nur bewegt er sich dabei auf einer relativ großen Kreisbahn. Was muss ich den noch ändern, damit er sich um sich selbst dreht?
     
  9. httpdigest
    httpdigest Aktives Mitglied
    Kommt jetzt auf die Reihenfolge deiner affinen Transformationen an.
    Wenn du hast: T * R * v, dann bewegst du ihn zuerst per T an seine Position und mit R rotiert er sich dann um seinen eigenen lokalen Ursprung.
    Mit R * T * v hingegen würde er sich um den Ursprung der "Welt" rotieren.
    Zeig doch nochmal mehr von deinen Vektor-Transformationen.
     
  10. member42
    member42 Mitglied
    Ich wandle den 3D Vektor in einen 2D Vektor um (Bildschirmebene). Dafür stelle ich die Geradengleichung für den Kamera Vektor und den Vektor der projiziert werden soll auf und berechne den Schnittpunkt mit der Bildschirmebene und dieser Gerade. Beispiel Kamera bei (10,10,10) und P bei (2,5,3):
    Geradengleichung : (10,10,10) + (-8,-5,-7) * k = (0,y,z) der Schnittpunkt muss bei x=0 sein da x-Ebene schneidet, dann kann ich Faktor k und damit y und z berechen und habe den 2D Vektor der auf die Bildschirmbene gezeichnet wird.


    Code (Java):

    public Vector transformTo2D(Vector camera) {
               
            double factor=0.0;
       
            Vector projection = new Vector(0,0);
            Vector direction = new Vector(0,0,0);
       
            direction.x = camera.inverse().x + x;
            direction.y = camera.inverse().y + y;
            direction.z = camera.inverse().z + z;;
       
            factor = (-camera.x) / direction.x;
       
            projection.y = camera.y + direction.y * factor;
            projection.z = camera.z + direction.z * factor;
       
       
            return new Vector(projection.z, projection.y);
        }
     
     
  11. httpdigest
    httpdigest Aktives Mitglied
    Wenn du einen Vektor rotierst, dann ist _immer_ der Ursprung (0, 0, 0) das Rotationszentrum. Wenn das lokale Zentrum deines Würfels also z.B. (2, 5, 3) ist, dann wird sich der Würfel immernoch um den Ursprung (0, 0, 0) rotieren, und eben nicht um (2, 5, 3).
    Wenn du also willst, dass der Würfel sich "um sich selbst" dreht (für eine Definition von "um sich selbst" = "um sein lokales Zentrum von (2, 5, 3)"), dann musst du ihn erst in den Ursprung transformieren (mit einer Translation von (-2, -5, -3)), dann die Rotation durchführen und dann wieder zurückbewegen (Negation der ersten Translation, also (2, 5, 3)).
     
  12. Wenn du Java lernen möchtest, empfehlen wir dir dieses Online-Training hier
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

3D Vektor rotieren - Ähnliche Themen

Matrix, Vektor
Matrix, Vektor im Forum Java Basics - Anfänger-Themen
Frage zu Vektoren
Frage zu Vektoren im Forum Für Verirrte - Fragen zu JavaScript
Vektoren (2-dimensional)
Vektoren (2-dimensional) im Forum Java Basics - Anfänger-Themen
Programmierer gesucht - aus Vektorgrafik ein Relief machen
Programmierer gesucht - aus Vektorgrafik ein Relief machen im Forum Private Stellangebote und Stellensuche von Usern
Ein und Ausgabe von Vektoren
Ein und Ausgabe von Vektoren im Forum Hausaufgaben
Thema: 3D Vektor rotieren