Autor Beitrag
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 02.02.05 15:08 
hallo mein problem ist zwar schon einmal von mir gestellt worden aber ich glaube jetzt kann ichs noch besser erklären.

Die Frage hat eigentlich etwas mehr mit der mathematik zu tun als mit delphi selber

Also:

Gegeben sind X,Y eines objektes und die Zielkoordinaten X2,Y2

Der direkte weg lässt sich mit dem satz des pythagoras folgendermaßen ausrechen:

dweg:= sqrt(xspeed * xspeed + yspeed * yspeed)

Hoffe das ist richtig so wenn jetzt aber nur dweg gegeben ist gibt es ja unendlich viele möglichkeiten da die resultierende geschwindigkeit auch unterschiedlich sein kann, nun möchte ich eine geschwindigkeit angeben die resultieren soll und das objekt soll sich auf dieder strecke dort hin bewegen, aber wie mache ich das ?
Marc Walter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 40

Win98, WinXP
D2 Pers, D7 Pers
BeitragVerfasst: Mi 02.02.05 15:42 
moment, du gehst von nem Dreieck aus, dessen längste Seite dann den direkten weg darstellt, oder?

folglich hast du Punkt P1 mit den Koordinaten X und Y.
Dazu einen Punkt P2 mit den Koordinaten X2 und Y2.
Um ein Dreieck aufspannen zu können brauchst du also einen 3. Punkt.
Dieser hat dann die Koordinaten X2 und Y. dadurch erhältst du ein rechtwinkliges Dreieck.
Damit funzt dann der Satz.

Die 1. Seite des Dreiecks geht von P1 nach P2, die 2.Seite von P1 nach P3, und die 3.Seite von P2 nach P3.

du willst die Länge der 1.Seite haben. Also ist
d(1.Seite) = Wurzel aus (Seite2)² + (Seite3)²
Seite2 = der Betrag von (X - X2)
Seite3 = der Betrag von (Y - Y2)

in delphi:
ausblenden Delphi-Quelltext
1:
2:
3:
var Punkt2, Punkt3: TPoint; // das sind die anderen Punkte

dweg := sqrt(sqr(abs(X-X2))+sqr(abs(Y-Y2)));


falls dein xspeed, yspeed und meine Seiten 2 und 3 übereinstimmen war mein Kommentar bisher sinnlos. :lol:

du hast ja dann die Strecke. Wenn du jetzt nen Maßstab setzt, z.B. 1 m = 1 Pixel, und die Timer-Komponente von deiner Zeit hochrechnest kannst du die Geschwindigkeit in m/s berechnen:

Bsp: dweg = 10; Timer.intervall(vergangene Zeit zwischen den 2 Punkten) = 1000.
folglich hast du bei diesem Beispiel eine Geschwindigkeit von 10 meter / Sekunde
raufgerechnet auf km/h sind das dann 10 * 1000(für km) / 3600(für h) = 36 km/h :D

falls du weniger Zeit hast / den Maßstab anders wählst, musss du halt noch ein wenig mehr multiplizieren.

P.S.: Code nicht getestet, müsste aber stimmen

_________________
möp
F34r0fTh3D4rk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 02.02.05 16:06 
1. welcher code ?

2. eigentlich hast nochmal das gleiche wiederholt was ich grad schon gesagt habe.

aber es ist nunmal die strecke gegeben, weil sie berechenbar ist und die relutierende geschwindigkeit

vielleicht kannst du das ja mal als code aufschreiben falls ich dich falsch verstanden haben sollte, trotzdem thx
Marc Walter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 40

Win98, WinXP
D2 Pers, D7 Pers
BeitragVerfasst: Mi 02.02.05 19:51 
zu 1. da is die eine zeile, die du auch schon hattest :P
zu 2. naja, schon irgendwie, ich dachte halt, dir gings einfach darum, bestätigt zu werden...

ich würd theoretisch mal sagen, dass du bei jedem Schritt:
1. Strecke zwischen jetzigen Punkt und Zielpunkt ausrechnen
2. über die Geschwindigkeit den Weg, der zurückgelegt werden soll berechnen
3. alte Strecke - Weg = neue Strecke
4. Dann die Formel um die Strecke zu berechnen hernimmst, aber als Strecke deine neue
Strecke einsetzt und somit auf der einen Seite Unbekannte hast -> Gleichung auflösen
-> Koordinaten des neuen Punktes

"Rechnung":
sqrt(sqr(neuerPunkt.x-X2)+sqr(neuerPunkt.y-Y2)) = neue strecke
-> sqr(neuerPunkt.x-X2) + sqr(neuerPunkt.y-Y2)) = sqr(neue strecke)
...

das wäre mal mein mathematischer Ansatz, obs in Delphi so geht weiß ich leider nicht, aber ich werds mal probieren

sorry, falls ichs nur noch schlimmer gemacht hab :cry:

_________________
möp
F34r0fTh3D4rk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 02.02.05 20:00 
k danke wenn du nen code hast sag bescheid (also auch bewegungscode)