Mam taką oto funkcję oparta na algorytmie Bresenhama.
{ $x1 = $tileStart->row; $y1 = $tileStart->column; $x2 = $tileEnd->row; $y2 = $tileEnd->column; $xBegin = $x1; $yBegin = $y1; $xEnd = $x2; $yEnd = $y2; $dots = []; $dots[] = [$xBegin, $yBegin]; if ($steep) { $tmp = $x1; $x1 = $y1; $y1 = $tmp; $tmp = $x2; $x2 = $y2; $y2 = $tmp; } if ($x1 > $x2) { $tmp = $x1; $x1 = $x2; $x2 = $tmp; $tmp = $y1; $y1 = $y2; $y2 = $tmp; } $error = 0; $deltaerr = $deltay / $deltax; $y = $y1; $ystep = ($y1 < $y2) ? 1 : -1; for ($x = $x1; $x < $x2; $x++) { $dots[] = $steep ? [$y, $x] : [$x, $y]; $error += $deltaerr; if ($error >= 0.5) { $y += $ystep; $error -= 1; } } $dots[] = [$xEnd, $yEnd]; return $dots; }
Kod służy do wyznaczania trasy a właściwie do rysowania linii między punktem A a punktem B na układzie współrzędnych.
Jednak nie działa tak jakbym chciał.
Od wskazanego punktu w PRAWO, PRAWA GÓRA, PRAWY DÓŁ odpowiednio pokazuje przejścia przez punkty w układzie współrzędnych.
Ale jeśli wykonuję rysowanie "do tyłu" to pokazuje mi odpowiednie punkty- ale zawsze rosnąco-- co przy rysowaniu w LEWO, LEWO GÓRA i LEWO DÓŁ powinno być na odwrót.
Jak zmodyfikować kod aby pokazywał mi odpowiednie pola?
Już daję przykłady:
Startuję z punktu [34,62]. 3 pól w prawo.
System pokazuje mi poszczególne kroki: route=[[34,62],[34,63],[34,64],[34,65]] i to jest git

Ale jeśli z tego samego punktu chcę rysować linię w lewo to system pokazuje mi punkty: route=[[34,59],[34,60],[34,61],[34,62]]
I same pola są oki- ale jak zmodyfikować kod aby pokazywał mi pola w kolejności malejącej jeśli rysuję w LEWO, LEWO GÓRA, LEWO DÓŁ? route=[[34,62],[34,61],[34,60],[34,59]]
Oto jest pytanie!