3D Vektor rotieren

Bitte aktiviere JavaScript!
Hallo,
ich habe einen 3D Vektor v und wollte ihn um die z-Achse rotieren.

Hier mein bisheriger Versuch:
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.
 
A

Anzeige




Vielleicht hilft dir unser Java-Tutorial hier weiter —> (hier klicken)
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.
 
Danke, ich speicher den Wert jetzt zwischen und wandle den Winkel in Bogenmaß um, aber die Rotation funktioniert immer noch nicht.

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;
 
Hier die Matrix-Vector Multiplikation der Rotationsmatrix mit dem Vektor nochmal als ASCII-Art:
Code:
/            \   /   \   /                   \
| +cos, -sin | * | x | = | x * cos - y * sin |
| +sin, +cos |   | y |   | x * sin + y * cos |
\            /   \   /   \                   /
 
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?
 
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.
 
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.


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);
    }
 
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)).
 
A

Anzeige




Hier lernst du alle wichtigen Java-Grundlagen.
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben