Apa itu angka empat?

50

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?

SirMathhman
sumber
Secara historis, saya pikir angka empat datang pertama, dan kemudian produk titik dan silang berasal dari angka empat.
2
Saya menemukan artikel animasi ini sangat informatif: acko.net/blog/animate-your-way-to-glory-pt2/#quaternions
AShelly
Dalam matematika murni, saya percaya angka empat adalah 3 bilangan kompleks seperti i² = j² = k² = ijk
Vinz243
Kuota adalah cara terbaik untuk menginterpolasi rotasi dengan lancar. Hanya interpolasi matriks rotasi tidak bekerja, karena Anda tidak akan selalu mendapatkan matriks rotasi sebagai hasilnya. Interpolasi sudut Euler tidak menghasilkan rotasi yang halus. Jadi untuk animasi rotasi, seperti yang dibutuhkan dalam grafik komputer atau robotika, angka empat adalah cara yang harus dilakukan. Dan ada ekstensi yang berguna, tetapi entah bagaimana tidak sering digunakan, yang disebut angka empat ganda yang memungkinkan Anda untuk mewakili transformasi dan rotasi
Tobias B

Jawaban:

43

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:

  1. sumbu rotasi (dalam bentuk vektor 3 dimensi)
  2. seberapa jauh untuk memutar sumbu itu

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.

Philipp
sumber
6
kunci gimbal tidak menjadi masalah di angka empat jika Anda mulai dari angka empat dan diakhiri dengan angka empat, kunci gimbal menentukan kapan Anda memiliki langkah yang mengubah ke sudut atau belakang euler.
ratchet freak
2
Kuantitas bukan sudut + sudut, melainkan 3 bilangan kompleks dan skala.
transistor09
11
@ transistor09, apakah Anda yakin Anda berdua benar? Bagian imajiner 3-komponen dari unit angka empat dapat diartikan sebagai vektor satuan di sepanjang sumbu rotasi, diskalakan oleh sinus setengah sudut rotasi. Bagian sesungguhnya dari unit angka empat adalah cosinus setengah sudut rotasi. Jadi Anda benar bahwa itu bukan format sumbu sudut, tetapi memang benar bahwa komponen angka empat dapat diartikan sebagai sumbu dan (non-linear) ukuran seberapa jauh untuk memutar sumbu itu.
DMGregory
2
Anda juga bisa menyebutkan apa yang dimiliki angka empat dibandingkan matriks rotasi: mereka lebih cepat untuk digabungkan. Saat menggabungkan rotasi, mengalikan dua angka empat membutuhkan operasi yang lebih sedikit daripada mengalikan matriks.
Pasang kembali Monica
3
Sebenarnya, dalam ruang 2D, bilangan kompleks adalah analog yang tepat. Lipat gandakan titik 2D dengan bilangan kompleks, dan Anda telah memutarnya - sebenarnya, persis sama dengan rotasi sin / cos biasa (yang seharusnya jelas jika Anda memahami bilangan kompleks dengan cukup baik). Ini dapat dieksploitasi sedikit, tetapi pada akhirnya, grafik 2D tidak terlalu intensif untuk kinerja saat ini, sehingga tidak memberi Anda banyak peningkatan kecuali Anda benar-benar nyaman menggunakan bilangan kompleks (yang kebanyakan orang jelas tidak - sebagaimana dibuktikan oleh kode berbasis angka empat yang sangat buruk di luar sana: D).
Luaan
13

Ini untuk menambah jawaban @ Philipp.

Juga, keuntungan apa yang Anda peroleh dengan menggunakan tiga poin pada bidang 2D?

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).

Akhirnya, kapan dianggap praktik yang baik untuk menggunakan angka empat?

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.

PKG
sumber
" Setiap kali ada rotasi 3D, praktik yang baik untuk menggunakan angka empat." hanya sedikit terlalu kuat. Hampir selalu lebih baik; ada situasi di mana alternatif sesuai. (Sebagai contoh ketidaksempurnaan, akar ke-Quaternion bernilai banyak)
Yakk
1
Kuarter adalah komoditas untuk digunakan dan rasa sakit untuk diimplementasikan. Anda dapat bergaul tanpa mereka jika Anda mengetahui kunci gimbal.
Hatoru Hansou