Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Danke für die Antwort.
Ich hatte allerdings etwas konkreteres gesucht.
Könntest du vllt. kurz ein Code-Beispiel für die Drehung um x und z Achse reinstellen?
Ich habe das jetzt nochmal mit Drehmatrizen probiert, aber da kommt nur Käse raus
Codebeispiel:
Code:
a1 = Math.atan2(k[i][j][1],k[i][j][0]);
a2 = Math.atan2(k[i][j][2],k[i][j][1]);
x = 0;
y = Math.sqrt(k[i][j][0]*k[i][j][0]+k[i][j][1]*k[i][j][1]+k[i][j][2]*k[i][j][2]);
z = 0;
alpha = a1 - this.B;
beta = a2 - this.R;
rück[i][j][0] = x;
rück[i][j][1] = y * Math.cos(beta) - z * Math.sin(beta);
rück[i][j][2] = y * Math.sin(beta) + z * Math.cos(beta);
x = rück[i][j][0];
y = rück[i][j][1];
z = rück[i][j][2];
rück[i][j][0] = x * Math.cos(alpha) - y * Math.sin(alpha);
rück[i][j][1] = x * Math.sin(alpha) + y * Math.cos(alpha);
rück[i][j][2] = z;
hierbei rechnet der erst die Winkel aus, die schon bestehen.
Den Weg muss ich gehen, da ich onst nicht gescheit um die x- Achse, bzw. den Nullpunkt drehen kann.
Dann setzt er y auf den Abstand, den der Punkt vorher hatte.
B und R sind die ingame-Winkel.
B steht auf der Ebene, die z-Achse (nach oben) und y- Achse (nach vorne) aufspannen
R steht auf der Ebene, die x- und y- Achse aufspannen.
und dann ist das eigentlich pure Anwendung der Drehmatrizen, allerdings ist das Ergebnis falsch. :autsch:
Nein
Da Math.sin() und cos() nur mit doubles arbeiten, die in Zusammenhang stehen mit pi, benutze ich natürlich solche Zahlen
(-> Winkel auf z/y-Ebene geht von -Math.PI bis Math.PI)
So,
bin wieder ein bisschen weiter gekommen
-> er dreht schon richtig, war nur ein kleines Vorzeichenproblem
CODE:
Code:
a1 = Math.atan2(k[i][j][1],k[i][j][0]);
a2 = Math.atan2(k[i][j][2],k[i][j][0]);
x = 0;
y = Math.sqrt(x*x+y*y+z*z);
z = 0;
alpha = this.B - a1;
beta = this.R - a2;
rück[i][j][0] = x;
rück[i][j][1] = y * Math.cos(beta) + z * Math.sin(beta);
rück[i][j][2] = -y * Math.sin(beta) + z * Math.cos(beta);
x = rück[i][j][0];
y = rück[i][j][1];
z = rück[i][j][2];
rück[i][j][0] = x * Math.cos(alpha) - y * Math.sin(alpha);
rück[i][j][1] = x * Math.sin(alpha) + y * Math.cos(alpha);
rück[i][j][2] = z;
@CODE:
k = Koordinate
this.B = Winkel auf z/y-Ebene
this.R = Winkel auf y/x-Ebene
Er dreht richtig und das Ergebnis ist:
(~8|~8|~12)
Rein mathematisch gesehen müsste ja (10|10|10) rauskommen,
da ich den y-Wert auf die Entfernung vom Origo zu (10|10|10) gesetzt habe und dann zweimal gedreht habe(-> Kugelkoordinaten)...
Oder muss ich nochmal (sinnloserweise) um die y-Achse drehen um den Winkel 0?