• Hallo Besucher!

    Du bist neu im Forum? Dann registriere dich hier, um Diskussionen beizutreten oder eigene Themen zu erstellen. Für die Registrierung ist es erforderlich, dass du einen Spielaccount bei Die Stämme hast.

    Andernfalls kannst du dich hier direkt einloggen.

    Falls du dein Passwort vergessen hast, kannst du hier ein neues Passwort anfordern.

Entfernung zwischen Dörfern

DeletedUser

Gast
Hallo Zusammen,

ich formuliere hier mal meine Idee und vielleicht gibts einen Lösungshinweis.

Ich habe ein Zieldorf und möchte beispiels weise die nächsten 10 eigenen Dörfer zum Zieldorf (unabhängig der Laufzeiten) auflisten.

Ein Denkanstoß wäre super.

Ich hab die Formel für die Entfernung gefunden:

Wurzel((differenz x1 zu x2)²+(differenz y1 zu y2)²)

Für ein Dorf ist das jetzt nicht allzuschwer, allerdings sollte eine Datenbankabfrage die 10 kürzest entfernten Dörfer zurückliefern.
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser66004

Gast
Du gehst die Felder um das Zieldorf herum durch also erst das Quadrat mit Entfernung 1, dann das mit Entfernung 2 usw. und wenn eines dein Dorf ist, dann merkst du das in nem Array. Sobald das Array die Länge 10 hat brichst du das ganze ab.

Du kannst da vielleicht auch mit den Koordinaten arbeiten.
 

DeletedUser61508

Gast
Je nach Entfernung der eigenen Dörfer könnte das aber extrem teuer sein, oder? Ist dein ersten Dorf 30 Felder entfernt, hast du bis zu 900 Dörfer "angefasst" um ein Dorf in deine Liste zu packen. ;-)

Keine Ahnung ob die Wurzelfunktion (SQRT) und die Potenzierung (POW) SQL-Standard sind, für MySQL würde es, ohne es getestet zu haben, sowas in der Art sein:

Code:
SELECT * , ( SQRT ( POW ( $X_POS - 'villages.x' , 2 ) + POW ( $Y_POS - 'villages.y' , 2 ) ) AS Entfernung FROM 'villages' WHERE 
'villages.player' = $PLAYER_ID AND Entfernung < $MAX_DIST ORDER BY Entfernung LIMIT 0, 10;

$X_POS, $Y_POS, $PLAYER_ID und $MAX_DIST sind die Parameter die du je nach Wunsch mitgeben musst.
 

DeletedUser

Gast
Also, ich bekomme als Rückgabewert folgenden SQL-String:

Code:
SELECT v.id, bezeichnung , ( SQRT ( POW ( 278 - v.x , 2 ) + POW ( 925 - v.y , 2 ) ) AS Entfernung 
FROM de63_villages v 
INNER JOIN de63_player p ON v.player = p.id 
WHERE p.spieler = 'xx' AND Entfernung < 1000 
ORDER BY Entfernung LIMIT 0, 10;

wenn ich diesen nun zum debuggen in phpmyadmin ausführe, erhalte ich folgende Fehlermeldung:

#1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei 'AS Entfernung FROM de63_villages v INNER JOIN de63_player p ON v.player = p.id W' in Zeile 1

Somit scheint er die Berechnung zu dementieren. Könnte es daran liegen, dass manche Koordinatenberechnungen Minuswerte ergeben?
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser

Gast
So, habe jetzt eine Lösung:

Code:
$sql = "SELECT v.id, bezeichnung , SQRT ( ( ".$zx." - v.x) *( 278 - v.x ) + ( ".$zy." - v.y )* ( 925 - v.y ))  AS Entfernung 
                FROM ".prefix."villages v 
                INNER JOIN ".prefix."player p ON v.player = p.id 
                WHERE p.spieler = '".$_GET['angrei']."' ORDER BY Entfernung LIMIT 0, 10;";


Danke auf jeden Fall für die Hilfe
 
Oben