Ja hi,
ich arbeite gerade an nem Programm welches in R³ Punkte/Körper/Geraden drehen soll.
Mein Problem ist, dass wenn ich das drehen über mehrere Achsen nutze via eulersche Winkel(sind eigl. nur die Transformationsmatrizen für die Rotation um die x,y,z-Achse multipliziert und halt optimal gekürzt) irgendwie die Drehungen nicht stimmen.
Delphi-Quellcode:
points2D[k].x1:=points3D[k].x1 * ((cos(
av)*cos(cv)-sin(
av)*cos(bv)*sin(cv))-(cos(
av)*sin(cv)+sin(
av)*cos(bv)*cos(cv))+(sin(
av)*cos(bv)))-((points3D[k].x3*((sin(bv)*sin(cv))-(sin(bv)*cos(cv))+cos(bv)))/2*sqrt(2));
points2D[k].x2:=points3D[k].x2 * ((sin(
av)*cos(cv)+cos(
av)*cos(bv)*sin(cv))+(cos(
av)*cos(bv)*cos(cv)-sin(
av)*sin(cv))-(cos(
av)*sin(bv)))-((points3D[k].x3*((sin(bv)*sin(cv))-(sin(bv)*cos(cv))+cos(bv)))/2*sqrt(2));
ich weiß nicht genau ob der Fehler hier liegt aber ich vermute es. Finden konnte ich ihn auch noch nicht.
Wenn jemand wissen will wie das hergeleitet wird - hilft manchmal zum verständnis kann ich dies gerne erläutern(ist eigl. simpel).
Ich hatte davor ein Programm geschrieben, damit konnte man einen Würfel drehen um jeweils eine Achse, dies lief ohne Probleme und nun wollte ich die Achsen halt kombinieren und beliebige Körper darum drehen.
Als Beispiel kann man wieder einen Würfel verwenden:
A(100|-100|-100); B(100|100|-100); C(100|100|100); D(100|-100|100); E(-100|-100|-100); F(-100|100|-100); G(-100|100|100); H(-100|-100|100);
Hier tritt ein weiteres Problem auf welches ich nicht erklären kann, der Punkt A und der Punkt E werden falsch dargestellt. Außerdem sieht man hier wunderbar, dass sich der Würfel nicht einheitlich dreht sondern alle Punkte irgendwie komisch unterschiedlich wobei allerdings jeder Punkt am Ende wieder die Ausgangsposition erreicht. Wenn ich eine Strecke mit einem Punkt im Ursprung drehe habe ich das Gefühl, dass die Drehung stimmt.
Ich hoffe jemand kann mir helfen, ich würde es muss es bis Dienstag fertig bekommen, dann muss ich es in der Schule vorstellen.
Ja hier das gesamte Programm als zip (.exe + alles andere)
Programm
kurze Erläuterung zum Programm:
1 ihr müsst zuerst die anzahl der Punkte wählen und dann die Punkte eintragen -300<=x<=300; -300<=y<=300
2 nun könnt ihr die Punkte verbinden in dem ihr zb. schreibt:
1,2,3,1 -> Dreieick und 1,4 und 2,4 und 3,4 -> Pyramide (der Verbindungsreset geht leider nicht, da muss das Programm neugestartet werden)
nun könnt ihr es euch zeichnen lassen und mit den jeweiligen Winkeln !sollte! es sich eigentlich richtig drehen, tut es aber nicht.
PS.: mögliche Ideen um das Programm funktionstüchtig zu machen würden mir reichen, wenn ich irgendetwas schlecht erklärt oder undeutlich dargestellt habe würde ich mich über eine Frage auch freuen!