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:
Position.X := Position.X + 0.05*TourVectors[0].X;
Position.Z := Position.Z + 0.05*TourVectors[0].Z;
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?
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:
Position.X := Position.X + (Faktor*Richtung.X);
Position.Z := Position.Z + (Faktor*Richtung.Z);
Für Bewegungen einem Pfad entlang, wäre dann allerdings sowas besser.
if (time<1) and (time>0) then
begin
Differenz_Punkt1_Punkt2.X:=Punkt2.X-Punkt1.X;
Differenz_Punkt1_Punkt2.Z:=Punkt2.Z-Punkt1.Z;
Position.X:=Differenz_Punkt1_Punkt2.X*time;
Position.Z:=Differenz_Punkt1_Punkt2.Z*time;
inc(Time,timestep);
end else
begin
punkt1.X:=punkt2.X;
punkt1.Z:=punkt2.Z;
punkt2.X:=nächster_Punkt.X;
punkt2.Z:=nächster_Punkt.Z;
time:=0;
end;
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.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Hallo.
Danke für die schnelle Antwort. Ich hab das jetzt mal so ausprobiert:
Code:
d := GetDestDistance(TourVectors[TourPoints].Start.X,TourVectors[TourPoints].Start.Z,TourVectors[TourPoints+1].Start.X,TourVectors[TourPoints+1].Start.Z);
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?
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
Mitglieder in diesem Forum: 0 Mitglieder und 7 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.