Autor Beitrag
theromi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: So 07.12.08 22:43 
Hi,

ich habe eine Klasse, die einmal die aktuelle X und Y Koordinate, und einmal eine X und Y Koordinate als Ziel gespeichert hat. Nun soll sie sich Punkt für Punkt fortbewegen. Das Problem ist, wie mache ich das? Also, wie berechne ich einen Punkt, der z.B. einen Pixel entfernt vom aktuellen Punkt in Richtung Ziel liegt?

Wenn ich einen Winkel hätte, würde ich über den Sinus rangehen. Aber das muss doch auch irgentwie effektiver gehen, oder? Gibt es da vllt. irgenteine Delphi-Methode für?

Danke schonmal,
Roman
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: So 07.12.08 22:54 
Ich mache sowas immer über Strahlensätze.

€: Den Winkel könntest du ja auch über deine Daten errechnen.
theromi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: So 07.12.08 23:00 
Oh Gott, ja da dämmert es ganz leise im Hinterkopf. :D
Ich google gleich mal um meinem Gedächtnis auf die Sprünge zu helfen.

Wundert mich ein bisschen, dass man da keine Funkion für hat. Ich meine, so wenig wird es ja sicherlich auch nicht benutzt.

Danke für die schnelle Antwort.
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 07.12.08 23:06 
Mit Satz des Pythagoras die Strecke zwischen den zwei Punkten ausrechnen. Dann teilst du deltaX durch diese Länge und du weißt um wie viel du X pro Schritt verändern musst. Bei diesem Beitrag findest du noch zwei Bilder und einen Beispielsource von mir:

www.delphi-forum.de/....php?p=473357#473357

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: So 07.12.08 23:17 
Hi :)

Wenn ich das richtig verstanden habe, hast du doch den Bewegungsvektor gegeben. Dann erhöhe einfach x- und y-Position um x- und y-Komponente der Bewegung.

Wenn du ncht um den vollen Vekor bewegen willst, wird das ganze etwas komplizierter: Solange du mit Integer-Koordinaten rechnest, kannst du den Vektor nicht richtig kürzen(5 div 3 = 1 :? damit haben wir eine völlig falsche Richtung..).

Das lässt sich lösen, indem du mit Double-Koordinaten rechnest. Zum Zeichnen musst du dann immer runden, dafür hast du keinen Wegfall beim einkürzen eines Vekltors.

Beispiel: v = (5; 3) m/s; => s(0,1s) = v*t = s_0 + (0,5; 0,3);

Imho solltest du das nach der Zeit machen: Dann kannst du dir genau überlegen, wie lange die Bewegung dauern soll.

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 08.12.08 15:33 
Bezier-Kurven und B-Splines ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
theromi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mi 10.12.08 17:58 
Danke für eure Antworten. Hatte es schon mit dem Strahlensatz fertig bevor ich den Rest gelesen habe, damit läuft es sehr gut.