Unikanie orbitowania podczas prowadzenia pojazdu w pogoni za kierownicą


9

Mam pocisk, który zachowuje się w pogoni za tropem (i próbuje uderzyć) w swój (stacjonarny) cel.

Działa dobrze, o ile nie atakujesz po wystrzeleniu pocisku. Jeśli atakujesz, pocisk ma tendencję do okrążenia swojego celu.

wprowadź opis zdjęcia tutaj

Naprawiłem to, przyspieszając najpierw stycznie do celu , zabijając najpierw styczną składową prędkości, a następnie ścigając cel.

wprowadź opis zdjęcia tutaj

Przyspieszam więc w -vT, aż vT osiągnie prawie 0. Następnie przyspieszam w kierunku vN.

Chociaż to działa, szukam bardziej eleganckiego rozwiązania, w którym pocisk może uderzyć w cel bez uprzedniego wyraźnego zabicia elementu stycznego.


Nie sądzę, że możesz uzyskać satysfakcjonującą odpowiedź bez wyjaśnienia, jaki jest twój algorytm sterowania. Jestem prawie pewien, że problem leży w twojej heurystyce.
sam hocevar,

1
Właściwie to była odpowiedź, której użyłem
bobobobo

Odpowiedzi:


5

Wygląda na to, że problem polega na tym, że pocisk po prostu celuje w cel bez względu na jego aktualną prędkość. Przypisz swojemu pociskowi maksymalny kąt, o który ciąg może odbiegać od linii ruchu.

Przy każdej iteracji naprowadzania obliczasz jego prędkość prostopadłą do celu. Sprawdź, ile musi przechylić silnik, aby wyzerować ten składnik jego prędkości, a następnie przyciąć go do maksimum, aby mógł przechylić silnik.

Podczas pierwszej części lotu będzie poruszać się nieco na prawo od linii prostej na rysunku # 2, ale gdy leci, silnik wyzeruje ten element i skończy prosto w kierunku celu.

Należy pamiętać, że w tym scenariuszu będzie tylko jedna rama, w której silnik będzie wychylał się na wartość inną niż zero lub maks. Jeśli śledziłeś ruchomy cel, mogłeś otrzymywać mniejsze ugięcia w każdym cyklu podczas ruchu celu.


4

Być może nie jest to eleganckie rozwiązanie, którego szukasz, ale odkryłem, że jeśli zwolnię pocisk, jeśli trafi w cel, zbliża się do celu, skutecznie śledzi i obraca się szybciej i może trafić w cel. Możesz zwiększyć szybkość obrotu pocisku, gdy się zbliża, zamiast zmniejszać prędkość, ale może to dać graczom „wow, jestem pewien, że przegapił” paskudną niespodziankę.

To może nie wyglądać tak wspaniale, ale z pewnością powstrzymuje pociski przed orbitowaniem, a także od atakowania kół przeciwnika przez pociski, aż skończy się paliwo.

Oto demo, które przygotowałem z mojej implementacji (demonstruje to trzeci lub czwarty pocisk i znowu o 1:05): http://www.youtube.com/watch?v=9uiGMC_nH2w

Możesz także zwiększyć celność pocisku, gdy zbliża się on również do celu (ponieważ ma bliższą sygnaturę do zablokowania). Pokazano to również na filmie za około minutę. Czerwone kółko pokazuje rzeczywisty cel pocisku. Daje to chaotyczną ścieżkę lotu na dużym dystansie, a następnie prostuje się, gdy się zbliża.

Jak mówię, może nie być to odpowiedź, której szukasz, ale mam nadzieję, że to pomoże, jeśli tylko trochę.


To jest całkiem fajne. Idę na maksymalne przyspieszenie, ale spowolnienie pocisku jest fajną sztuczką (i można go użyć, jeśli nazwiesz je „sztucznymi pociskami?”)
bobobobo 15.12. O

4

Intuicja

Oto jeden sposób: Obróćmy twój diagram.

obrót oryginalnej ilustracji problemu

Teraz rakieta jest kulą armatnią !

Fizyka

Ma stałe przyspieszenie „w dół”, tj. Prostopadle do wektora od miejsca strzelania do celu. Narysowałem go powyżej jako przerywaną zieloną linię. Nazwijmy to horyzontem odniesienia . (Pamiętaj, że ten horyzont odniesienia jest stały! Rakieta została wystrzelona ze stałej pozycji z ustaloną pozycją jako cel.)

Wiemy (z wikipedii ) o kuli armatniej bez oporu powietrza d = v^2 * sin(2 * theta) / g, tam, gdzie

  • d oznacza przebytą odległość w poziomie (odległość między miejscem strzału i celem)
  • v to prędkość, z jaką wystrzelono pocisk
  • thetajest kątem względem horyzontu, pod którym wystrzelono pocisk ( kąt wektora kierunku strzału z horyzontu odniesienia )

Ułożenie równania dla gdaje g = v^2 * sin(2 * theta) / d.

Stałą w równaniu kuli armatniej gjest przyspieszenie ziemskie . Możemy to rozumieć jako przyspieszenie spowodowane napędem rakietowym . To też w porządku - wciąż jest to stałe przyspieszenie w stałym kierunku .

Co teraz?

Uruchom to równanie dla gwystrzelenia rakiety. Powie ci, jak szybko przyspieszyć rakietę prostopadle do horyzontu odniesienia, aby trafić w cel. Ponieważ kierunek tego przyspieszenia jest stały, orbita się nie utworzy.

Bum.


To miłe podejście. Myślę, że spowoduje to, że rakieta wyśledzi koło , a ty dostarczasz siłę dośrodkową niezbędną do okrążenia koła, które zdarzy się uderzyć w cel.
Wydaje

Siła zastosowana tutaj nie jest dośrodkowa. Kierunek siły jest prostopadły do ​​horyzontu odniesienia, który nie zmienia się, jeśli cel jest nieruchomy. Oznacza to, że zachowanie na orbicie nie może się zdarzyć.
Anko,

Zredagowałem odpowiedź, aby to wyjaśnić.
Anko,

@Anko: Nie jestem pewien, czy twoja matematyka działa dla ruchomego celu, co wydaje się być wyzwalaczem w przypadku PO.
Mooing Duck,

@Mooing Masz rację, działałoby to tylko w przypadku ruchomych celów, jeśli poruszają się one przewidywalnie i celujesz w prognozy. Pytanie, czy specjalnie wspomnieć cel jest nieruchomy choć w pierwszym zdaniu.
Anko
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.