![]() |
Rotation im Raum klappt nicht richtig
Liste der Anhänge anzeigen (Anzahl: 1)
Hi mein Würfel den ich erstelle wird nicht richtig gedrecht entsprechend den Achsenangaben....
liegt es daran das ich mir das zeichnen erleichtert habe indem ich einfach die Z-koordinaten weggelassen habe ? (Es wird immer vom aktuellen stand weiter gedreht) |
Re: Rotation im Raum klappt nicht richtig
Liste der Anhänge anzeigen (Anzahl: 1)
die lösung ist mir gerade selber eingefallen ..... ich hatte das koordinatensystem nicht in das zentrum des objekts (würfels) gelget jetz rotiert er richtig .... muss nur noch mal meinen code überarbeten weil mein würfel merkwürdigerweise mit jeder Rotationsausführung kleiner wird :D
|
Re: Rotation im Raum klappt nicht richtig
Es wäre hilfreich wenn du uns sagst wie du den Würfel drehst.
|
Re: Rotation im Raum klappt nicht richtig
Delphi-Quellcode:
procedure TWürfel.Rotate(Punkt: Integer; Achse: Char; Winkel: Integer);
Var x, y, z: Extended; begin case Achse of 'x': begin x:=GetPunktKoordinate(Punkt,'x'); y:=GetPunktKoordinate(Punkt,'y'); z:=GetPunktKoordinate(Punkt,'z'); //Neue Werte errechnen x:=(x*1); y:=(x*0)+(y*(cos(DegToRad(Winkel))))-(z*(sin(DegToRad(Winkel)))); z:=(x*0)+(y*(sin(DegToRad(Winkel))))+(z*(cos(DegToRad(Winkel)))); //Neue Werte zurückgeben PunkteArray[Punkt,1]:=x; PunkteArray[Punkt,2]:=y; PunkteArray[Punkt,3]:=z; end; 'y': begin x:=GetPunktKoordinate(Punkt,'x'); y:=GetPunktKoordinate(Punkt,'y'); z:=GetPunktKoordinate(Punkt,'z'); //Neue Werte errechnen x:=(x*cos(DegToRad(Winkel)))+(y*0)+(z*(sin(DegToRad(Winkel)))); y:=(x*0)+(y*1)+(z*0); z:=(-x*sin(DegToRad(Winkel)))+(y*0)+(z*(cos(DegToRad(Winkel)))); //Neue Werte zurückgeben PunkteArray[Punkt,1]:=x; PunkteArray[Punkt,2]:=y; PunkteArray[Punkt,3]:=z; end; 'z': begin x:=GetPunktKoordinate(Punkt,'x'); y:=GetPunktKoordinate(Punkt,'y'); z:=GetPunktKoordinate(Punkt,'z'); //Neue Werte errechnen x:=(x*cos(DegToRad(Winkel)))-(y*sin(DegToRad(Winkel)))+(z*0); y:=(x*sin(DegToRad(Winkel)))+(y*cos(DegToRad(Winkel)))+(z*0); z:=(x*0)+(y*0)+(z*1); //Neue Werte zurückgeben PunkteArray[Punkt,1]:=x; PunkteArray[Punkt,2]:=y; PunkteArray[Punkt,3]:=z; end; end; end; |
Re: Rotation im Raum klappt nicht richtig
Beispiel:
Delphi-Quellcode:
:gruebel:
y:=(x*0)+(y*1)+(z*0);
Multiplikation mit Null & Multiplikation mit Eins. Was da wohl so bei herauskommt.. ;) Die Z-Achse sollte man nicht ausser Acht lassen. |
Re: Rotation im Raum klappt nicht richtig
danke für den tipp :roll:
das ändert aber nichts an dem problem das mein würfel nach jeder rotationsausführung schrumpft ..... also wenn ich die rotation ausführe schrumpfen meine abstände zwischen den punkten |
Re: Rotation im Raum klappt nicht richtig
Ich hab schon lang nicht mehr mit Delphi gearbeitet, aber könnte es sein, dass eine float->integer Konvertierung ein floor ist?
Ich kenn die einzelnen Typen nicht, aber das klingt stark nach einem Rundungseffekt. BTW: (IMHO) - Umlaute im Quellcode könnten Probleme machen - Parameter "Punkt: Integer": Ich fänds besser, wenn das "punkt_ndx" heissen würde, schließlich ist es kein Punkt. - Reine Geschwindigkeit: Ich geh davon aus, dass du die Funktion dann 8Mal für die einzelnen Eckpunkte aufrufst. Da sin/cos recht teure Funktionen sind, könntest du statt dem Winkel (der eigentlich auch ein float sein sollte) direkt die sin/cos-Werte als Parameter übergeben, und sie dann pro Drehung nur ein Mal ausrechnen. - "x:=GetPunktKoordinate(Punkt,'x');" ist aber nicht das gleiche wie "x :=PunkteArray[Punkt,1];" oder? |
Re: Rotation im Raum klappt nicht richtig
Nach dem Berechnen von x darfst du natürlich nicht diesen neuen Wert zum Berechnen von y benutzen, du musst den alten speichern.
Außerdem können sich, wie Nikolas schon angedeutet hat, Rundungsfehler schnell aufsummieren. Du solltest den Würfel nicht Stück für Stück weiter drehen, sondern immer wieder in der Ausgangslage beginnen und sofort um den gesamten Winkel drehen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz