Mam pocisk wystrzelony ze statku pod kątem, następnie pocisk obraca się w kierunku celu łukiem o danym promieniu skrętu. Jak określić punkt na łuku, kiedy muszę zacząć skręcać, aby pocisk zmierzał prosto w cel?
EDYTOWAĆ
To, co muszę zrobić, zanim wystrzelę pociski, to obliczyć i narysować ścieżki lotu. Tak więc w załączonym przykładzie pojazd nośny ma kąt 90 stopni, a cele są za nim. Oba pociski wystrzeliwane są w kierunku względnym wynoszącym -45 stopni lub + 45 stopni w stosunku do kierunku wystrzeliwania pojazdu. Pociski początkowo obracają się w kierunku celu o znanym promieniu skrętu. Muszę obliczyć punkt, w którym zwrot zabiera pocisk w kierunku, w którym obróci się, aby bezpośrednio zaatakować cel. Oczywiście, jeśli cel jest pod kątem 45 stopni lub mniej, wtedy nie ma początkowego obrotu pocisk po prostu leci prosto do celu.
Po wystrzeleniu pocisku mapa pokaże również śledzenie pocisku na tej linii jako wskazanie toru lotu.
Pracuję nad symulatorem, który naśladuje oprogramowanie operacyjne. Muszę więc narysować obliczoną trasę lotu, zanim pozwolę na wystrzelenie pocisku.
W tym przykładzie cele znajdują się za pojazdem startowym, ale wytyczono wstępnie obliczone ścieżki.
źródło
Odpowiedzi:
Moja matematyka może być nieco niepoprawna, więc opublikowałem odpowiedź na wiki.
Zakładam, że chcesz zrobić scenariusz ciągłego naprowadzania - w którym pocisk P1 poruszający się z prędkością V1 nieustannie próbuje obrócić się w kierunku gracza P2; ale przy ograniczonym tempie zwrotu.
Określ wektor między graczem a pociskiem.
Zamień je w wektory jednostkowe.
Określ kąt między wektorami.
Ogranicz wartość kąta między nimi (pamiętaj, że twoje funkcje wyzwalania prawdopodobnie działają z radianami, więc spróbuj 0.1 jako szybkość skrętu).
Utwórz nowy wektor ruchu.
EDYCJA: Nie ma „punktu wyjścia”, ponieważ jest bardziej niezawodna (i jest łatwiejsza w implementacji) dla scenariusza ciągłego bazowania. Nie musisz znaleźć punktu wyjścia dla koła - po prostu ogranicz szybkość, z jaką pocisk może zmienić kierunek, a reszta dzieje się z powodu ducha w maszynie.
źródło
SIGN
w kroku 4?Zakładam, że chcesz zmienić kierunek, zmieniając kurs startowy na kurs docelowy, a następnie idź prosto do celu (fajniejszym problemem powinno być trafienie w cel podczas skręcania!).
Muszę założyć, że jesteś w stanie skręcić z tym samym promieniem skrętu we wszystkich kierunkach (jest to uproszczenie, które trudno dostrzec w prawdziwych pociskach).
Najprostszym rozwiązaniem jest użycie gięcia pod kątem 90 ° : pilniki rakietowe, dopóki ich trajektoria nie utworzy kąta prostego z celem. jeśli skręcisz dokładnie w punkcie 90 °, ominiesz cel dokładnie o promień skrętu, ponieważ musisz wziąć pod uwagę sam zwrot. Rozwiązaniem jest zacząć obracać dokładnie o „promień skrętu” (?) Przed osiągnięciem punktu 90 °, a następnie skręcić tworząc łuk (spróbuj zgadnąć) 90 °, aby przejść prosto do celu.
To rozwiązanie nie zawsze jest wykonalne, na przykład gdy nie masz widoczności na ścieżce 90 ° (budynki lub inne przeszkody).
Dobrą wiadomością jest to, że rozwiązanie działa pod każdym kątem (nie tylko mitycznym 90 °). Sztuką jest uwzględnienie przestrzeni potrzebnej do skrętu przed rozpoczęciem skrętu.
Ile wcześniej? Dlatego 90 ° to najprostsze rozwiązanie ...
Powiedzmy, że osiągasz widoczność lub najlepszy cel, gdy ścieżka ostrzału tworzy kąt θ °, to powinieneś przewidzieć zwrot przez:
... gdzie secant jest odwrotnością cosinusa. Dowód jest trywialny i pozostawiony czytelnikowi.
Poważnie, formuła pochodzi z prostej geometrycznej konstrukcji.
Czarna linia to ścieżka ognia, podczas gdy cienka czarna linia to ta sama ścieżka, którą przesuwa się w kierunku celu, obracając jednostki radiacji; to samo dotyczy czerwonych, które są ścieżką docelową.
Zielone segmenty zmieniają się w promień, więc powinieneś zobaczyć, że:
AB jest styczną 90 ° - θ °
BC jest siecznym.
Obie zielone linie wychodzące z punktu zwrotnego mają promień skrętu i są prostopadłe do dwóch ścieżek; co oznacza, że promień skrętu jest prawidłowy, a łuk jest styczny do obu ścieżek (tak jak powinno być, jeśli wykonujesz zakręt w ograniczeniach fizycznych).
Daj mi znać, jeśli zobaczysz jakiś błąd.
EDYTOWAĆ:
Opublikowany rysunek pokazuje, że istnieje wiele możliwości wyboru ścieżki nawet w przypadku stałej strzelanki i celu, jak widać tutaj:
Po wybraniu celu możesz zastosować to, co powiedziałem powyżej, pod odpowiednim kątem.
źródło
Wprowadziłbym „zachowanie kierownicze” dla pocisku. Pocisk ma: prędkość (liczbę), pozycję (wektor) i obrót (prąd). Przy każdej aktualizacji w grze / w każdej klatce obrót pocisku zmienia się tylko nieznacznie (w kierunku celu). Następnie pocisk jest przesuwany do przodu zgodnie z jego bieżącym obrotem i aktualną prędkością.
Działa oczywiście w 2D i 3D, ponieważ jedyną różnicą jest dodatkowy wymiar.
Inną możliwością byłoby obliczenie ścieżki pocisku przed wystrzeleniem go. Wyszukaj krzywe Beziera lub splajn .
źródło
Mam wrażenie, że rozwiązujesz tutaj zły problem. Pocisk w prawdziwym świecie nie będzie się martwił, dokąd się skręcić, po prostu skręci, dopóki nie wyceluje w swój cel. Jedynym wymaganym obliczeniem jest, kiedy należy przywrócić kontrolę do położenia neutralnego, ponieważ pocisk w prawdziwym świecie nie może natychmiast zmienić swojego wskaźnika obrotu. Obliczenia te przyjmą jedynie wskazaną prędkość pocisku jako wartość wejściową i sądzę, że byłby wstępnie obliczony.
źródło
Myślę, że najprostszy algorytm zastosowałby dwie zasady:
Jeśli aktualny cel znajduje się bliżej pocisku niż średnica zawracania, idź prosto. Pozwala to uniknąć pocisków krążących wokół bliskich celów zamiast do nich docierać.
W przeciwnym razie obróć się w kierunku celu, aż wskażesz go.
Aby obliczyć punkt, w którym zakręt kończy się w 2D:
W punkcie, w którym chcesz rozpocząć skręcanie, środek koła skrętu znajduje się w kierunku prostopadłym do bieżącego kursu w odległości od promienia skrętu. Zauważ, że są dwa z tych punktów - prawdopodobnie chcesz mieć najbliższy cel. Oblicz tę pozycję i nazwij ją P.
Możesz teraz zbudować trójkąt prostokątny z kątem prostym w stycznej i dwoma znanymi punktami - P i miejscem docelowym. Pozwala to obliczyć odległość od stycznej do punktu docelowego za pomocą Pitagorasa. Nazwij to D.
Teraz musisz obliczyć przecięcie koła o promieniu D w miejscu docelowym z promieniem skrętu. Otrzymasz dwa rozwiązania, które są dwoma stycznymi punktami na tym okręgu, w których pocisk przestałby się obracać (po jednym dla każdego kierunku ruchu wokół koła). Wybierz punkt znajdujący się przed pociskiem - oto twoja odpowiedź.
źródło