Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 15:43

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Entlang einer Geraden bewegen
BeitragVerfasst: Do Mär 30, 2006 10:26 
Offline
DGL Member

Registriert: Mo Jan 16, 2006 16:52
Beiträge: 20
Hallo,
Ich habe eine Gerade, von der Stützvektor und Richtungsvektor bekannt sind. Jetzt möchte ich mich entlang dieser Geraden bewegen. Wenn ich das so mache,
Code:
  1.  
  2.   Position.X := Position.X + 0.05*TourVectors[0].X;
  3.   Position.Z := Position.Z + 0.05*TourVectors[0].Z;
  4.  

wobei TourVectors der Vektor der Geraden ist, entferne ich mich nach und nach von der Geraden. Ich möchte aber die ganze Zeit auf der Geraden bleiben. Hat da jemand einen Tip wie ich das anstellen kann?

Danke.

mfg,
Lt.Cmd.Data


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 30, 2006 12:10 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Dein Algo ist falsch aber eigentlich auch nicht.
Ich hab gelernt das Delphi und Freepascal compiler es nicht so mit der priorität von operationen nehmen.
Code:
  1.  
  2.   Position.X := Position.X + (Faktor*Richtung.X);
  3.   Position.Z := Position.Z + (Faktor*Richtung.Z);
  4.  
  5. Für Bewegungen einem Pfad entlang, wäre dann allerdings sowas besser.
  6.  
  7.   if (time<1) and (time>0) then
  8.   begin
  9.     Differenz_Punkt1_Punkt2.X:=Punkt2.X-Punkt1.X;
  10.     Differenz_Punkt1_Punkt2.Z:=Punkt2.Z-Punkt1.Z;
  11.     Position.X:=Differenz_Punkt1_Punkt2.X*time;
  12.     Position.Z:=Differenz_Punkt1_Punkt2.Z*time;
  13.     inc(Time,timestep);
  14.   end else
  15.   begin
  16.     punkt1.X:=punkt2.X;
  17.     punkt1.Z:=punkt2.Z;
  18.     punkt2.X:=nächster_Punkt.X;
  19.     punkt2.Z:=nächster_Punkt.Z;
  20.     time:=0;
  21.   end;
  22.  
  23. Dies wäre eine Lineare funktion zur Bewegung zwischen 2 Punkten und wenn der 2. Punkt erreicht ist wird auf die nächste Strecke umgeswitcht.
  24.  
  25.  

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 31, 2006 11:55 
Offline
DGL Member

Registriert: Mo Jan 16, 2006 16:52
Beiträge: 20
Hallo.
Danke für die schnelle Antwort. Ich hab das jetzt mal so ausprobiert:
Code:
  1.  
  2.   d := GetDestDistance(TourVectors[TourPoints].Start.X,TourVectors[TourPoints].Start.Z,TourVectors[TourPoints+1].Start.X,TourVectors[TourPoints+1].Start.Z);
  3.   if (mt>=0) and (mt<1) then
  4.   begin
  5.     Position.X := Position.X -(TourVectors[TourPoints+1].Start.X-TourVectors[TourPoints].Start.X)*mt;
  6.     Position.Z := Position.Z + (TourVectors[TourPoints+1].Start.Z-TourVectors[TourPoints].Start.Z)*mt;
  7.     mt := mt + 0.05/d;
  8.   end else
  9.   begin
  10.     mt := 0;
  11.     d := 0;
  12.     inc(TourPoints);
  13.   end;
  14.  

Bei der ersten Gerade funktioniert das auch gut. Aber bei der zweiten geht er dann nicht mehr bis zum Ende, sondern switcht schon vorher auf den nächsten Punkt um. Den Abstand "d" zwischen beiden Punkten berechnet er allerdings richtig. Was ich auch noch bemerkt habe ist, dass ich in der Bewegung eine Beschleunigung habe. Wie kann ich mich mit konstanter Geschwindigkeit bewegen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 31, 2006 15:28 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
mit Timefactor?

aber mal zu dem vorherigen Part: TAK, sowohl Delphi als auch fpc halten sich an Punkt vor Strich. Da braucht man sich keine Sorgen zu machen.

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 31, 2006 19:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
An sich ist es war und es funktioniert auch im normalfall aber ich hab schon öfter erlebt das es nicht funktioniert hat.
Die beschleunigung entsteht weil du die distance immer neu abfragst und somit die strecke immer kleiner wird und die geschwindigkeit immer größer. also verschieb die ermittlung in den elseteil und lass es vor begin der schleife ausführen.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 15 Queries | GZIP : On ]