AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Rotation im Raum klappt nicht richtig
Thema durchsuchen
Ansicht
Themen-Optionen

Rotation im Raum klappt nicht richtig

Ein Thema von Kytrix · begonnen am 31. Dez 2009 · letzter Beitrag vom 31. Dez 2009
Antwort Antwort
Kytrix

Registriert seit: 26. Nov 2007
54 Beiträge
 
#1

Rotation im Raum klappt nicht richtig

  Alt 31. Dez 2009, 05:53
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)
Angehängte Dateien
Dateityp: zip w_rfel_194.zip (405,8 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Kytrix

Registriert seit: 26. Nov 2007
54 Beiträge
 
#2

Re: Rotation im Raum klappt nicht richtig

  Alt 31. Dez 2009, 06:12
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
Angehängte Dateien
Dateityp: exe w_rfel_2_180.exe (909,0 KB, 11x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: Rotation im Raum klappt nicht richtig

  Alt 31. Dez 2009, 06:21
Es wäre hilfreich wenn du uns sagst wie du den Würfel drehst.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Kytrix

Registriert seit: 26. Nov 2007
54 Beiträge
 
#4

Re: Rotation im Raum klappt nicht richtig

  Alt 31. Dez 2009, 06:33
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;
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#5

Re: Rotation im Raum klappt nicht richtig

  Alt 31. Dez 2009, 09:21
Beispiel:
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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Kytrix

Registriert seit: 26. Nov 2007
54 Beiträge
 
#6

Re: Rotation im Raum klappt nicht richtig

  Alt 31. Dez 2009, 16:47
danke für den tipp

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
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Rotation im Raum klappt nicht richtig

  Alt 31. Dez 2009, 17:54
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?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: Rotation im Raum klappt nicht richtig

  Alt 31. Dez 2009, 18:54
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.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz