Apa itu angka empat, dan lakukan bagaimana mereka bekerja? Juga, keuntungan apa yang Anda peroleh dengan menggunakan tiga poin pada bidang 2D? Akhirnya, kapan dianggap praktik yang baik untuk menggunakan angka empat?
mathematics
terminology
SirMathhman
sumber
sumber
Jawaban:
Secara matematis, angka empat adalah bilangan kompleks dengan 4 dimensi. Namun dalam pengembangan game, Quaternions sering digunakan untuk menggambarkan rotasi dalam ruang 3d dengan menyandikan:
Perhatikan bahwa informasi ini dikodekan dengan sinus dan cosinus di dalam angka empat, jadi secara umum Anda tidak boleh mencoba untuk secara eksplisit mengatur atau membaca komponen internal angka empat (xyzw) secara individual. Sangat mudah untuk membuat kesalahan dengan cara itu dan mendapatkan hasil yang tidak berarti. Pustaka matematika angka empat biasanya akan menyediakan fungsi untuk beroperasi pada angka empat (mis. Mengonversikannya ke & dari sudut Euler atau sudut sumbu), yang memastikan matematika itu benar dan memiliki keuntungan tambahan membuat kode Anda lebih mudah dibaca dan dipahami.
Cara alternatif untuk menggambarkan rotasi adalah dengan menggambarkan seberapa jauh untuk memutar 3 sumbu tetap 'x, y, dan z (alias sudut Euler) yang hanya membutuhkan 3 angka, bukan 4 dan biasanya lebih intuitif untuk digunakan. Namun, sudut euler mengalami masalah yang disebut kunci gimbal : Ketika Anda memutar 90 ° di sekitar satu sumbu, dua sumbu lainnya menjadi setara. Dengan angka empat, masalah ini tidak terjadi.
Cara lain untuk mengekspresikan rotasi dalam ruang 3d adalah dengan matriks transformasi 4x4 . Tetapi dengan matriks transformasi Anda tidak bisa hanya memutar, tetapi juga skala, menerjemahkan dan condong. Bila Anda hanya menginginkan rotasi, sebuah matriks akan berlebihan dan angka empat solusi yang jauh lebih cepat dan lebih sederhana.
Masalah ini hanya relevan dalam ruang 3d. Dalam ruang 2d, Anda hanya memiliki satu sumbu rotasi. Rotasi apa pun dapat dinyatakan dengan angka floating-point tunggal atau angka kompleks tunggal, sehingga Anda tidak memiliki masalah ini. Meskipun Anda secara teoritis dapat mengekspresikan rotasi pada bidang 2d dengan angka empat di mana sumbu menunjuk ke (atau keluar dari) pesawat, biasanya itu berlebihan.
sumber
Ini untuk menambah jawaban @ Philipp.
Anda tidak benar-benar membutuhkan angka empat jika semua yang Anda minati diputar di pesawat, yaitu tentang sumbu z. Dalam hal ini, yang Anda butuhkan hanyalah sudut yaw, dan Anda dapat mengeksploitasi fakta bahwa rotasi berturut-turut pada sumbu z berpindah. Jadi Anda dapat menerapkan rotasi Anda dalam urutan apa pun yang Anda inginkan.
Situasinya berbeda jika Anda memutar pada pesawat yang bukan bidang XY. Rotasi ini setara dengan memutar sekitar sumbu 3D sewenang-wenang. Sekarang, Anda memiliki dua pilihan:
putar pesawat Anda dalam 3D sehingga bertepatan dengan bidang XY dan kemudian menguap, dan mengubahnya kembali, atau
pikirkan rotasi Anda sebagai 3D untuk memulai.
Pilihan kedua lebih mudah untuk dikodekan. Seperti yang dikatakan @Philipp, angka empat menghindari kunci gimbal (jika Anda menghindari konversi RPY atau sumbu / sudut).
Setiap kali ada rotasi 3D, praktik yang baik untuk menggunakan angka empat.
Misalnya:
Dalam Qt . Quat memudahkan interpolasi di antara rotasi, seperti pada fungsi slerp .
ROS menggunakannya untuk mengubah pose robot.
Di mesin dinamika Bullet
Untuk aplikasi yang sangat canggih, lihat di sini untuk penggunaannya dalam mekanika 3D klasik.
sumber