Jak sprawić, by agenci AI poruszali się po krzywej?

12

Obecnie moja bardzo podstawowa struktura AI ma agentów, którzy poruszają się po poszarpanej ścieżce złożonej z szeregu punktów.

ścieżka nawigacyjna

Robią to po prostu przesuwając swoją pozycję z jednego punktu do drugiego. Kiedy dotrą do następnego punktu, przechodzą do następnego i tak dalej. Jak mogę to zmienić, aby poruszały się płynnie wzdłuż zakrzywionej wersji ścieżki i jak wygenerować krzywą?

SirYakalot
źródło
jak wybierają następny punkt?
FxIII,
@FxIII przepraszam, że nie widziałem tego komentarza wcześniej - czy masz na myśli, jak wybrali nowy cel wyszukiwania lub jak wybrali następny punkt wyszukiwania?
SirYakalot

Odpowiedzi:

4

Poszukujesz wygładzenia ścieżki. Oczywiście, jak zauważył bummzack, chcesz również upewnić się, że każde wygładzenie ścieżki, które wykonasz, spowoduje legalne ruchy Twoich agentów.

W tym artykule z Gamasutra wyjaśniono prawie wszystko, co musisz wiedzieć, w tym wygładzanie ścieżki, legalne zakręty i realistyczne, płynne algorytmy skrętu.

Inną alternatywą, która jest nieco prostsza, jest zachowanie Seek z małym okręgiem / kulą ograniczającą, aby sprawdzić, czy agent znajduje się w następnym punkcie ścieżki lub blisko niego.

Ray Dey
źródło
7

Ponieważ znasz już swoje punkty kontrolne, wystarczy zaktualizować kod interpolacji, aby użyć algorytmu krzywizny (na przykład Hermite lub Cosinus).

Witryny te zawierają świetne wyjaśnienia i przykładowy kod, który powinien zacząć:

Metody interpolacji Paula Bourke'a

Sol :: Poradniki - Sztuczki interpolacyjne

Doug.McFarlane
źródło
A jeśli wygenerowana krzywa nagle uderzy w przeszkodę?
bummzack,
Dotyczy to tylko ruchu agentów na klatkę. Nadal obowiązywałby ten sam algorytm wykrywania kolizji. Po wykryciu kolizji zmień punkty kontrolne, aby ominąć obiekt (trudny), lub tymczasowo zacznij używać innego algo ruchu.
Doug.McFarlane
@bummzack to dobry punkt, a odpowiedzią jest użycie siatki nawigacyjnej i odpowiednie wygładzenie twoich krzywych, jednak na razie zamierzam to uruchomić z prostym grafem nawigacyjnym, więc rozwiążę to tylko wygładzając ścieżki trochę.
SirYakalot,
@bummzack: dodaj pewne zachowania kierownicze w celu unikania przeszkód na szczycie algorytmu generowania zakrzywionej ścieżki.
imre
0

Mam zamiar przejść tutaj wbrew zasadom i zasugerować, że zamiast wstępnie generować krzywe, po prostu obsługuj je klatka po klatce, używając (na przykład) tej samej logiki, której użyłbyś do utworzenia bazowania -missile .

Będzie to o wiele łatwiejsze i prawdopodobnie bardziej realistyczne, ponieważ nie potrzebujesz specjalnych przypadków, gdy między ścianami są ściany - po prostu obsługujesz wykrywanie kolizji jak zwykle.

Minusem jest to, że ruch będzie wyglądał nieoptymalnie. Obiekt zawsze będzie podążał najbardziej bezpośrednią ścieżką od jednego punktu do drugiego, co oznacza, że ​​w przeciwieństwie do splajnu, nie zacznie skręcać w kierunku punktu 3, dopóki nie minie punktu 2. W zależności od twojej sytuacji, to może, ale nie musi być naprawialnym poprzez dostosowanie punktów na drodze (jeśli to nawet problem).

BlueRaja - Danny Pflughoeft
źródło
1
Zasadniczo byłoby to zachowanie Seek, które zasugerowałem.
Ray Dey,
0

Wyszukiwarka ścieżek powinna dać ci ścieżkę i nie powinieneś jej modyfikować. Wierzę, że można zmodyfikować algorytm wyszukiwarki ścieżek, aby wziąć pod uwagę, że ścieżka z ostrymi zakrętami jest gorsza niż w przypadku gładkich krzywych, tak jak ma to miejsce w przypadku długiej ścieżki w porównaniu z krótkimi.

Prześlę tutaj jakieś rozwiązanie, jeśli znajdę chwilę, aby głęboko się nad tym zastanowić, ale myślę, że to jest właściwa droga.

FxIII
źródło