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.
Naprawiłem to, przyspieszając najpierw stycznie do celu , zabijając najpierw styczną składową prędkości, a następnie ścigając cel.
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.
steering-behaviors
orbit
Bobobobo
źródło
źródło
Odpowiedzi:
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.
źródło
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ę.
źródło
Intuicja
Oto jeden sposób: Obróćmy twój diagram.
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, gdzied
oznacza przebytą odległość w poziomie (odległość między miejscem strzału i celem)v
to prędkość, z jaką wystrzelono pocisktheta
jest 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
g
dajeg = v^2 * sin(2 * theta) / d
.Stałą w równaniu kuli armatniej
g
jest 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
g
wystrzelenia 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.
źródło