• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Znajdowanie najbliższej ścieżki z libką pathFinder.js

Object Storage Arubacloud
0 głosów
159 wizyt
pytanie zadane 23 marca 2019 w JavaScript przez BT101 Stary wyjadacz (12,540 p.)
zamknięte 23 marca 2019 przez BT101

Używam paczki PathFinding.js aby wyznaczyć ścieżke do 3 jasno-zielonych elementów przy mojej pozycji zaznaczonej na złoto i kolizjach na czerwono:

board

(na tym obrazku x i y są na odwrót bo się pomyliłem z obrazem).

Użyłem wskazówek z dokumentacji i napisałem coś takiego:

var grid = new PF.Grid(6, 6);
grid.setWalkableAt(0, 1, false);
grid.setWalkableAt(1, 1, false);
grid.setWalkableAt(2, 1, false);
grid.setWalkableAt(3, 1, false);
grid.setWalkableAt(4, 1, false);
grid.setWalkableAt(1, 2, false);
grid.setWalkableAt(0, 3, false);
grid.setWalkableAt(1, 3, false);
var finder = new PF.AStarFinder();
var path1 = finder.findPath(0, 0, 2, 2, grid);
var path2 = finder.findPath(0, 0, 0, 2, grid);
var path3 = finder.findPath(0, 0, 5, 0, grid);
console.log(path1.length)
console.log(path2.length)
console.log(path3.length)

Z jakiegoś powodu tylko `path1.length` ma poprawną wartość 11. `path2.length` i `path3.length` zwracają 0. Nie wiem czy to ja zrobiłem gdzieś błąd czy to z tą libką jest coś nie tak?

Wybrałem ją ze względu na to, że można ustawić kolizje za pomocą koordynatów a nie tzw "matrixa" oraz ma ona 6.2k gwiazdek na GH. Jeśli to ta biblioteka, to znacie jakąś fajną alternatywę? Zależy mi na tym, żebym mógł ustawić kolizje, początkowy punkt i punkt docelowy za pomocą koordynatów.

codepen demo

komentarz zamknięcia: Znalezienie rozwiązania problemu.

1 odpowiedź

0 głosów
odpowiedź 23 marca 2019 przez BT101 Stary wyjadacz (12,540 p.)
edycja 29 marca 2019 przez BT101

Jak zwykle nie doczytałem dokumentacji do końca.. Jest napisane:

Be aware that grid will be modified in each path-finding, and will not be usable afterwards. If you want to use a single grid multiple times, create a clone for it before calling findPath.

 

var gridBackup = grid.clone();

Swoją drogą świetna libka, przecież klonowanie grida 1000x1000 w pętli, i w pętli wstawianie za każdym razem (sick!) kolizji to taka świetna optymalizacja wydajności, że wyszukanie najbliższej ścieżki zajmuje tylko 3 sekundy, wow!

Podobne pytania

0 głosów
0 odpowiedzi 360 wizyt
0 głosów
0 odpowiedzi 103 wizyt
pytanie zadane 1 grudnia 2018 w JavaScript przez ptaku19 Użytkownik (800 p.)
0 głosów
1 odpowiedź 272 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...