Voici une version PHP d'une fonction permettant de déterminer le chemin le plus court:
On calcule d'abord le pas et la boucle "trace" ensuite le chemin.Code PHP :
<?php
function way($Xa, $Ya, $Xb, $Yb) {
$way = $Dif = array();
$Xi = $Xa;
$Yi = $Ya;
$way[$Xa][$Ya] = 0;
$Dif['X'][] = $Xb - $Xa;
$Dif['Y'][] = $Yb - $Ya;
$Dif['X'][] = ( !$Dif['X'][0] ) ? 1 : $Dif['X'][0];
$Dif['Y'][] = ( !$Dif['Y'][0] ) ? 1 : $Dif['Y'][0];
$Xp = abs($Dif['X'][0] / $Dif['Y'][1]);
$Yp = abs($Dif['Y'][0] / $Dif['X'][1]);
$Xp = ( $Xp > 1 ) ? 1 : $Xp;
$Yp = ( $Yp > 1 ) ? 1 : $Yp;
$Xp = ( $Dif['X'][0] < 0 ) ? -$Xp : $Xp;
$Yp = ( $Dif['Y'][0] < 0 ) ? -$Yp : $Yp;
$i = 1;
while( $Xi != $Xb || $Yi != $Yb ) {
$Xi += $Xp;
$Yi += $Yp;
echo "X{$i}= ".round($Xi)." | Y{$i}=".round($Yi)."<br />";
$way[round($Xi)][round($Yi)] = $i;
$i++;
}
return $way;
}
?>
J'ai testé ce script de beaucoup de manière différente, si vous trouvez une erreur, dites le moi ^^.
Ci-joint le fichier permettant de tester.
Comment l'exploiter ?
Avec 2 boucle for lisant X et Y dans le tableau $way retourné.
NB: Le script peut être allégé en utilisant une boucle for avec 0 et 1 pour X et Y respectivement, on gagnerait 3 lignes(4 si on compte pas les {}) il me semble...