Ergebnis 1 bis 7 von 7

Thema: Problem bei Pathfinding: Berechnen einer Luftline

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Hm, irgendwas hab ich falsch gemacht:
    Code:
    Delta_X = X2
    Delta_X -= X1
    Delta_Y = Y2
    Delta_Y -= Y1
    Delta_X_Abs = Delta_X
    If Delta_X_Abs < 0 Then Delta_X_Abs *= -1
    Delta_Y_Abs = Delta_Y
    If Delta_Y_Abs < 0 Then Delta_Y_Abs *= -1
    If Delta_X_Abs >= Delta_Y_Abs Then
       Steigung = Delta_Y
       Steigung *= 100
       Steigung /= Delta_X
    Else
       Steigung = Delta_X
       Steigung *= 100
       Steigung /= Delta_Y
    Endif
    Das ist auf einer Seite, die wie folgt aufgerufen wird:
    Code:
    X1 = Start_X
    X2 = Ziel_X
    Y1 = Start_Y
    Y2 = Ziel_Y
    Call_Event ( This Site page 1 )
    Steigung1 = Steigung
    X1 = Held_X
    X2 = Held_X
    Y1 = Start_Y
    Y2 = Ziel_Y
    Call_Event ( This Site page 1 )
    Steigung2 = Steigung
    Steigung_Delta = Steigung1 - Steigung2
    If Steigung_Delta < 0 Then Steigung_Delta *= -1
    If Steigung_Delta <= Grenzwert Then
       Switch Luftlinie = On
    Else
       Switch Luftlinie = Off
    Endif
    Jetzt weiß ich nicht, ob das überhaupt so stimmt und welchen Grenzwert ich einsetzen soll :/

    €dit: Argh! Ich bin so blöd! xD
    Hab die Formel vergessen und falsch verstanden! Mach mich nochmal ran und poste, wenns klappt

    €dit²: kk, hab's fast:
    Code:
    Delta_X = X2
    [...] bleibt gleich
    Endif
    Y-Ergebnis = Steigung * X1
    zweite Seite:
    Code:
    X1 = Start_X
    X2 = Ziel_X
    Y1 = Start_Y
    Y2 = Ziel_Y
    Call_Event ( This Site page 1 )
    Y_Start_Ziel = Y-Ergebnis
    X1 = Held_X
    X2 = Held_X
    Y1 = Start_Y
    Y2 = Ziel_Y
    Call_Event ( This Site page 1 )
    Y_Held_Ziel = Y-Ergebnis
    Y-Delta = Y_Start_Ziel - Y_Held_Ziel
    If Y-Delta < 0 Then Y-Delta *= -1
    If Y-Delta <= Grenzwert Then
       Switch Luftlinie = On
    Else
       Switch Luftlinie = Off
    Endif
    Das einzige Problem ist, das er rumspinnt, wenn Delta_Y = 0 ist, also eine perfekte horizontale Linie

    Geändert von Teflo (21.07.2008 um 14:26 Uhr)

  2. #2
    Code:
    X1 = Start_X
    X2 = Ziel_X
    Y1 = Start_Y
    Y2 = Ziel_Y
    Call_Event ( This Site page 1 )
    Y_Start_Ziel = Y-Ergebnis
    
    ->Ich frage mich was du ab jetzt machst? Dadurch das du X1 und X2 mit 
    Held_X besetzt erhaelst du nur die hoehe bis zum Ziel (Y-Abstand) und nicht
    die Luftlinien-Steigung. Berechne hier doch einfach die Steigung die der Held
    und das Ziel haben. Diese Vergleichst du dann mit der Steigung Start-Ziel ist 
    der Wert gleich dann ist man auf der Luftlinie sonst nicht. Wenn du hierbei 
    die Nachkommerstellen nach dem rechnen entfernst, erhaelst du zudem auch 
    schon einen Akzeptablen Grenzwert, wobei man hier mit den 
    Nachkommerstellen Spielen kann um noch bessere Ergebnisse zu erhalten
    (auf 1 Nachkommastelle runden, auf die zweite etc).
    
    X1 = Held_X
    X2 = Held_X
    Y1 = Start_Y
    Y2 = Ziel_Y
    Call_Event ( This Site page 1 )
    Y_Held_Ziel = Y-Ergebnis
    Y-Delta = Y_Start_Ziel - Y_Held_Ziel
    If Y-Delta < 0 Then Y-Delta *= -1
    If Y-Delta <= Grenzwert Then
       Switch Luftlinie = On
    Else
       Switch Luftlinie = Off
    Endif
    Zitat Zitat
    Das einzige Problem ist, das er rumspinnt, wenn Delta_Y = 0 ist, also eine perfekte horizontale Linie
    Du kannst vorm Rechnen abfragen ob Y-Start = Y Ziel und je nachdem einen anderen Weg zum rechnen verwenden, da man die Luftlinien-Bedingung auf einer horizontalen Luftlinie mit einem If abfragen kann. Ansonsten weiss ich nicht mehr ob der Maker ein Problem damit hat die 0 zu Teilen (oder mit der 0 zu Teilen(vieleicht beides^^)) kanns leider nicht testen.

  3. #3
    Zitat Zitat von tarrox Beitrag anzeigen
    Ansonsten weiss ich nicht mehr ob der Maker ein Problem damit hat die 0 zu Teilen (oder mit der 0 zu Teilen(vieleicht beides^^)) kanns leider nicht testen.
    Die 0 zu teilen (0 : 10) ist unproblematisch. Nur kannst du durch die 0 selbst nicht teilen. Das kann kein System afaik. Das wären ja unendlich viele Ergebnisse. Der Maker fängt das allerdings bei einer solchen Teilung den Fehler ab. Wenn du beim Maker versuchst durch 0 zu teilen, dann belässt der Maker die Variable einfach bei ihrem alten Wert.

    Ergo:
    Code:
    20 / 0 = 2

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •