Formel: Wegberechnung
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
algorithmus
animation
berechnen
bewegen
bild
code
entfernung
geschwindigkeit
http
objekt
position
problem
punkt
schleife
schritt
strecke
url
vektor
weben
ziel
-
Hallo Zusammen,
ich hab folgendes Problem:
Ich möchte ein Objekt auf dem kürzesten Weg von einem beliebigen Punkt zu einem anderen mit der Geschwindigkeit x bewegen. Hindernisse muss es dabei keine überwinden.
Mein Problem ist jetzt die Wegberechnung, kennt jemand eine Lösung für das Problem. Ich hab auch schon gegoogelt aber nichts brauchbares gefunden.
Gruß x-web
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi,
die Lösung deines Problems sollte der A*-Algorithmus sein:
http://de.wikipedia.org/wiki/A*-Algorithmus
wenn du danach suchst, findest du wahrscheinlich auch schon fertige Implementierungen, je nachdem, für welche Programmiersprache du den suchst:
http://www.google.at/search?hl=de&q=a+star+algorithm&btnG=Google-Suche&meta= -
Nein so kompliziert muss es garnicht sein.
Ich will nur ein Object von zB. (0/0) auf (100/100) mit der Geschwindigkeit 5 bewegen.
Hier kleine Skizze:
http://x-web.lima-city.de/move.GIF -
Dann erklär bitte genauer, was du mit der Wegberechnung genau meinst! Meinst du etwa die Weglänge?
-
Möchtest du also eine Formel haben, die dir zu jedem Zeitpunkt (t) die Koordinaten für den Aktuellen Ort angibt?
Wenn du also von (0/0) auf (100/100) kommen möchtest, dann sollte das doch durch nen Pytagoras zu regeln sein?
Den du duch die Bedingung x <= 100 beendest? (Also ne For-Schleife) oder was meinst du jetzt? (So hätte ich es verstanden ;) )
PS:
Alternativ würde aber hier auch reichen:
For i = 0 to 100 step +5 y = i x = i malbefehl(x,y) Next
Beitrag zuletzt geändert: 9.2.2009 14:29:55 von erasmuz -
am besten arbeitest du mit Vektoren:
velocity = ziel - position; if ( velocity.Length() > 2)// das ist, damit der Spieler nicht über dem Ziel hin und her ruckelt kann auch mehr als 2 sein einfach rumprobieren { velocity = ziel - position; velocity.Normalize(); //macht aus dem Vektor einen Vektor der Länge 1 position += velocity * deinegeschwindigkeit; }
-
wie erazmus schon erwähnt hat einfach:
weg=wurzel(X-Entfernung² + Y-Entfernung²)
und:
benötigte Zeit = Strecke / Geschwindigkeit -
und
brauchst du..
Das erste, damit du weißt, wie lang die Strecke ist.
Und die Zweite, damit du weißt, wann dein Objekt wo ist.
Strecke berechnen
http://vercetti.lima-city.de/move.GIF (jaja die ausdrücke auf dem bild sind komisch gewählt xD )
->
So hast du schonmal die Strecke :>
Weg je nach Zeit berechnen
Nehmen wir mal an. Die Geschwindigkeit beträgt 5 cm/s und er bewegt sich 5s.
Fertig :>
Jetzt weißt du nach welcher Zeit er wo ist :>
Rest ist halt nurnoch, dass du machen musst, dass die gefahrene strecke nicht größer ist als die mögliche, weil ja nur auf der strecek soll
//Edit mist zu langsam xD
Beitrag zuletzt geändert: 9.2.2009 15:47:27 von vercetti -
Sry, ich hab den Thread missverständlich formuliert. Ich möchte nicht die Entfernung berechnen sondern ein Ojekt zu einem Punkt bewegen und ich weis nicht wie ich das am besten realisiere.
Im Prinzip will ich sowas wie diese Animation mit einem Script realisieren:
http://x-web.lima-city.de/slide.swf
PS: Ich hätte das Thema besser "Objekt zu Punkt bewegen" nennen sollen
Beitrag zuletzt geändert: 9.2.2009 16:23:43 von x-web -
x-web schrieb:
Sry, ich hab den Thread missverständlich formuliert.
PS: Ich hätte das Thema besser "Objekt zu Punkt bewegen" nennen sollen
Um weitere Missverständnisse auszuschließen: in welcher Programmiersprache willst du das implementieren? Denn mit Pseudo-Code wird dir wahrscheinlich wieder nicht gehofen sein!
Ansonsten würd' ich's Schritt für Schritt so machen (Pseudo-Code ):
Gegeben sind Punkt 1 und Punkt 2, je mit X- und Y-Koordinaten deltaX = x2-x1;als Ganzzahl deltaY = y2-y1;als Ganzzahl steps = 50;Anzahl der Zwischenschritte für Animation Delay = 10;z.B. 10 Millisekunden vor nächsten Animationsschritt AnimX = deltaX / steps;als Kommazahl AnimY = deltaY / steps Schleife mit Zähler i durchlaufen lassen currentXd = x1 + AnimX * i;als Kommazahl currentX = runden(currentXd);für Ausgabe auf ganze Pixel ... currentYd und currentY detto! Bild zeichnen Warten;die in Delay angegebene Zeit warten Zähler inkrementieren Schleife erneut durchlaufen. Und dann bist du mit deinem Bildchen am Ziel, und aus.
Beitrag zuletzt geändert: 9.2.2009 16:45:25 von burgi -
Kein Problem, Pseudo-Code reicht. Jetzt hab ichs verstanden.
Vielen Dank für eure Hilfe!
Gruß X-Web -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage