Bagaimana cara mencegah misil pengarah dari mengorbit target mereka?

78

Saya mengembangkan game ruang 2D tanpa gesekan, dan saya menemukan sangat mudah untuk membuat orbit rudal pengarah targetnya. Saya ingin tahu tentang strategi anti-mengorbit.

Contoh sederhananya adalah misil pengarah yang berakselerasi langsung menuju sasarannya. Jika target itu bergerak tegak lurus dengan lintasan rudal lalu berhenti, akselerasi rudal menuju target tidak akan cukup untuk mengatasi kecepatannya sendiri, dan rudal itu dapat didorong ke orbit di sekitar target, seperti yang digambarkan:

Masalah Orbiting

  • Dalam frame 1, rudal langsung menuju sasarannya, tidak ada masalah.
  • Dalam bingkai 2, target telah pindah ke posisi baru seperti yang ditunjukkan. Rudal terus berakselerasi langsung menuju target (berwarna merah), sementara masih bergerak ke arah target sebelumnya (berwarna hitam) karena kecepatannya yang ada.
  • Dalam bingkai 3, kecepatan rudal terus membawa rudal di sekitar sisi target (hitam) sementara vektor percepatan berusaha mati-matian untuk menarik rudal ke arah target.
  • Dalam bingkai 4 dan seterusnya, rudal jatuh ke orbit yang berpotensi stabil di sekitar target dan tidak pernah mencapai tujuannya. Panah hitam menunjukkan vektor kecepatan sementara garis merah menunjukkan vektor percepatan pada saat yang bersamaan.

Menimbang bahwa tidak ada gesekan di ruang angkasa, tidak ada yang memperlambat kecepatan misil ke bawah dan menghancurkan orbitnya. Solusi yang mungkin adalah mengarahkan "di belakang" target, dan ini akan menyebabkan orbitnya tertutup, tetapi bagaimana ini dilakukan dari sudut pandang pemrograman?

Bagaimana cara membuat misil pengarah mencapai targetnya?

John McDonald
sumber
9
Ini sebenarnya cara yang sangat keren untuk membuat barang-barang mengorbit.
Derek
Ini mengingatkan saya pada integrasi Euler. Yang harus Anda lakukan adalah membuat langkah waktu Anda menjadi sangat kecil, masalah terpecahkan!
Jeff
Saya ingin menerapkan efek ini di game saya! : D
Zolomon
Lihat juga Menerapkan rudal homing
bobobobo
6
@ Deza Ini adalah definisi orbit. Objek yang mengorbit berakselerasi dengan gaya sentripetal, menuju pusat beberapa objek lainnya.
bobobobo

Jawaban:

49

Pertama-tama, Anda harus membuat semua perhitungan tentang akselerasi apa yang diterapkan dalam kerangka referensi rudal (di situlah rudal itu diam dan segala sesuatu bergerak di sekitarnya, juga sering disebut "koordinat objek" atau "koordinat lokal" di mesin game, meskipun dalam kasus kami, kami ingin kecepatan menjadi persis nol juga).

Gagasannya kemudian bukan bertujuan untuk target, tetapi bertujuan untuk tempat di mana target akan berada pada perkiraan waktu dampak. Jadi algoritma umum terlihat seperti ini:

  1. Perkirakan berapa banyak waktu yang dibutuhkan untuk rudal untuk mencapai target. Jika target terbang langsung ke sana (ingat, rudal itu diam ), dapat sesederhana menghitung jarak / kecepatan , dalam kasus lain itu bisa lebih rumit. Jika target dapat mencoba dan menghindar, Anda tidak akan dapat membuat estimasi yang sempurna, jadi tidak apa-apa untuk tidak terlalu tepat.

  2. Dengan asumsi kecepatan konstan (estimasi tingkat 1) atau percepatan konstan (estimasi tingkat 2) dari target, hitung di mana ia akan berada pada perkiraan waktu di atas.

  3. Hitung percepatan yang akan menyebabkan rudal berada di tempat yang kira-kira sama pada waktu yang sama.

  4. Proyeksikan kembali percepatan dari kerangka referensi rudal ke kerangka global, gunakan itu.

Bagian penting di sini adalah untuk mendapatkan perkiraan waktu di kasarnya ballpark, dan untuk tidak melupakan kemampuan akselerasi rudal saat melakukannya. Misalnya, perkiraan yang lebih baik untuk "targetnya lurus di depan kita dan terbang ke arah kita" adalah menyelesaikan persamaan tersebut.

jarak = kecepatan x waktu + 1/2 x percepatan x waktu 2

... untuk waktu (menggunakan kecepatan negatif untuk benda terbang langsung menjauh dari rudal), dengan solusi yang Anda cari menggunakan standar rumus kuadrat menjadi ...

waktu = (√ ( kecepatan 2 + 2 x percepatan x jarak ) - kecepatan ) / percepatan

Menambahkan parameter tambahan - seret, misalnya - dengan cepat mengubahnya menjadi persamaan diferensial tanpa solusi aljabar. Inilah mengapa ilmu roket sangat sulit.

Martin Sojka
sumber
Saya pikir inilah yang saya butuhkan. Saya tidak pernah berpikir dalam koordinat lokal sebelum sekarang.
John McDonald
5
Jawaban yang bagus Sebagai catatan tambahan, banyak rudal pelacak dirancang untuk secara otomatis meledak pada kondisi ini: 1) mencapai jarak tertentu dari trek dan 2) jarak ke trek sekarang meningkat. Itu mungkin menambah sedikit perilaku yang baik dengan sedikit biaya.
Patrick Hughes
1
Ini jawaban yang bagus. Saya akhirnya menggunakan akselerasi konstan untuk senjata (saya pikir itu paling realistis), memperkirakan waktu yang diperlukan untuk tiba (mengatur ulang d = v t + 1/2 * a t * t dan menyelesaikan untuk t). Saus rahasianya adalah sebagai umpan balik perkiraan waktu untuk memproyeksikan di mana target akan diberi kecepatan saat ini dan perkiraan waktu untuk dampak. Bekerja dengan baik.
bobobobo
1
Saya kira ini adalah jenis algoritma perhitungan mati
bobobobo
42

@ Martin Sojka sudah memberi tahu Anda apa yang harus dilakukan. Alih-alih meningkatkan responsnya, saya ingin mengusulkan Anda pendekatan lain yang lebih sederhana: DELOCK

Seperti yang saya katakan di Proyeksi lintasan kendaraan? , objek dengan kemampuan kemudi terbatas melakukan "memproyeksikan" beberapa lingkaran bayangan: dua daerah yang tidak dapat dijangkau melalui kemudi langsung (torus dan hipertensi dalam dimensi yang lebih tinggi).

Ketika Anda melihat bahwa target Anda memasuki salah satu bayangan kemudi seperti itu, Anda dapat berhenti mengarahkan target Anda dan menjaga arah lain untuk waktu yang terbatas.

Pemicu delocking dapat dihitung dengan mudah dengan aproximating tori Anda dengan kerucut (ganda) *:

Delock trigger

Anda harus menghitung produk skalar antara vektor arah (yang dinormalisasi) dan vektor perpindahan target Anda ( Target - Object / | Target - Object |).

Ketika produk skalar menjadi nol, arah target Anda menjadi tegak lurus terhadap arah Anda yang mengarah ke lintasan melingkar **. Saat target jatuh ke wilayah cyan, Anda dapat membalikkan arah kemudi sehingga Anda dapat meletakkannya di luar area yang tidak terjangkau dan melakukan pelayaran ulang.

* Sejujurnya ini bukan kerucut ... adalah jenis lain dari permukaan yang diperintah yang dihasilkan oleh (semi) revolusi dua garis tidak paralel di sekitar sumbu yang melewati persimpangan dan tegak lurus terhadap garis garis-bagi; Proyeksi pada bidang 2D sama dengan kerucut ganda, tetapi sumbu rotasi tegak lurus dengan yang menghasilkan kerucut.

** Lintasan itu tidak mungkin melingkar atau elips atau bahkan tertutup. Kemungkinannya adalah lintasan akan mengikuti jalur seperti spirograph (sebuah hipotrokoid) dalam 2D ​​atau bahkan monster lain dalam 3 dimensi ke atas. Anda tidak bisa mencapai pusat kurva seperti itu dan mereka terlihat seperti lingkaran sehingga lintasan "melingkar".

FxIII
sumber
+1 Ide bagus untuk kasus di mana vektor percepatan rudal dibatasi agar tegak lurus dengan arah perjalanan. Saya tidak berpikir ini adalah kasus untuk pertanyaan ini.
Martin Sojka
@ Martin Sojka vektor percepatan bahkan dapat dipecah menjadi dua komponen satu radial dan yang lainnya tangensial ke arah. Yang pertama memberi tahu seberapa banyak Anda dapat memutar, yang kedua seberapa banyak Anda dapat mempercepat / mengurangi daya.
FxIII
1
Ya, dan jika Anda bebas memilih kekuatan relatif mereka secara independen satu sama lain (yaitu, jika arah dan kekuatan vektor percepatan tidak bergantung pada vektor gerakan), "lingkaran pengecualian" Anda akan hilang.
Martin Sojka
@ Martin Sojka Apakah tidak ada kendala pada kekuatan akselerasi?
FxIII
1
+1 Itu sangat keren. Saya belum pernah memikirkan itu sebelumnya. Saya mungkin akan mencoba menggunakan ini bersama dengan jawaban @ Matin
John McDonald
8

Sistem panduan Anda dibangun dengan asumsi bahwa akselerasi langsung menuju target pada akhirnya akan menyebabkan objek bertabrakan. Karena asumsi itu salah, pedoman AI yang didasarkan pada asumsi itu juga tidak berhasil.

Jadi berhentilah berakselerasi langsung menuju target. Tambahkan beberapa logika untuk mendeteksi jika posisi target agak tegak lurus terhadap arah gerakan rudal. Jika demikian, maka rudal perlu berakselerasi ke target, tetapi juga memperlambat gerak maju. Jadi alih-alih langsung menuju target, ia bias arah akselerasinya sehingga kecepatan saat ini dalam arah geraknya melambat.

Selain itu, Anda perlu pemicu untuk memastikan Anda tidak berjalan terlalu lambat. Jadi tambahkan beberapa kecepatan ambang sehingga, jika Anda di bawah ambang itu, Anda berhenti melakukan biasing.

Satu hal terakhir: tidak ada sistem panduan yang sempurna. Alasan mengapa rudal dapat mencegat target dalam kehidupan nyata adalah bahwa target bergerak jauh lebih lambat daripada rudal itu sendiri, dan target tidak terlalu gesit (secara relatif berbicara). Jika rudal Anda tidak akan berkali-kali lebih cepat dari target yang mereka kejar, maka mereka akan kehilangan banyak.

Nicol Bolas
sumber
2
"Targetnya tidak terlalu gesit" .. bukan?
bobobobo
5

Metode yang paling sederhana dan canggih untuk digunakan dalam permainan ini (dan kehidupan nyata) adalah Navigasi Proporsional.

Di bawah logika Constant Decreasing Range Range (CBDR), ketika dua objek (rudal dan target) bergerak dalam arah yang sama tanpa mengubah garis pandang antara satu sama lain, mereka akan bertabrakan.

Sightline, atau Line of Sight (LOS) adalah garis imajiner antara rudal dan target - vektor antara posisi rudal dan posisi target. Laju perubahan sudut LOS ini adalah LOS Rotation Rate.

Ketika LOS Rotation Rate menjadi nol, maka garis pandang tidak lagi berubah - kedua objek sekarang berada di jalur tabrakan. Anggap diri Anda mengejar seseorang saat bermain sepak bola. Jika Anda membimbingnya sedemikian rupa sehingga tubuhnya terlihat "membeku" di bidang penglihatan Anda (garis pandang antara Anda dan dia tidak lagi berubah), Anda akan bertabrakan dengannya selama Anda mempertahankan akselerasi lari Anda untuk menjaga agar tubuhnya terlihat membeku di pandanganmu.

Di bawah Proportional Navigation (PN), rudal mempercepat "N" kali lebih cepat daripada LOS Rotation Rate. Ini akan memaksa rudal untuk memimpin target sampai LOS Rotation Rate menjadi nol - yaitu, rudal dan target tampak beku dalam keadaan karena garis pandang tidak lagi berubah - mereka sekarang berada di jalur tabrakan. Variabel "N" dikenal sebagai Navigasi Konstan (pengganda konstan).

Perintah bimbingan rudal harus diberikan sebagai berikut:

Akselerasi = Kecepatan Penutupan * N * Tingkat LOS

LOS Rate dapat dengan mudah diturunkan dengan mengukur vektor LOS (posisi target - posisi rudal), dan menyimpan variabelnya. Vektor LOS dari frame baru (LOS1) dikurangi dengan vektor LOS dari frame lama (LOS0) untuk menghasilkan delta LOS - sekarang Anda memiliki tingkat rotasi LOS primitif.

Untuk menyederhanakan Kecepatan Penutupan, Anda cukup menggunakan vektor LOS saat ini sebagai gantinya, dengan demikian:

Akselerasi = (target_pos - missile_pos) * LOS_delta * N

N adalah konstanta navigasi - di dunia nyata, N biasanya diatur antara 3 hingga 5, tetapi angka sebenarnya yang bisa diterapkan dalam permainan agak tergantung pada laju pengambilan sampel saat Anda memperoleh tingkat LOS / delta. Coba angka acak (mulai dari 3) dan tingkatkan hingga 1500, 2000, dll hingga Anda melihat efek utama yang diinginkan dalam permainan. Perhatikan bahwa semakin tinggi konstanta navigasi, semakin cepat rudal akan bereaksi terhadap perubahan LOS pada awal penerbangan. Jika model simulasi roket beranda Anda agak realistis, konstanta navigasi yang berlebihan dapat membebani kemampuan aerodinamis rudal Anda, jadi Anda harus menggunakan angka seimbang berdasarkan trial and error.

James Jun
sumber
4

Seperti jawaban lain dari Martin dan Nicol tunjukkan, Anda mungkin ingin memandu rudal Anda tidak langsung pada target, tetapi dengan cara yang akan membuatnya bertabrakan dengan target nanti. Namun, metode yang dijelaskan oleh Martin rumit dan yang dijelaskan oleh Nicol tidak efisien.

Cara yang lebih sederhana - tetapi masih cukup efisien - untuk memandu rudal adalah dengan menyesuaikan sudutnya sesuai dengan perubahan sudut antara rudal dan target. Pada setiap centang Anda menghitung sudut dari rudal ke target, dan membandingkannya dengan sudut dari centang sebelumnya. Perbedaannya adalah perbedaan tepat yang ingin Anda buat pada sudut rudal. Jadi, jika sudutnya 0,77 dalam satu centang dan 0,75 pada berikutnya, Anda ingin menyesuaikan sudut rudal dengan -0,02. Metode ini sederhana, dan selama targetnya "di depan" dari rudal, itu sangat efisien dalam hal rute yang dipilih. Ini juga berlaku untuk sejumlah dimensi, tidak hanya dalam 2d.

Namun perlu diingat:

  • Metode ini pecah jika rudal dan target berada dalam kecepatan yang sama persis dan bergerak paralel. Yah secara teoritis masih merencanakan jalur tabrakan untuk rudal, hanya butuh waktu tak terbatas :) dalam prakteknya rudal harus selalu lebih cepat dari target, tetapi jika mereka memiliki kecepatan yang sama Anda perlu menambahkan kasing sudut untuk mengidentifikasi apakah mereka paralel .

  • Metode ini pecah jika target dan rudal terbang di jalur yang sama tetapi dalam arah yang berlawanan. Itu tidak bisa benar-benar terjadi di dunia nyata, tetapi tidak terlalu umum dalam permainan diskrit. Anda perlu menambahkan pemeriksaan sudut untuk algoritma di atas untuk menguji ini.

  • Jika rudal Anda memiliki kemampuan belok terbatas, cukup putar balik maksimum setiap kali perlu berputar lebih dari itu. Selama misil itu cukup jauh ia masih akan bekerja. Jika terlalu dekat, lihat peluru terakhir.

  • Ingatlah untuk bersikap lunak ketika memeriksa tabrakan. Di dunia nyata banyak rudal mengandalkan hulu ledak mereka untuk menghasilkan "zona bunuh", jadi mereka hanya perlu mendekati target, tidak benar-benar bertabrakan dengannya.

  • Akhirnya, dalam praktiknya rudal mungkin masih meleset , yang membawa kami kembali ke pertanyaan awal Anda. Saya pikir cara yang baik adalah dengan menonaktifkan homing untuk beberapa kutu, membiarkannya mencapai jarak tertentu, dan kemudian membuatnya homing lagi. Saya pikir metode yang diusulkan oleh fxiii untuk mengidentifikasi zona mati adalah cara yang bagus untuk mendeteksi kapan Anda perlu mematikan homing.

ek
sumber
1

Beberapa opsi sederhana yang telah ditemukan 'cukup baik' untuk game yang pernah saya kerjakan di masa lalu:

1) Jika resolusi adegan yang Anda lihat memungkinkannya, maka objek tersebut dapat meledak ketika mendekati target (Itulah yang saya yakini bahwa rudal homing paling umum benar-benar berfungsi dalam kasus apa pun). Jika rentang orbit Anda sekitar dua kali ukuran objek menjauh maka ini kemungkinan tidak akan bekerja untuk Anda karena hanya akan berakhir terlihat buruk.

Jika tujuan akhir Anda dalam solusi Anda adalah hanya untuk memastikan rudal Anda mengenai target, maka saya semua hanya untuk membuatnya mencapai target. Sekali lagi, ini hanya akan tergantung pada bagaimana solusi terlihat.

2) Jika Anda menemukan bahwa rudal Anda berada pada sudut yang tepat ke target Anda, ini bisa menjadi titik di mana kunci 'pecah', dan rudal hanya bergerak lurus kecuali targetnya mendapat 'di depan' rudal lagi.

Saya selalu lebih suka solusi sederhana bila memungkinkan. Jika Anda membuat gim di mana misil pengarah hanyalah salah satu senjata yang digunakan maka Anda kemungkinan bisa lolos dengan ini karena para pemain kemungkinan akan melepaskan tembakan salvo dan kemudian bertukar kembali ke senjata pertunangan konstan mereka sesegera mungkin. Jika Anda membuat simulasi rudal, maka jelas salah satu jawaban lain adalah pilihan yang lebih baik.

Semoga ini membantu.

James
sumber
0

Seperti yang telah dikatakan, Anda harus mengarahkan rudal ke tempat target diharapkan ketika Anda sampai di sana daripada di mana target sekarang. Ini akan menghentikan PALING misil masuk ke orbit tetapi orbit masih mungkin terjadi jika target menghindar tepat. Ini adalah taktik sah yang digunakan oleh pilot pesawat untuk menghindari rudal yang masuk - karena rudal itu jauh lebih cepat daripada Anda, itu akan memiliki radius belokan yang lebih besar dan jink yang tajam pada saat yang tepat menyebabkannya terus berjalan. (Meskipun Anda masih bisa berisiko dari ledakan kedekatan.)

Karena kita berhadapan dengan rudal yang masih dapat melacak dan masih mendorong Anda mendapatkan situasi orbit jika target menghindar ke salah satu zona yang dibicarakan oleh posting FxIII.

Namun, saya tidak setuju dengan solusi untuk masalah ini. Sebagai gantinya, saya akan memprogram rudal dengan demikian:

jika rudal telah melesat pada 90 derajat ke garis gerakannya untuk 360 derajat gerakan Anda berada di orbit. Sesuaikan dorong ke 120 derajat dari garis gerak. Orbit rudal akan melebar karena tidak berputar sekeras tetapi rudal juga akan melambat, sehingga memungkinkannya untuk bermanuver lebih baik. Ketika jarak target ditargetkan hingga 1,25x diameter zona mati (perhatikan bahwa diameter ini didasarkan hanya dan hanya pada kecepatan rudal, tidak diperlukan perhitungan rumit saat runtime) rudal kembali ke perilaku pelacakan normal.

Bergantian, gunakan kepala pencari kayu - ketika kisaran untuk target berhenti menghitung mundur Anda meledak.

Loren Pechtel
sumber
0

Saya tahu ini adalah pertanyaan lama, tapi saya pikir ada sesuatu yang terlewatkan dalam jawaban yang diberikan sejauh ini. Dalam pertanyaan awal, rudal (atau apa pun) diperintahkan untuk mempercepat menuju posisi target. Beberapa jawaban menunjukkan bahwa ini salah, dan Anda harus mempercepat menuju tempat yang Anda pikir akan menjadi sasaran di kemudian hari. Ini lebih baik tetapi masih salah.

Apa yang benar-benar ingin Anda lakukan adalah tidak mempercepat menuju target tetapi bergerak menuju target. Cara untuk berpikir tentang ini adalah dengan mengatur kecepatan yang Anda inginkan menunjuk ke target (atau proyeksi lokasi target) dan kemudian mencari tahu akselerasi apa yang paling baik Anda terapkan (mengingat batasan apa pun yang Anda miliki, mis. Rudal mungkin tidak dapat dipercepat). secara langsung terbalik) untuk mencapai kecepatan yang Anda inginkan (mengingat bahwa kecepatan adalah vektor).

Ini adalah contoh yang berhasil saya terapkan pagi ini, dalam kasus saya untuk pemain AI dalam permainan simulasi olahraga, di mana pemain mencoba mengejar lawan mereka. Gerakan ini diatur oleh model 'tendangan-melayang' standar di mana akselerasi diterapkan pada awal timestep untuk memperbarui kecepatan dan kemudian objek melayang pada kecepatan itu selama durasi stempel waktu.

Saya akan memposting turunan ini, tetapi saya menemukan tidak ada markup matematika yang didukung di situs ini. Boo! Anda hanya perlu percaya bahwa ini adalah solusi optimal, mengingat saya bahwa saya tidak memiliki batasan pada arah percepatan, yang tidak berlaku untuk objek jenis rudal, sehingga akan memerlukan beberapa kendala tambahan.

Kode dalam python, tetapi harus dapat dibaca dengan latar belakang bahasa apa pun. Untuk kesederhanaan, saya menganggap setiap langkah waktu memiliki panjang 1 dan menyatakan kecepatan dan percepatan dalam unit yang sesuai untuk mencerminkan itu.

self.x = # current x co-ordinate
self.y = # current y co-ordinate
self.angle = # current angle of motion
self.current_speed = # current magnitude of the velocity
self.acc # Maximum acceleration player can exert on themselves
target_x = # x co-ordinate of target position or projection of it
target_y = # y co-ordinate of target position or projection of it
vx = self.current_speed * math.cos(self.angle) # current velocity x component
vy = self.current_speed * math.sin(self.angle) # current velocity y component
# Find best direction to accelerate
acc_angle = math.atan2(self.x + vx - target_x,self.y + vy - target_y)

Perhatikan bahwa fungsi atan2 (a, b) menghitung tan kebalikan dari a / b, tetapi memastikan sudut-sudutnya berada di kuadran yang benar dari sebuah lingkaran, yang mengharuskan Anda mengetahui tanda a dan b.

Dalam kasus saya, begitu saya memiliki akselerasi, saya menerapkannya untuk memperbarui kecepatannya

vx_new = vx + self.acc * math.cos(acc_angle)
vy_new = vy + self.acc * math.sin(acc_angle)
self.current_speed = math.sqrt( vx_new**2 + vy_new**2)
self.angle = math.atan2(vy_new,vx_new)

Saya juga memeriksa kecepatan baru terhadap kecepatan maks tergantung pemain dan tutup pada saat itu. Dalam hal rudal, mobil atau sesuatu dengan kecepatan belok maksimum (dalam derajat per tick) Anda cukup melihat sudut gerakan saat ini versus ideal yang dihitung dan jika perubahan ini lebih besar dari yang diperbolehkan, ubah saja sudutnya dengan sebisa mungkin menuju yang ideal.

Bagi siapa pun yang tertarik dengan derivasi ini, saya menuliskan jarak antara pemain dan target setelah timstep, dalam hal posisi awal, kecepatan, laju akselerasi dan sudut akselerasi, kemudian mengambil turunan dengan memperhatikan sudut akselerasi. Menetapkan bahwa ke nol menemukan minimum dari jarak target pemain setelah timestep sebagai fungsi dari sudut akselerasi, yang persis apa yang ingin kita ketahui. Menariknya, meskipun tingkat akselerasi awalnya dalam persamaan, itu membatalkan membuat arah yang optimal terlepas dari seberapa banyak Anda benar-benar dapat mempercepat.

Bogdanovist
sumber
Dalam beberapa skenario, saya hampir menyarankan pengaturan kecepatan secara langsung - meskipun itu bisa sulit untuk diintegrasikan dengan sistem fisika yang sebagian besar bergantung pada gaya. Jika ini adalah permainan di mana rudal ditembakkan secara teratur, dengan "menghindar" bukan mekanik permainan yang terkenal, maka Anda mungkin ingin menghindari risiko kecil dari fisika yang menghalangi, dan hanya memastikan bahwa mekanik ini bekerja seperti yang diharapkan pemain. untuk setiap waktu. Ini mungkin lebih masuk akal, katakanlah, RTS daripada game aksi luar angkasa.
Katana314
0

Anda menggunakan tingkat putaran konstan. Itulah yang menyebabkan orbit melingkar sempurna bagus.

Pendekatan yang lebih realistis untuk sistem panduan adalah dengan memvariasikan tingkat belokan dengan jarak target terbalik (lebih sedikit jarak -> lebih banyak tingkat belokan). Ini akan memberikan spiral daripada orbit, dan menjamin tabrakan dengan target yang lebih lambat.

Ini juga memberikan jalur penerbangan yang jauh lebih realistis. Tingkat belokan konstan tidak sempurna sempurna. Anda juga dapat menambahkan variasi acak ke laju belokan untuk mensimulasikan turbulensi. Sekali lagi, jauh lebih realistis, dan benar-benar dapat menghindari skenario mengorbit steady-state.

Tidak perlu persamaan parsial.

Dominic Cerisano
sumber