Hallo,
@knivil: Es handelt sich nicht um ein Spiel, sondern um einen GPS-Tracker. Ich update die aktuelle Position jede Sekunde, sobald eben das GPS eine neue Message liefert.
Im Programm lassen sich Routen auf einem vorher definierten Graphen festlegen; die Routen berechne ich durch den A*-Algorithmus (euklidischer Abstand zum Ziel als Heuristik-Funktion). Damit man nicht genau den einzelnen Wegpunkt "treffen" muss, definiere ich ein Proximity-Rechteck um die einzelnen Wegpunkte, in dem man sich befinden muss, damit der aktuelle Wegpunkt als passiert gilt.
@Zera: Das ist genau das Problem. Ich brauche sozusagen eine Nearest-Neighbour-Metrik, der alleinige Abstand zu den einzelnen Wegpunkten reicht nicht aus. Alle Teilstücke zu durchsuchen ist inpraktikabel, da man sich auch neben der Graphenkante befinden kann, wo soll ich da die Grenze ziehen?
Bisher bin ich so vorgegangen, dass ich in einer Statusvariable den nächsten abzulaufenden Wegpunkt speichere, und zwei die Distanzen von zwei aufeinanderfolgenden Zeitschritten zu diesem vergleiche:
Ist d_neu < d_alt => Hinbewegung zu Wegpunkt
d_neu > d_alt => Wegbewegung zu Wegpunkt
Der Wegpunkt-Index erhöht sich dann um 1, wenn ich einen Wegpunkt (bzw. dessen Fläche) passiert habe.
Probleme mit diesem Ansatz:
- ich kann an einem Knoten vorbeilaufen -> Index stimmt nicht mehr
- ich kann rückwärts laufen
- ich kann eine völlig andere Route einschlagen -> A* muss Neuberechnung machen (ähnlich Navi-System im Auto)
Ok, die Erklärung ist jetzt ganz schön lang geworden, vll. bin ich ja auch auf dem Holzweg, mein Problem ist nicht die Routenberechnung (A*), sondern die Routenführung
Danke für alle Tipps,
AlGaN