Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Algorytm Bresenham- potrzebuję pomocy.
miccom
post
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.

  1. function bresenham(Tile $tileStart, Tile $tileEnd): Array
  2. {
  3.  
  4. $x1 = $tileStart->row;
  5. $y1 = $tileStart->column;
  6.  
  7. $x2 = $tileEnd->row;
  8. $y2 = $tileEnd->column;
  9.  
  10. $xBegin = $x1;
  11. $yBegin = $y1;
  12. $xEnd = $x2;
  13. $yEnd = $y2;
  14. $dots = [];
  15. $dots[] = [$xBegin, $yBegin];
  16. $steep = abs($y2 - $y1) > abs($x2 - $x1);
  17.  
  18. if ($steep) {
  19. $tmp = $x1;
  20. $x1 = $y1;
  21. $y1 = $tmp;
  22. $tmp = $x2;
  23. $x2 = $y2;
  24. $y2 = $tmp;
  25. }
  26.  
  27. if ($x1 > $x2) {
  28. $tmp = $x1;
  29. $x1 = $x2;
  30. $x2 = $tmp;
  31. $tmp = $y1;
  32. $y1 = $y2;
  33. $y2 = $tmp;
  34. }
  35. $deltax = floor($x2 - $x1);
  36. $deltay = floor(abs($y2 - $y1));
  37. $error = 0;
  38. $deltaerr = $deltay / $deltax;
  39. $y = $y1;
  40. $ystep = ($y1 < $y2) ? 1 : -1;
  41.  
  42. for ($x = $x1; $x < $x2; $x++) {
  43. $dots[] = $steep ? [$y, $x] : [$x, $y];
  44. $error += $deltaerr;
  45. if ($error >= 0.5) {
  46. $y += $ystep;
  47. $error -= 1;
  48. }
  49. }
  50. $dots[] = [$xEnd, $yEnd];
  51.  
  52. return $dots;
  53. }


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
Go to the top of the page
+Quote Post

Posty w temacie
- miccom   Algorytm Bresenham- potrzebuję pomocy.   24.01.2022, 08:23:14
- - trueblue   Odwrócić tablicę? Ale czy na pewno to jest kwesti...   24.01.2022, 08:31:18
- - miccom   Cytat(trueblue @ 24.01.2022, 08:31:18...   24.01.2022, 08:33:44
- - trueblue   Nie widzę, aby pierwszy i ostatni wpadały właściwi...   24.01.2022, 09:04:09
- - miccom   Przy tworzeniu tablicy bez algorytmu wrzucam pierw...   24.01.2022, 09:33:03
- - trueblue   Z tego co widzę, to przy podaniu punktu startowego...   24.01.2022, 09:59:54
- - miccom   No tak, pytanie dlaczego się zdublowały dwa elemen...   24.01.2022, 10:06:23
- - gino   trochę to zagmatwane, ze studiów pamiętam, że algo...   24.01.2022, 10:28:20
- - miccom   Cytat(gino @ 24.01.2022, 10:28:20 ) t...   24.01.2022, 10:38:05
- - gino   CytatGeneralnie to próbuję ustalić ścieżkę od punk...   24.01.2022, 10:48:31
- - trueblue   Cytat(miccom @ 24.01.2022, 10:06:23 )...   24.01.2022, 10:52:18
- - miccom   Tak, doszedłem do tego. Ale jeśli nie dodam ich- ...   24.01.2022, 10:58:08
- - trueblue   Dla: 30,32 i 10,5, czyli lewo-dół, w tablicy jest ...   24.01.2022, 11:09:18
- - miccom   Oki, to zrób symulację [34,62] do [36,60] , u mnie...   24.01.2022, 11:25:29
- - trueblue   A ja się odnoszę do tego: Cytat(miccom @ 24.0...   24.01.2022, 11:35:26
- - miccom   Nie rozumiemy się Start [34,62] Meta [34,58] Wy...   24.01.2022, 12:56:27
- - trueblue   Dodaj na końcu: [PHP] pobierz, plaintext $dots...   24.01.2022, 13:58:42
- - miccom   Napisałem że odwrócenie to nie problem, pytanie w ...   24.01.2022, 15:12:05
- - trueblue   Przecież widzisz jaki wynik otrzymujesz - czy punk...   24.01.2022, 15:15:40
- - miccom   Dziękuję Trueblue. No bez ciebie bym nie ogarnął....   24.01.2022, 15:35:01


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 12:24