Poszukuję prostego algorytmu do pathfindingu

Poszukuję prostego algorytmu do pathfindingu
tBane
  • Rejestracja:prawie 2 lata
  • Ostatnio:30 minut
  • Lokalizacja:Poznań
  • Postów:391
0

Witam.
Poszukuję prostego w implementacji algorytmu znajdowania drogi z punktu a do punktu b, który uwzglednia kolizję z kolistymi obiektami o parametrach x, y, radius. Jak się za to zabrać ?
Jeżeli chcesz podać kod to prosiłbym o pseudo-kod lub c++ w starej wersji.


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.6.2.
Spine
  • Rejestracja:ponad 22 lata
  • Ostatnio:36 minut
  • Postów:6826
6

Najprostszy chyba będzie A*: https://theory.stanford.edu/~amitp/GameProgramming/

Tutaj masz nawet wideo tutorial:

Kuliste obiekty najlepiej sobie uprość do kwadratów.

Kiedyś na podstawie tego implementowałem pathfinding: https://csis.pace.edu/~benjamin/teaching/cs627/webfiles/Astar.pdf

Funkcja zwracała listę współrzędnych, na gridzie od punktu A do B.

Dodam jeszcze, że w Unity mógłbyś użyć gotowca, NavMesh 😏


🕹️⌨️🖥️🖱️🎮
edytowany 2x, ostatnio: Spine
LukeJL
  • Rejestracja:ponad 11 lat
  • Ostatnio:2 minuty
  • Postów:8449
2

Najlepsze chyba źródło o A* https://www.redblobgames.com/pathfinding/a-star/introduction.html
A przynajmniej najbardziej wizualne.

No i jak szukasz czegoś prostego, to nawet A* nie musisz, tylko Breadth First Search, wtedy nie robisz heurystyk, tylko sobie jedziesz po wszystkich polach (ale ważne, żeby trzymać gdzieś informacje, czy dane pole było odwiedzone, czy nie. I żeby nie iterować po już odwiedzonych): https://en.wikipedia.org/wiki/Breadth-first_search

który uwzglednia kolizję z kolistymi obiektami o parametrach x, y, radius. Jak się za to zabrać ?

Te algorytmy zwykle robi się na prostokątnej siatce, więc wtedy taki kolisty obiekt mógłbyś umieścić w siatce (być może na kilku różnych polach) i miałbyś niedoskonałe przybliżenie.

Natomiast te algorytmy nie wymagają wcale prostokątnej siatki. Od strony algorytmu przechodzisz po prostu przez jakiś graf. Więc jeśli potrzebna byłaby dokładność, że to akurat ma być kolista przeszkoda, mógłbyś np. jakoś zakrzywić przestrzeń wokół przeszkody.

Albo zrobić na kilka etapów - najpierw odszukać ścieżkę na duże prostokąty, a potem w miejscach, gdzie jest przeszkoda, dodatkowo podzielić to na mniejsze prostokąty.

Przy czym zakładam cały czas, że przeszkoda byłaby statyczna.


edytowany 2x, ostatnio: LukeJL
Riddle
Administrator
  • Rejestracja:około 15 lat
  • Ostatnio:3 minuty
  • Postów:10162
0

Dijkstra albo zalewowy chyba.

Boski
  • Rejestracja:około 6 lat
  • Ostatnio:około 5 godzin
  • Postów:137
3

W przypadku, gdy wiele źródeł dąży do jednego lub kilku celów, polecam
https://leifnode.com/2013/12/flow-field-pathfinding/
wtedy bez znaczenia, może być i 100 agentów w różnych miejscach a liczymy tylko raz

LukeJL
pole wektorowe <3 no właśnie, czasem przydają się abstrakcje używane przez fizyków.
flowCRANE
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Tuchów
  • Postów:12218
1
tBane napisał(a):

Poszukuję prostego w implementacji algorytmu znajdowania drogi z punktu a do punktu b, który uwzglednia kolizję z kolistymi obiektami o parametrach x, y, radius.

Trochę mało danych. Po współrzędnych widać, że chodzi o 2D, ale przydałoby się jeszcze wiedzieć tak pi razy drzwi ile tych kolistych obiektów może być po drodze, czy ścieżka może przebiegać pomiędzy dwoma obiektami i jeśli tak, to jaki musi być pomiędzy nimi minimalny prześwit. No i też przydałoby się wiedzieć czy ścieżka ma być absolutnie najkrótsza, czy ma być w konkretnej minimalnej odległości od obiektów oraz czy ma być zgodna z kafelkami, czy w formie linii łamanej.

Porób trochę rysunków poglądowych, tak aby łatwiej było zrozumieć czego potrzebujesz.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 3x, ostatnio: flowCRANE

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.