Hallo zusammen!
Ich habe heute mit einem kleinen Projekt angefangen, in dem ich eine einfach Animation eines 3D Cubes machen will.
Da ich heute erst mit Vektoren in der Schule angefangen habe :toll: , wollte ich erst mal grundsätzlich fragen ob mein Vorgehen richtig ist.
Ich habe eine Vector-List mit 8 Vektoren drin: A (2,-2,-2), B (2, 2,-2), C (-2,2,-2), D (-2,-2,-2), E (2,-2,2), F (2, 2,2), G (-2,2,2), H (-2,-2,2)
Weiterhin habe ich mir eine Methode geschrieben, die diese Vektoren um eine bestimmte Achse dreht:
Das ist was ich bis jetzt habe, doch hier kommen schon ein paar Probleme auf.
Wenn ich den Cube jetzt um 90° drehe, sind die Ergebnisse, meines Erachtens richtig. Mit 45° wiederum nicht. Seht ihr einen Fehler im Code?
Ergebnisse sind übrigens:
Und am einfachsten ist es das ganze dann nicht perspektivisch, sonder orthogonal anzuzeigen oder? Und dann von vorne, sodass die x1-Achse so zu sagen nicht beachtet werden muss?
Ich hoffe ich liege nicht zu sehr daneben ???:L
Ich habe heute mit einem kleinen Projekt angefangen, in dem ich eine einfach Animation eines 3D Cubes machen will.
Da ich heute erst mit Vektoren in der Schule angefangen habe :toll: , wollte ich erst mal grundsätzlich fragen ob mein Vorgehen richtig ist.
Ich habe eine Vector-List mit 8 Vektoren drin: A (2,-2,-2), B (2, 2,-2), C (-2,2,-2), D (-2,-2,-2), E (2,-2,2), F (2, 2,2), G (-2,2,2), H (-2,-2,2)
Weiterhin habe ich mir eine Methode geschrieben, die diese Vektoren um eine bestimmte Achse dreht:
Java:
/**
*
* @param vectorList
* @param angle
* @return
*/
public static Vector<Vector3D> rotateVectorX(Vector<Vector3D> vectorList, double angle) {
Vector<Vector3D> newVectorList = new Vector<Vector3D>();
angle = Math.toRadians(angle);
for(int i = 0; i < vectorList.size(); i++) {
Vector3D currentVec = vectorList.get(i);
double newX1 = currentVec.getX1();
double newX2 = (Math.cos(angle) * currentVec.getX2()) - (Math.sin(angle) * currentVec.getX2());
double newX3 = (Math.sin(angle) * currentVec.getX3()) + (Math.cos(angle) * currentVec.getX3());
newVectorList.add(new Vector3D(newX1, newX2, newX3, currentVec.getName()));
}
return newVectorList;
}
/**
*
* @param vectorList
* @param angle
* @return
*/
public static Vector<Vector3D> rotateVectorY(Vector<Vector3D> vectorList, double angle) {
Vector<Vector3D> newVectorList = new Vector<Vector3D>();
angle = Math.toRadians(angle);
for(int i = 0; i < vectorList.size(); i++) {
Vector3D currentVec = vectorList.get(i);
double newX1 = (Math.cos(angle) * currentVec.getX1()) + (Math.sin(angle) * currentVec.getX1());
double newX2 = currentVec.getX2();
double newX3 = (-Math.sin(angle) * currentVec.getX3()) + (Math.cos(angle) * currentVec.getX3());
newVectorList.add(new Vector3D(newX1, newX2, newX3, currentVec.getName()));
}
return newVectorList;
}
/**
*
* @param vectorList
* @param angle
* @return
*/
public static Vector<Vector3D> rotateVectorZ(Vector<Vector3D> vectorList, double angle) {
Vector<Vector3D> newVectorList = new Vector<Vector3D>();
angle = Math.toRadians(angle);
for(int i = 0; i < vectorList.size(); i++) {
Vector3D currentVec = vectorList.get(i);
double newX1 = (Math.cos(angle) * currentVec.getX1()) - (Math.sin(angle) * currentVec.getX1());
double newX2 = (Math.sin(angle) * currentVec.getX2()) + (Math.cos(angle) * currentVec.getX2());
double newX3 = currentVec.getX3();
newVectorList.add(new Vector3D(newX1, newX2, newX3, currentVec.getName()));
}
return newVectorList;
}
Das ist was ich bis jetzt habe, doch hier kommen schon ein paar Probleme auf.
Wenn ich den Cube jetzt um 90° drehe, sind die Ergebnisse, meines Erachtens richtig. Mit 45° wiederum nicht. Seht ihr einen Fehler im Code?
Ergebnisse sind übrigens:
Code:
90°:
A: (-1.9999999999999998|-2.0|-2.0)
B: (-1.9999999999999998|2.0|-2.0)
C: (1.9999999999999998|2.0|-2.0)
D: (1.9999999999999998|-2.0|-2.0)
E: (-1.9999999999999998|-2.0|2.0)
F: (-1.9999999999999998|2.0|2.0)
G: (1.9999999999999998|2.0|2.0)
H: (1.9999999999999998|-2.0|2.0)
45°:
A: (2.220446049250313E-16|-2.82842712474619|-2.0)
B: (2.220446049250313E-16|2.82842712474619|-2.0)
C: (-2.220446049250313E-16|2.82842712474619|-2.0)
D: (-2.220446049250313E-16|-2.82842712474619|-2.0)
E: (2.220446049250313E-16|-2.82842712474619|2.0)
F: (2.220446049250313E-16|2.82842712474619|2.0)
G: (-2.220446049250313E-16|2.82842712474619|2.0)
H: (-2.220446049250313E-16|-2.82842712474619|2.0)
Und am einfachsten ist es das ganze dann nicht perspektivisch, sonder orthogonal anzuzeigen oder? Und dann von vorne, sodass die x1-Achse so zu sagen nicht beachtet werden muss?
Ich hoffe ich liege nicht zu sehr daneben ???:L