Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Drehung eines Körpers um eine beliebige Achse (https://www.delphipraxis.net/133559-drehung-eines-koerpers-um-eine-beliebige-achse.html)

Khabarakh 30. Mai 2009 14:31

Re: Drehung eines Körpers um eine beliebige Achse
 
Zitat:

Zitat von Ben19
Muss ich wirklich immer den selben Winkel (hier alpha) drehen?

Du kannst natürlich verschieden Drehungen mit verschiedenen Winkeln und Drehachsen durchführen, aber während einer Drehung sollte alpha schon konstant sein :gruebel: ...

Die entstandene Matrix musst du dann mit deinem Vektor multiplizieren, siehe weiter oben im Artikel.

Jakob Ullmann 30. Mai 2009 15:28

Re: Drehung eines Körpers um eine beliebige Achse
 
Wie soll das Quadrat eigentlich 3D dargestellt werden? Parallel- oder Zentralprojeketion?

Ben19 30. Mai 2009 16:22

Re: Drehung eines Körpers um eine beliebige Achse
 
Hey danke für eure antworten :)
Also es ist 3D und soll mit der Parallelprojektion gezeigt werden.
Aber die Drehung funktioniert jetzt schon :thumb:
Problem die Objekte werden immer größer und verschwinden letztendlich. :?
Weiß jmd wodran das liegen kann?
Vielen Dank im voraus
Ben19

Ben19 1. Jun 2009 10:54

Re: Drehung eines Körpers um eine beliebige Achse
 
Hey Delphi-Community
Kann mir wirklich keiner einen Tipp geben was in meinem Programm falsch sein könnte?
Wäre echt nett wenn mir einen Tipp geben könnte.
Vielen Dank im voraus
Ben19

turboPASCAL 1. Jun 2009 11:03

Re: Drehung eines Körpers um eine beliebige Achse
 
Zitat:

Kann mir wirklich keiner einen Tipp geben was in meinem Programm falsch sein könnte?
An der Quadratwurtzel im untrern Quadranten links. :gruebel:

Da wir nicht wissen können was du in deinem Quellcode veranstaltest ist es uns fast nicht möglich zu helfen.

Ben19 1. Jun 2009 11:19

Re: Drehung eines Körpers um eine beliebige Achse
 
Aso ja stimmt :oops:
Also hier ist die procedure die für die Drehung verantwortlich ist

Delphi-Quellcode:
procedure TForm1.bdrehungChange(Sender: TObject);   //Rotation um beliebige Achse
var x,y,z,x1,y1,z1:real;j:integer;bogen:real;
begin
  objekteausblenden;
  bogen:=gradzubogen((Form1.bdrehung.Position-Gegenstaende[Auswahl].drehung[4]));
  for j:=1 to Gegenstaende[Auswahl].Punktzahl do
  begin
    x1:=Gegenstaende[Auswahl].Punktfeld[j][1]+Gegenstaende[Auswahl].ortsvektor[1];
    y1:=Gegenstaende[Auswahl].Punktfeld[j][2]+Gegenstaende[Auswahl].ortsvektor[2];
    z1:=Gegenstaende[Auswahl].Punktfeld[j][3]+Gegenstaende[Auswahl].ortsvektor[3];
    x1:=x1-strtofloat(form1.geradex.text);
    y1:=y1-strtofloat(form1.geradey.text);
    z1:=z1-strtofloat(form1.geradez.text);
    x:=strtofloat(form1.geraderx.text);
    y:=strtofloat(form1.geradery.text);
    z:=strtofloat(form1.geraderz.text);
    Gegenstaende[Auswahl].Punktfeld[j][1]:=(x*x*(1-cos(bogen))+cos(bogen))*x1+(x*y*(1-cos(bogen))-z*sin(bogen))*y1+(x*z*(1-cos(bogen))+y*sin(bogen))*z1+strtofloat(form1.geradex.text)-Gegenstaende[Auswahl].ortsvektor[1];
    Gegenstaende[Auswahl].Punktfeld[j][2]:=(x*y*(1-cos(bogen))+z*sin(bogen))*x1+(y*y*(1-cos(bogen))+cos(bogen))*y1+(y*z*(1-cos(bogen))-x*sin(bogen))*z1+strtofloat(form1.geradey.text)-Gegenstaende[Auswahl].ortsvektor[2];
    Gegenstaende[Auswahl].Punktfeld[j][3]:=(x*z*(1-cos(bogen))-y*sin(bogen))*x1+(y*z*(1-cos(bogen))+x*sin(bogen))*y1+(z*z*(1-cos(bogen))+cos(bogen))*z1+strtofloat(form1.geradez.text)-Gegenstaende[Auswahl].ortsvektor[3];
  end;
  Gegenstaende[Auswahl].drehung[4]:=Form1.bdrehung.Position;
  Form1.bdrehwert.Text:=inttostr(Form1.bdrehung.Position);
  objekteanzeigen();
end;
Vielen Dank im voraus
Ben19

dark_detlef 2. Jun 2009 09:47

Re: Drehung eines Körpers um eine beliebige Achse
 
Hallo,
also ich gehöre auch zu der Gruppe von Ben_19. Wir haben unser Programm eigentlich sogut wie fertig, nur die Drehung um eine beliebige Achse fehlt noch. Leider können wir unseren Fehler nicht identifizieren :(
Zur Erklärung des Quelltextes von Ben_19:
Gegenstaende[Auswahl].ortsvektor:
Hierbei handelt es sich um einen Vektor, der vom Ursprung zum Objekt hinzeigt. Von diesem Punkt widerrum aus gibt es zu jeder Objektecke einen neuen Vektor, deshalb addieren wir diesen erst um den absoluten Punkt zu erhalten und später subtrahieren wir ihn wieder, weil in unserer Zeichenoperation dieser automatisch addiert wird.
form1.geradex.text:
Hier steht der Ortsvektor der Geraden drin, den wir zunächst von jedem Objektpunkt subtrahieren, um die Gerade in den Ursprung zu verlegen, später wird dieser wieder addiert.
form1.geraderx.text:
Dieser ist der Richtungsvektor der Geraden. Diesen setzen wir später in die Gleichung ein und möchten um diesen drehen.

Der Fehler der nun autritt sieht folgender Maßen aus:

Der Objekt wird zwar gedreht, scheinbar auch um die Achse, aber der Z-Wert spielt verrückt(Wird einfach zu groß mit der Zeit). Lassen wir diesen aus dem Spiel(Z=0) dann funktioniert die Drehung...
Hatten früher schon einmal so ein ähnliches Problem, da lags daran, dass wir mit bereits veränderten Werten gerechnet haben.

Bitte helft uns ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:23 Uhr.
Seite 3 von 3     123   

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