AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Drehung eines Körpers um eine beliebige Achse
Thema durchsuchen
Ansicht
Themen-Optionen

Drehung eines Körpers um eine beliebige Achse

Ein Thema von Ben19 · begonnen am 5. Mai 2009 · letzter Beitrag vom 2. Jun 2009
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von Khabarakh
Khabarakh

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

Re: Drehung eines Körpers um eine beliebige Achse

  Alt 30. Mai 2009, 15:31
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 ...

Die entstandene Matrix musst du dann mit deinem Vektor multiplizieren, siehe weiter oben im Artikel.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Jakob Ullmann
Jakob Ullmann

Registriert seit: 17. Feb 2007
218 Beiträge
 
Lazarus
 
#22

Re: Drehung eines Körpers um eine beliebige Achse

  Alt 30. Mai 2009, 16:28
Wie soll das Quadrat eigentlich 3D dargestellt werden? Parallel- oder Zentralprojeketion?
Jakob
  Mit Zitat antworten Zitat
Ben19

Registriert seit: 25. Feb 2009
17 Beiträge
 
#23

Re: Drehung eines Körpers um eine beliebige Achse

  Alt 30. Mai 2009, 17:22
Hey danke für eure antworten
Also es ist 3D und soll mit der Parallelprojektion gezeigt werden.
Aber die Drehung funktioniert jetzt schon
Problem die Objekte werden immer größer und verschwinden letztendlich.
Weiß jmd wodran das liegen kann?
Vielen Dank im voraus
Ben19
  Mit Zitat antworten Zitat
Ben19

Registriert seit: 25. Feb 2009
17 Beiträge
 
#24

Re: Drehung eines Körpers um eine beliebige Achse

  Alt 1. Jun 2009, 11:54
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
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

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

Re: Drehung eines Körpers um eine beliebige Achse

  Alt 1. Jun 2009, 12:03
Zitat:
Kann mir wirklich keiner einen Tipp geben was in meinem Programm falsch sein könnte?
An der Quadratwurtzel im untrern Quadranten links.

Da wir nicht wissen können was du in deinem Quellcode veranstaltest ist es uns fast nicht möglich zu helfen.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Ben19

Registriert seit: 25. Feb 2009
17 Beiträge
 
#26

Re: Drehung eines Körpers um eine beliebige Achse

  Alt 1. Jun 2009, 12:19
Aso ja stimmt
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
  Mit Zitat antworten Zitat
dark_detlef

Registriert seit: 23. Feb 2009
5 Beiträge
 
#27

Re: Drehung eines Körpers um eine beliebige Achse

  Alt 2. Jun 2009, 10:47
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 21:56 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