Autor Wątek: Obstacle Avoidance  (Przeczytany 1378 razy)

Offline Risist

  • Użytkownik

# Lipiec 22, 2015, 12:38:27
Witam

Ostatnimi czasy próbuję napisać coś co można wykorzystać jako prosty sposób na omijanie przeszkód.
Miało to działać coś na kształt tego:

Wyliczam sobie wektor pomiędzy botem, a każdym obiektem mapy i sumuje je.
Następnie z powstałego wektora wyliczam kąt pod jakim powinien skierować się bot i poruszam go w tym kierunku (to akurat działa )

Jest jednak jeden mały problem, ale na tyle specyficzny, że nie mam pojęcia jak sobie z tym poradzić.
Efektem tego algorytmu jest to, że obiekty znajdujące się dalej oddziałują silniej na kierunek, a te które są bliżej nie wpływają praktycznie wcale. Powinno być dokładnie na odwrót.

Próbowałem sumować odwrotności wektorów, ale niestety wtedy pojawiają się problemy z dzieleniem przez zero. Próbowałem też ustalić maksymalną wartość jaką mogą osiągać zmiany sumy wektorów, jednak tutaj to już w ogóle była porażka.

Jakieś pomysły jak sobie z tym poradzić?


Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline koirat

  • Użytkownik

# Lipiec 22, 2015, 13:08:09
A znany jest ci termin Steering Behaviour ? Jeśli nie to możesz zacząć od tego.
http://www.red3d.com/cwr/steer/
Obstacle avoidance masz tu:
http://www.red3d.com/cwr/steer/Obstacle.html

Offline maro

  • Użytkownik

  • +1
# Lipiec 22, 2015, 13:19:39
Cytuj
Próbowałem sumować odwrotności wektorów, ale niestety wtedy pojawiają się problemy z dzieleniem przez zero. Próbowałem też ustalić maksymalną wartość jaką mogą osiągać zmiany sumy wektorów, jednak tutaj to już w ogóle była porażka.
Może najpierw normalizować te wektory, a potem mnożyć przez odpowiednią wagę dobraną na postawie odległości?

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Lipiec 22, 2015, 22:16:59
Cytuj
Jakieś pomysły jak sobie z tym poradzić?
Przede wszystkim przestać uprawiać voodoo (t.j. tu zsumuję, tu odejmę i może coś z tego wyjdzie), tylko przeanalizować problem.

Trochę więcej by się szczegółów przydało. Ruch jest w 2D, czy 3D (przestrzeń kosmiczna)? Jakich kształtów są obiekty? Jak gęsto będą upakowane? Czy trzeba tylko uniknąć kolizji, czy może być tak gęsto, że trzeba wyszukać drogę między przeszkodami?

Offline Risist

  • Użytkownik

# Lipiec 24, 2015, 12:10:31
@koirat Tak znany jest. Jednak, wolałbym o ile to możliwe pozostać przy swoim pomyśle,
nie musiałbym całej struktury zmieniać.

@maro Nie wierzę, że sam na to nie wpadłem. Ok już działa wszystko jak należy.

@Krzysiek K. voodoo czy nie voodoo, ważne, że przynajmniej przeważnie działa. Kiedyś próbowałem takiego rozwiązania, że dosłownie wszystko chciałem planować. W efekcie doszło do tego, że praktycznie nic nie zrobiłem przez ten cały czas. Takie coś ma raczej sens gdy ma się jakieś większe doświadczenie, gdy robi się coś co jest chociaż podobne do tego co się kiedyś robiło.

Gra jest 2d, jednak układ współrzędnych jaki będzie docelowo wykorzystywać będzie trójwymiarowy ( z czego jeden wymiar będzie dosyć trudny do przemieszczania się). Pathfinding raczej będzie, ale później. Chodziło mi o coś w guście korekty do głównego toru ruchu. Np idzie postać do jakiegoś celu, ale w jej stronę leci pocisk. Więc w takim razie postara się lekko skorygować tor ruchu tak aby wyminąć pocisk. Tak samo miało by to działać z "pozytywnymi" obiektami, w stylu jakieś wzmocnienia.

W każdym razie dziękuję wszystkim za pomoc.