Vereinfachung möglich?

Sasser

Erfahrenes Mitglied
Hallo Leute!

Ich berechne die Enfernung von 2 Koordinaten indem ich die Kästchen zähle, also wieviele nach unten und wieviele nach rechts oder links. Das funktioniert so:

PHP:
function distance($detail,$city)
{
$from = explode(":", $city);
$to = explode(":", $detail);
############################## GLEICHER SEKTOR ###############################
if ($from[0] == $to[0])
{
if ($from[1] < $to[1])
{
$fields = $fields+($to[1]-$from[1]);
}
elseif ($from[1] > $to[1])
{
$fields = $fields+($from[1]-$to[1]);
}
if ($from[2] < $to[2])
{
$fields = $fields+($to[2]-$from[2]);
}
elseif ($from[2] > $to[2])
{
$fields = $fields+($from[2]-$to[2]);
}
}
############################## NIEDRIGERER SEKTOR ############################
elseif ($from[0] > $to[0])
{
if ($from[1] < $to[1])
{
$fields = $fields+($to[1]-$from[1]);
}
elseif ($from[1] > $to[1])
{
$fields = $fields+($from[1]-$to[1]);
}
$fields = $fields+(15-$to[2])+$from[2]+((($from[0]-$to[0])-1)*15);
}
############################## HÖHERER SEKTOR ############################
elseif ($from[0] < $to[0])
{
if ($from[1] < $to[1])
{
$fields = $fields+($to[1]-$from[1]);
}
elseif ($from[1] > $to[1])
{
$fields = $fields+($from[1]-$to[1]);
}
$fields = $fields+(15-$from[2])+$to[2]+((($to[0]-$from[0])-1)*15);
}
return $fields;
}

Kann man das vereinfachen? Zur Zeit gelangt man nur von $from[0] zu $to[0] indem man diese Sektoren von 1 nach 7 durchkreuzt, obwohl sich 1 und 7 gegenüberliegen.

Wie kann man realisieren, dass man auch vertikal sich durch die Sektoren bewegen kann? In jeder Reihe sind 6 Sektoren, dann kommen in der nächsten Reiche wieder 6 usw.

Bitte um Hilfe :confused:
 
Bitte auch um Hilfe ^ ^
Mach mal eine Skizze, dazu und formatier deinen Code.
Nach 3 Zeilen werden meine Augen so komisch müde.
 
Ok. Welche Klasse bist du?
Hoffe 12 und mehr ^^

Großes EDIT:

Als Beispiel willst du von 24:13 zu 4:1 (Form: x:y)
Da bin ich grad mit Mathematik drangegangen.

Schaue nach der Funktion base_convert und lass dir die vorderen Zahlen in ein Sextal (heißt das so für 6 liebe Mathematiker?) System konvertieren:
base_convert(zahl, 10, 6);

Allerdings willst du die differenz:
PHP:
$x1 = 24
$x2 = 4

// immer kleine von der großen abziehen
$diff = base_convert(max($x1, $x2) - min($x1, $x2), 10, 6);

Wenn du dir die Zahl ausgeben lässt, ist die letzte Ziffer die horizontale Entfernung und alles davor die vertikale.

Bitte prüfe das aufs neue ;) ob das alles passt bis hierhin.
 
Zuletzt bearbeitet:
Sorry, aber ich stehe auf dem Schlauch...

Meine Coordinaten sind im Format 1:2:3 (Sektor:VertikalSektor1:HorizontalSektor1)

Also ich will zum Beispiel von Koordinate 1:2:3 zu 5:2:3. Also müssen vertikal die Felder und horizontal gezählt werden.
 
Das was ich zuletzt geschrieben hab ist erstmal für die Sektoren-Entfernung.
Bitte schau ob das soweit funktioniert. Finds ziemlich schwer das zu vereinfachen.
 
Hmm habs nun so eingebau:

PHP:
function distance($detail,$city)
{
$from = explode(":", $city);
$to = explode(":", $detail);
$fields = base_convert(max($from[0], $to[0]) - min($from[0], $to[0]), 10, 6);
return $fields;
}

Wenn ich von Sektor 4 in Sektor 1 will, wird auch 3 angezeigt. Bis Sektor 9 wird korrekt angezeigt, allerdings ab Sektor 10 zeigt er plötzlich auch 10 Sektoren an ? Eigentlich sollte er hier 1 anzeigen!
 
Zurück