Saya memiliki rudal yang ditembakkan dari kapal pada suatu sudut, rudal kemudian berputar ke arah sasaran dalam lengkungan dengan radius belokan yang diberikan. Bagaimana cara menentukan titik pada busur ketika saya harus mulai berputar sehingga rudal langsung menuju sasaran?
EDIT
Apa yang perlu saya lakukan sebelum meluncurkan rudal adalah menghitung dan menggambar jalur penerbangan. Jadi dalam contoh terlampir, kendaraan peluncuran memiliki heading 90 derajat dan target ada di belakangnya. Kedua rudal diluncurkan pada pos relatif -45deg atau +45 deg ke pos peluncuran kendaraan. Rudal awalnya berbelok ke target dengan radius belokan yang diketahui. Saya harus menghitung titik di mana belokan membawa rudal ke arah di mana ia akan berbalik untuk langsung menyerang target. Tentunya jika target berada di atau dekat 45 derajat maka tidak ada putaran awal misil langsung menuju sasaran.
Setelah rudal diluncurkan, peta juga akan menampilkan pelacakan rudal di jalur ini sebagai indikasi jalur terbangnya.
Apa yang saya lakukan adalah mengerjakan simulator yang meniru perangkat lunak operasional. Jadi saya harus menggambar jalur penerbangan yang dihitung sebelum saya membiarkan rudal diluncurkan.
Dalam contoh ini target berada di belakang kendaraan peluncuran tetapi jalur yang telah ditentukan dihitung.
sumber
Jawaban:
Matematika saya mungkin sedikit salah, jadi saya sudah menggunakan jawabannya.
Saya berasumsi Anda ingin melakukan skenario homing terus menerus - di mana P1 rudal bepergian dengan kecepatan V1 terus-menerus mencoba untuk berbalik ke arah pemain P2; tetapi pada tingkat belokan terbatas.
Tentukan vektor antara pemain dan rudal.
Ubah mereka menjadi vektor satuan.
Tentukan sudut antara vektor.
Batasi nilai sudut di antara mereka (ingat fungsi trigonometri Anda mungkin bekerja dengan radian, jadi coba 0,1 sebagai laju belokan).
Buat vektor gerakan baru.
EDIT: Ini tidak memiliki 'titik awal' karena ini lebih kuat (dan merupakan implementasi yang lebih mudah) untuk skenario homing yang berkelanjutan. Anda tidak perlu menemukan titik awal untuk lingkaran - cukup batasi kecepatan di mana rudal dapat mengubah arah dan sisanya terjadi karena hantu di mesin.
sumber
SIGN
di langkah 4?Saya berasumsi Anda ingin mengubah arah dengan mengubah pos peluncuran ke target, lalu terus lurus ke target (masalah yang lebih menyenangkan adalah mengenai target ketika berbalik!).
Saya harus berasumsi bahwa Anda dapat berbelok dengan radius belokan yang sama di semua arah (ini adalah penyederhanaan yang sulit dilihat dalam rudal nyata).
Solusi paling sederhana adalah dengan menggunakan tekukan 90 ° : file rudal hingga lintasannya membentuk sudut yang tepat dengan target. jika Anda berbelok tepat pada titik 90 ° Anda akan kehilangan target tepat oleh radius belokan, karena Anda harus memperhitungkan belokan itu sendiri. Solusinya adalah mulai memutar tepat "putar radius" meter (?) Sebelum mencapai titik 90 °, lalu belok membentuk busur (coba tebak) 90 ° untuk langsung menuju target Anda.
Solusi ini tidak selalu layak, misalnya ketika Anda tidak memiliki visibilitas di jalur 90 ° (bangunan atau hambatan lainnya).
Berita baiknya adalah solusinya bekerja untuk setiap sudut (bukan hanya mitos 90 °) triknya adalah dengan memperhitungkan ruang yang diperlukan untuk belok mulai belok sebelum.
Berapa sebelumnya? Inilah sebabnya mengapa 90 ° barang adalah solusi paling sederhana ...
Katakanlah Anda mencapai visibilitas atau sasaran sasaran terbaik ketika jalur tembak membentuk sudut θ ° maka Anda harus mengantisipasi belokan dengan:
... Di mana garis potong adalah kebalikan dari cosinus. Buktinya sepele dan diserahkan kepada pembaca.
Serius, rumusnya berasal dari konstruksi geometris sederhana.
Garis hitam adalah jalur tembak, sedangkan garis hitam tipis adalah jalur yang sama bergerak menuju target dengan memutar unit_radius; sama untuk yang merah yang merupakan jalur target.
Panjang segmen hijau adalah turning_radius sehingga Anda akan melihat bahwa:
AB adalah garis singgung dari 90 ° - θ °
BC adalah garis potong.
Kedua garis hijau yang berasal dari titik belok ini memiliki panjang turning_radius dan tegak lurus terhadap dua jalur; artinya jari-jari belok benar dan busur bersinggungan dengan kedua jalur (sebagaimana seharusnya jika Anda berbelok di bawah kendala fisik).
Beri tahu saya jika Anda melihat beberapa kesalahan.
EDIT:
Gambar yang Anda diposting menunjukkan bahwa ada beberapa pilihan untuk path bahkan dengan shooter dan target tetap seperti yang Anda lihat di sini:
Setelah target dipilih, Anda dapat menerapkan apa yang saya katakan di atas dengan sudut yang tepat.
sumber
Saya akan menerapkan "perilaku kemudi" untuk rudal. Rudal memiliki: Kecepatan (angka), posisi (vektor), dan rotasi (arus). Pada setiap pembaruan di gim Anda / di setiap frame, rotasi rudal diubah sedikit (menuju target). Kemudian rudal itu bergerak maju sesuai dengan rotasi dan kecepatan arusnya.
Berfungsi untuk 2D dan 3D jelas, karena satu-satunya perbedaan adalah dimensi tambahan.
Kemungkinan lain adalah menghitung jalur rudal sebelum menerbangkannya. Mencari kurva bezier atau spline .
sumber
Saya merasa Anda menyelesaikan masalah yang salah di sini. Rudal dunia nyata tidak akan khawatir tentang ke mana harus berpaling, itu hanya akan berbalik sampai diarahkan ke sasarannya. Satu-satunya perhitungan yang melibatkan adalah kapan harus mulai mengembalikan kontrol ke netral karena rudal dunia nyata tidak dapat secara instan mengubah laju belokannya. Perhitungan itu hanya akan mengambil kecepatan udara yang ditunjukkan rudal sebagai nilai input dan saya pikir akan dihitung ulang.
sumber
Saya pikir algoritma paling sederhana hanya akan mengikuti dua aturan:
Jika target saat ini lebih dekat ke rudal daripada diameter belok maka terus lurus. Ini menghindari rudal yang mengorbit target dekat daripada benar-benar sampai ke mereka.
Kalau tidak berbalik ke arah target sampai Anda menunjuk itu.
Untuk menghitung titik di mana belokan berakhir dalam 2D:
Pada titik di mana Anda ingin mulai berbelok, pusat lingkaran belok terletak pada arah tegak lurus terhadap pos saat ini pada jarak radius putar Anda. Perhatikan bahwa ada dua poin itu - Anda mungkin menginginkan yang paling dekat dengan target Anda. Hitung posisi itu dan sebut P.
Anda sekarang dapat membuat segitiga siku-siku dengan sudut kanan pada garis singgung, dan dua titik yang diketahui - P dan tujuan Anda. Ini memungkinkan Anda menghitung jarak dari garis singgung ke titik target Anda dengan Pythagoras. Sebut saja D.
Sekarang Anda perlu menghitung persimpangan lingkaran jari-jari D di tempat tujuan dengan lingkaran putar Anda. Anda akan mendapatkan dua solusi yang merupakan dua titik singgung pada lingkaran di mana rudal akan berhenti berputar (satu untuk setiap arah perjalanan mengelilingi lingkaran). Pilih titik yang ada di depan rudal - itulah jawaban Anda.
sumber