Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-04-2006, 11:35   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 41
Streckenberechnung / Route

Hallo,

ich mach grad so eine kleine Stadtkarte mit Routenberechnung, nur irgendwie komm ich nicht so richtig weiter.

Habe also meine Karte und da drin liegen 6 Punkte, man wählt in der Karte den Startpkt und in einer danenben liegenden Tabelle den Zielpunkt.
Mein Algorithmus soll durchchecken über welchen der anderen Punkte man am kürzesten zum Zielpunkt kommt.
Die Entfernungen zu den einzelnen Punkte habe ich festgelegt. Nur scheitere ich bei der Fkt.

Habe es mit (mehreren) if-Schleifen gemacht, bloß das is viel zu umständlich und wenn mal noch ein Pkt in der Karte dazu kommt,
nochmal riesig viel Arbeit.... (muß da ja jede Möglichkeit einzeln festhalten)

Gibt es im ActionScript irgend eine Fkt, die so was durchchecken kann???
Könnt ihr mir da mal nen Tipp geben, bin dankbar für jede Hilfe.
angelshouse
angelshouse ist offline   Mit Zitat antworten
Alt 18-04-2006, 11:44   #2 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Als Suchbegriff kann ich dir mal 'pathfinder' nennen... muss allerdings gleich dazu sagen, dass das harter Tobak is..!
sonar ist offline   Mit Zitat antworten
Alt 18-04-2006, 16:35   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2002
Ort: München
Beiträge: 133
also im prinzip kannst du das so machen (so ungefähr der viterbi-algorithmus, wenn ich's richtig im kopf habe... )

du hast deine punkte, die heißen A, B, ... F
manche sind verbunden, jede strecke hat eine länge; z.B. (A,B): 5
diese strecken mit längen musst du irgendwie gespeichert haben, zum Beispiel in einem zweidimensionalen array: laenge[A][B] = 5 heißt: Länge von A nach B ist 5.

angenommen, du willst von A nach E und hast folgende strecken:
(A,B): 3, (A,C): 5
(B,A): 3 (die gegenrichtung), (B,D): 1
(C,A): 5, (C,D): 7, (C,B): 1
(D,E): 2

du beginnst bei A und folgst allen kanten und speicherst die kosten:
weg A-B: 3 (*), weg A-C: 5

von jedem erreichten punkt folgst du wieder allen kanten:
weg A-B-D: 3+1 = 4, weg A-C-D: 5+7 = 12, weg A-C-B: 5+1 = 6, ...

der dritte weg fällt weg, weil du oben (*) gespeichert hast, dass man nach B über den weg A-B mit nur 3 statt 6 kommt. der zweite fällt weg, weil man D über A-B-D schneller erreicht.

schließlich gehst du von D nach E und bist angekommen.

also: für jeden punkt allen ausgehenden kanten folgen, in jedem punkt die minimalen weg-kosten (die kürzeste strecke) und den weg dorthin (also z.B. A-B) speichern, wenn du angekommen bist diesen weg im zielpunkt auslesen.


klaro?

viel spaß...
__________________
when given a choice between two theories, take the one that is funnier. (Blore's razor)
astro-susi ist offline   Mit Zitat antworten
Alt 18-04-2006, 16:46   #4 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
sagichja...
sonar ist offline   Mit Zitat antworten
Alt 19-04-2006, 11:57   #5 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 41
danke, ich probier mich heut abend mal daran...
vielleicht habe ich ja mal noch ne frage an euch.
vielen dank...
angelshouse ist offline   Mit Zitat antworten
Alt 20-04-2006, 14:53   #6 (permalink)
Neuer User
 
Registriert seit: Sep 2005
Beiträge: 41
Question Rekursive Schleife

geht doch auch so

Geändert von angelshouse (20-04-2006 um 16:01 Uhr)
angelshouse ist offline   Mit Zitat antworten
Alt 20-04-2006, 15:40   #7 (permalink)
Neuer User
 
Registriert seit: Jul 2002
Ort: München
Beiträge: 133
ist doch so wie ich's oben geschrieben habe...?
da berechnest du auch für jeden punkt die dahinterliegenden, und die streckenlänge und den weg musst dir eh merken. dadurch, dass du in jedem punkt prüfst, welcher aktuelle weg der kürzeste ist, sparst dir rechenarbeit und verhinderst gleichzeitig auch endlosschleifen in deinem weg.

und rekursion in as geht wie überall sonst auch:
ActionScript:
  1. function rec (startpunkt, endpunkt) {
  2.   if (startpunkt == endpunkt) {
  3.       return 1;
  4.   } else if ( startpunkt.naechste.length == 0) {
  5.       return 0;
  6.   } else {
  7.      for (p = 0; p < startpunkt.naechste.length; p++) {
  8.          rec (startpunkt.naechste[p], endpunkt);
  9.     }
  10.   }
  11. }
durchläuft alle punkte, falls du die nachfolgepunkte als eigenschaft im jeweiligen punkt als array speicherst.
__________________
when given a choice between two theories, take the one that is funnier. (Blore's razor)

Geändert von astro-susi (20-04-2006 um 15:43 Uhr)
astro-susi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele