Menghindari mengorbit dalam mengejar perilaku kemudi

9

Saya memiliki rudal yang mengejar perilaku untuk melacak (dan mencoba dan memengaruhi) targetnya (diam).

Ini berfungsi dengan baik selama Anda tidak memberondong ketika Anda meluncurkan rudal. Jika Anda memberondong, rudal cenderung untuk mengorbit targetnya.

masukkan deskripsi gambar di sini

Saya memperbaikinya dengan mempercepat tangensial ke target terlebih dahulu , membunuh komponen tangensial dari kecepatan terlebih dahulu, kemudian beelining untuk target.

masukkan deskripsi gambar di sini

Jadi saya mempercepat -vT sampai vT hampir 0. Lalu mempercepat ke arah vN.

Sementara itu berhasil, saya mencari solusi yang lebih elegan di mana rudal dapat mempengaruhi target tanpa secara eksplisit membunuh komponen tangensial terlebih dahulu.

bobobobo
sumber
Saya tidak berpikir Anda bisa mendapatkan jawaban yang memuaskan tanpa menjelaskan apa itu algoritma kemudi Anda. Saya cukup yakin masalahnya ada pada heuristik Anda di sana.
sam hocevar
1
Sebenarnya, ini adalah jawaban yang saya gunakan
bobobobo

Jawaban:

5

Sepertinya masalahnya adalah bahwa rudal itu hanya menunjuk dirinya sendiri pada target tanpa memperhatikan kecepatan saat itu. Tetapkan rudal Anda sudut maksimum di mana dorongan dapat menyimpang dari garis gerak.

Pada setiap iterasi panduan, Anda menghitung kecepatannya tegak lurus terhadap target. Cari tahu berapa banyak itu harus memberi tip pada mesinnya untuk menghilangkan kecepatan komponen ini dan kemudian klip ini secara maksimal sehingga ia dapat memberi tip pada mesinnya.

Selama bagian pertama dari penerbangan itu akan bergerak agak ke kanan garis lurus pada gambar # 2 tetapi ketika terbang mesin akan nol komponen ini dan itu akan berakhir langsung menuju target.

Perhatikan bahwa dalam skenario ini hanya akan ada satu frame di mana mesin memiliki defleksi apa pun selain nol atau maks. Jika Anda melacak target bergerak Anda bisa mendapatkan defleksi yang lebih rendah pada setiap siklus saat target bergerak.

Loren Pechtel
sumber
4

Ini mungkin bukan solusi elegan yang Anda cari, tetapi saya telah menemukan bahwa jika saya memperlambat rudal, jika itu akan meleset, ketika mendekati target, ia secara efektif melacak dan berbelok lebih cepat dan dapat mengenai target. Anda dapat meningkatkan kecepatan belokan rudal saat semakin dekat, daripada mengurangi kecepatan, tetapi ini mungkin memberi pemain 'wow, saya yakin itu akan melewatkan kejutan buruk.

Ini mungkin tidak terlihat begitu hebat, tapi itu tentu saja menghentikan misil dari mengorbit, dan dari lingkaran musuh - menembaki rudal sampai bahan bakar habis.

Berikut ini adalah demo yang saya kumpulkan dari implementasi saya (misil ketiga atau keempat menunjukkan ini, dan sekali lagi pukul 1:05): http://www.youtube.com/watch?v=9uiGMC_nH2w

Anda juga dapat meningkatkan akurasi rudal saat mendekati target juga (karena memiliki tanda tangan yang lebih dekat untuk dikunci). Ini ditampilkan dalam video juga sekitar satu menit. Lingkaran merah menunjukkan target sebenarnya dari rudal. Ini memberinya jalur penerbangan kacau ketika dalam jarak jauh, dan kemudian meluruskan semakin dekat.

Seperti yang saya katakan, itu mungkin bukan jawaban yang Anda cari, tapi saya harap itu membantu jika hanya sedikit.

David K.
sumber
Itu sangat keren. Saya menggunakan akselerasi maksimal, tetapi memiliki rudal melambat adalah trik yang rapi (dan dapat digunakan jika Anda menyebutnya "trick rudal"?)
bobobobo
4

Intuisi

Ini salah satu caranya: Ayo putar diagram Anda.

rotasi ilustrasi masalah asli

Sekarang roket itu adalah bola meriam !

Fisika

Ini memiliki akselerasi tetap "ke bawah" yaitu tegak lurus terhadap vektor dari lokasi penembakan ke target. Saya menggambar di atas sebagai garis hijau putus-putus. Sebut saja cakrawala referensi . (Perhatikan bahwa horizon referensi ini konstan! Roket ditembakkan dari posisi tetap dengan posisi tetap sebagai target.)

Kita tahu (dari wikipedia ) untuk bola meriam tanpa hambatan udara d = v^2 * sin(2 * theta) / g, di mana

  • d adalah jarak horizontal yang ditempuh (jarak antara lokasi tembak dan target)
  • v adalah kecepatan proyektil itu ditembakkan
  • thetaadalah sudut untuk cakrawala proyektil ditembakkan ( sudut vektor arah api dari cakrawala referensi )

Mengatur ulang persamaan untuk gmemberi g = v^2 * sin(2 * theta) / d.

Konstanta dalam persamaan bola meriam g,, adalah akselerasi karena gravitasi . Kita bisa menganggapnya percepatan karena dorongan roket . Itu baik-baik saja - itu masih akselerasi konstan dalam arah yang konstan .

Sekarang apa?

Jalankan persamaan itu gketika Anda menembakkan roket. Ini akan memberi tahu Anda berapa banyak untuk mempercepat roket secara tegak lurus terhadap cakrawala referensi, untuk mencapai target. Karena arah akselerasi itu konstan, orbit tidak akan terbentuk.

Ledakan.

Anko
sumber
Ini adalah pendekatan yang rapi. Saya pikir ini akan menyebabkan roket untuk melacak lingkaran , Anda memasok gaya sentripetal yang diperlukan untuk mengorbit lingkaran yang kebetulan berdampak pada target. Saya percaya ini mungkin pendekatan yang digunakan untuk kerang merah di Mario Kart , karena saya selalu berpikir mereka cenderung melengkung secara melingkar
bobobobo
Gaya yang diterapkan di sini bukan centripetal. Arah gaya tegak lurus terhadap horizon referensi, yang tidak berubah jika targetnya diam. Ini berarti perilaku mengorbit tidak dapat terjadi.
Anko
Saya telah mengedit jawaban untuk membuatnya lebih jelas.
Anko
@Anko: Saya tidak yakin matematika Anda di sini berfungsi untuk target bergerak, yang tampaknya menjadi pemicu untuk kasus OPs.
Mooing Duck
@Mooing Anda benar ini hanya akan berfungsi untuk memindahkan target jika targetnya dapat diprediksi dan Anda menargetkan prediksi. Pertanyaan tidak secara spesifik menyebutkan target meskipun stasioner, dalam kalimat pertama.
Anko