Saya mencoba membuat helikopter yang disederhanakan (untuk saat ini, ini adalah kubus) simulasi dalam 3D dan saya mengalami beberapa masalah dengan rotasi. Helikopter dapat berputar di sepanjang tiga sumbu:
- putar sendiri menggunakan baling-baling belakang: rotasi sumbu y
- miringkan kiri dan kanan ke kiri atau kanan: rotasi sumbu z
- miringkan ke atas dan ke bawah untuk maju atau mundur: rotasi sumbu x
Saya harus dapat mengontrol setiap sumbu secara individual. Sejauh ini saya sudah mencoba menggunakan sudut euler, tetapi apa pun urutan rotasi yang saya gunakan, baik saya berlari ke kunci gimbal atau beberapa sumbu "beralih tempat".
Sepertinya saya perlu menggunakan angka empat, tetapi saya tidak tahu bagaimana mengontrol setiap sumbu individu, karena angka empat menggunakan arah dan sudut. Haruskah saya membuat tiga angka empat dan mengalikannya? Bukankah saya akan berakhir dengan masalah yang sama?
Yang aneh adalah, jika saya menggunakan jari saya untuk mewakili tiga sumbu helikopter saya (jempol ke atas = y, indeks = z, tengah = x), saya sepertinya tidak mengalami masalah tersebut. Mengapa?
Jawaban:
Anda harus dapat menggunakan matriks atau angka empat untuk menyimpan orientasi helikopter Anda saat ini. Masalah yang Anda hadapi adalah bagaimana Anda menerapkan perubahan pada pitch / yaw / roll ke helikopter.
Saya pikir Anda ingin menerapkan pitch / yaw / roll ke helikopter di ruang lokal setiap frame. Anda dapat melakukan ini dengan mengambil perubahan dalam pitch / yaw / roll untuk frame itu dan membangun matriks rotasi (Anda dapat melakukan ini dengan sudut euler). Kemudian Anda memutar orientasi helikopter sebelumnya dengan matriks ini (dengan orientasi sebelumnya direpresentasikan sebagai matriks atau angka empat). Ini akan memberi Anda orientasi untuk bingkai baru.
Mewakili orientasi helikopter sebagai angka empat memiliki keuntungan bahwa interpolasi antar angka empat lebih mudah daripada interpolasi antar matriks. Jadi jika di masa depan Anda memiliki orientasi saat ini dan Anda ingin mengetahui rotasi per-frame yang akan membawa Anda ke orientasi baru pada waktu yang diinginkan, representasi angka empat mungkin lebih ramah bagi Anda.
sumber
Pada dasarnya Anda dapat menggunakan setiap representasi rotasi lainnya, tetapi Euler Angles. Matriks, Kuarter bahkan Axis Angles akan melakukan apa yang Anda inginkan.
Anda benar, Anda akan berakhir dengan masalah yang sama. Kuncinya adalah menyimpan orientasi saat ini (matriks, angka empat) objek Anda dan hanya menerapkan delta saat mengubah orientasi.
Saat Anda ingin memutar 10 derajat di sekitar Anda, cukup buat delta matriks / angka empat untuk itu dan poskan kalikan dengan orientasi Anda saat ini (jika Anda menggunakan pos perkalian untuk matriks). Jika Anda mengalikannya dengan sebaliknya, itu akan memutar sistem di sekitar sumbu y dunia daripada di sekitar sumbu y objek.
Saya menemukan sumber ini sangat berguna, ia juga dilengkapi dengan kode sumber dan menjelaskan teorinya dengan sangat baik.
sumber
Masalahnya saya pikir Anda mungkin akan melihat perbedaan dalam rotasi sumbu dan vektor kecepatan (dan juga bahwa Anda kehilangan arah). Ketika helikopter miring ke depan untuk bergerak maju, tenaga penggerak bilah helikopter mendorong udara ke bawah dan ke belakang pada sudut tegak lurus terhadap apa yang Anda beri label sumbu X.
Anda memiliki tingkat kebebasan keempat yang Anda lewatkan: kecepatan bilah mengontrol volume udara yang didorong, yang juga mengontrol jumlah daya angkat yang dihasilkan helikopter.
Namun demikian, "miring ke kiri dan ke kanan" dan "miring ke atas dan ke bawah" umumnya mengendalikan helikopter di pesawat tertentu. Dengan kata lain, helikopter tidak boleh terbang ke bawah ketika miring ke depan, ke belakang, atau ke samping - tetapi jumlah lift mungkin harus berubah dan kecepatan akan dikendalikan oleh sisi "berlawanan" dari segitiga siku-siku yang dibentuk oleh menghubungkan helikopter ke tanah dengan garis lurus ke bawah (gravitasi), dan sisi miring (angkat). Itu akan memberi Anda vektor kecepatan untuk digunakan.
Anda harus dapat menggunakan angka empat untuk melakukan ini, tetapi jangan mendasarkan nilai angka empat Anda pada kemiringan helikopter itu sendiri - coba gunakan kekuatan gerak yang dihasilkan oleh helikopter.
sumber