Bayangkan sebuah "drone" dan titik target di pesawat 2d. Ada delapan parameter:
P = my position
Q = target position
V = my velocity
I = my moment of inertia
w = my angular velocity
s = my angular position
T = max thrust
U = max torque
(Kami hanya akan mengatakan targetnya diam)
Tugas drone adalah untuk mencapai target secepat mungkin, mematuhi torsi maksimum dan dorongan maksimum. Hanya ada dua cara untuk menerapkan torsi, karena ini hanya di pesawat 2d. Daya dorong terbatas untuk hanya bergerak dalam satu arah relatif terhadap orientasi pesawat, dan tidak dapat diarahkan tanpa memutar drone. Abaikan perlawanan, Anda bisa berpura-pura melayang di luar angkasa 2d. Katakanlah drone memeriksa persamaan pada interval waktu t
(mungkin sekitar 0,01 detik), menyambungkan parameter, dan menyesuaikan torsi dan dorong sesuai. Seperti apa persamaan untuk dorong dan torsi?
Jawaban:
Mengingat konteks pertanyaan Anda, http://nodewar.com/ , ada beberapa pertimbangan khusus untuk solusi Anda:
Metode ini adalah apa yang saya tekankan untuk bekerja untuk mencapai akselerasi yang diinginkan.
Akselerasi, bukan kecepatan
Karena Anda sudah memiliki kecepatan tertentu, dan target Anda bergerak, Anda tidak perlu didorong ke suatu titik. Anda perlu dorongan untuk mengubah kecepatan Anda menjadi seperti seharusnya. Ini berarti bahwa kapal Anda perlu menunjuk bukan ke arah ke mana ia pergi, tetapi ke arah di mana ia harus mempercepat.
Kemudi ke arah kanan
Anda memiliki vektor percepatan, sekarang Anda ingin menerapkannya. Tentukan seberapa jauh Anda perlu memutar. Saya mungkin menggunakan lebih banyak langkah daripada yang diperlukan di sini, tetapi koordinat rotasi membingungkan saya, dan saya pikir nilai rotasi kapal yang belum dibuka adalah bug di API.
Formula sederhana. Tidak ada salahnya memutar sepanjang waktu, jadi jangan repot-repot menerapkan nilai torsi parsial. Jika Anda memerlukan koreksi kecil dalam kecepatan sudut, Anda harus membuat penentuan ini berkali-kali per detik.
Formula yang kurang sederhana. Akan ada titik di mana Anda tidak ingin terus berputar, karena Anda akhirnya ingin berhenti. Untungnya, tutup kecepatan sudut itu berarti Anda dapat dengan cepat memperlambat dari kecepatan sudut maks ke nol. Anda hanya perlu menghitung kapan melakukannya.
Setelah mengubah kode di atas sesuai dengan kebutuhan Anda, kapal Anda harus berputar dengan cepat dan tepat ke sudut mana pun yang Anda berikan untuk ditargetkan.
Kecepatan serudukan
Jadi, kapan harus disodorkan? Sekali lagi, perubahan yang cepat dari target dan faktor-faktor lain menciptakan kesulitan besar dalam menyelesaikan solusi yang tepat. Jangan coba-coba.
Untuk kasus-kasus di mana Anda memerlukan dorongan parsial, Anda dapat kembali mengandalkan fakta bahwa Anda dapat memilih antara 0 dan 1 dorongan berkali-kali per detik. Ini memberi Anda dorongan parsial yang efektif tanpa memvariasikan nilai sebenarnya.
Semoga berhasil!
sumber
Pertanyaan serupa, dengan beberapa jawaban yang baik, termasuk nama nyata dari seluruh subjek ini, "perencanaan gerak":
/programming/2560817/2d-trajectory-planning-of-a-spaceship-with-physics
Sebagai seorang programmer, saya menyukai kepraktisan dari saran user470365. Namun, saya akan mencoba pendekatan yang lebih keras. Saran saya di sini menghitung rencana lengkap di awal, tetapi saya kira Anda dapat mengevaluasi kembali sesering yang diinginkan jika parameter berubah.
Rencana
Detail
Saya menyarankan metode berulang untuk menemukan d dan t :
Dengan asumsi tidak ada dorongan, lintasi sepanjang lintasan drone di masa depan menggunakan loop dan catatan waktu kecil:
Kami sekarang telah menemukan d dan t .
Berputar
Ketika saya mengatakan "belok ke d ", maksud saya benar-benar, "lakukan urutan torsi sedemikian rupa sehingga kami memutar ke d secepat mungkin sambil juga membawa kecepatan sudut ke nol". Mungkin ada persamaan untuk ini yang melibatkan arah arus, kecepatan sudut saat ini, dan percepatan sudut maksimal, tetapi rumit dengan perilaku pembungkus sudut.
sumber