![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 493 Pomógł: 8 Dołączył: 7.07.2007 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Cześć.
Mam taką oto funkcję oparta na algorytmie Bresenhama.
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 (IMG:style_emoticons/default/smile.gif) 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! Ten post edytował miccom 24.01.2022, 08:24:24 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
trochę to zagmatwane, ze studiów pamiętam, że algorytm Bresenhama jest trochę inny (chyba, że masz to zrobić po swojemu), ale jak Ci się przyda to masz:
Kod function bresenham(int $x1, int $y1, int $x2, int $y2, bool $route): array { $dx = $x2-$x1; $dy = $y2-$y1; $e=$dx/2; $bres = [$x1.';'.$y1]; for ($i=0; $i<$dx; $i++) { $x1 += 1; $e -= $dy; if($e<=0) { $y1 += 1; $e += $dx; array_push($bres, $x1.';'.$y1); } else { array_push($bres, $x1.';'.$y1); } } if($route === true) return $bres; else return $bres = array_reverse($bres); } print_r(bresenhem(1,1,7,5, true)); print_r(bresenhem(1,1,7,5, false)); oczywiście to wszystko na szybkości, tablica jest na sztywno, kod jaki jest każdy widzi (IMG:style_emoticons/default/smile.gif) ale na szybkości i przerobić to tak jak potrzebujesz to pikuś. edit: ten kod jest dla warunków kiedy odcinek (x1,y1)-(x2,y2) tworzył z osią OX kąt w przedziale od 0 do 45° inne przypadki da się zrobić przez transformacje współrzędnych, ale musisz poczytać, bo dzisiaj nie mam głowy do tego Ten post edytował gino 24.01.2022, 10:32:44 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.10.2025 - 13:14 |