Tersedia tentang angka empat dan manfaatnya


Dari seorang penerjemah: tepatnya 175 tahun dan 3 hari yang lalu angka empat ditemukan. Untuk menghormati tanggal putaran ini, saya memutuskan untuk mengambil materi yang menjelaskan konsep ini dalam bahasa yang jelas.

Konsep angka empat ditemukan oleh ahli matematika Irlandia Sir William Rowan Hamilton pada hari Senin, 16 Oktober 1843 di Dublin, Irlandia. Hamilton dan istrinya pergi ke Royal Irish Academy , dan melintasi Kanal Kerajaan di atas Broome Bridge , ia membuat penemuan yang menakjubkan, yang segera ia garuk di atas batu jembatan.

i 2 = j 2 = k 2 = i j k = - 1




Sebuah plakat peringatan di Jembatan Broome di atas Kanal Kerajaan untuk menghormati penemuan formula dasar untuk penggandaan angka empat.

Pada artikel ini, saya akan mencoba menjelaskan konsep angka empat dengan cara yang mudah dipahami. Saya akan menjelaskan bagaimana Anda dapat memvisualisasikan angka empat, dan juga berbicara tentang operasi yang berbeda yang dapat dilakukan dengan angka empat. Selain itu, saya akan membandingkan penggunaan matriks, sudut Euler dan angka empat, dan kemudian mencoba menjelaskan kapan harus menggunakan angka empat bukan sudut atau matriks Euler, dan ketika Anda tidak perlu.

Isi


  • 1. Pendahuluan
  • 2. Bilangan kompleks
    • 2.1. Penambahan dan pengurangan bilangan kompleks
    • 2.2. Perkalian bilangan kompleks dengan nilai skalar
    • 2.3. Produk bilangan kompleks
    • 2.4. Kuadrat bilangan kompleks
    • 2.5. Konjugasi bilangan kompleks
    • 2.6. Nilai absolut dari bilangan kompleks
    • 2.7. Quotient dari dua bilangan kompleks
  • 3. Derajat saya
  • 4. Pesawat kompleks
    • 4.1. Rotor
  • 5. Pertanyaan
    • 5.1. Pertanyaan sebagai pasangan yang dipesan
    • 5.2. Penambahan dan Pengurangan Quaternion
    • 5.3. Produk Pertanyaan
    • 5.4. Quaternion nyata
    • 5.5. Penggandaan Qalernion Skalar
    • 5.6. Pertanyaan murni
    • 5.7. Bentuk angka empat aditif
    • 5.8. Quaternion tunggal
    • 5.9. Bentuk biner Quaternion
    • 5.10. Angka empat terkonjugasi
    • 5.11. Tingkat kuota
    • 5.12. Normalisasi quaternion
    • 5.13. Angka empat terbalik
    • 5.14. Produk Skalar Quaternion
  • 6. Ternyata
  • 7. Interpolasi angka empat
    • 7.1. SLERP
      • 7.1.1. Perbedaan kuota
      • 7.1.2. Meningkatkan angka empat ke kekuatan
      • 7.1.3. Perbedaan pecahan angka empat
      • 7.1.4. Faktor yang Perlu Dipertimbangkan
    • 7.2. Pasukan
  • 8. Kesimpulan
  • 9. Unduh demo
  • 10. Referensi

Tidak mungkin untuk memahami angka empat dalam 45 menit.

Artikel ini memiliki banyak matematika, jadi ini bukan untuk para pengecut.

Pendahuluan


Dalam grafik komputer, matriks digunakan untuk menggambarkan posisi dalam ruang (perpindahan), serta orientasi dalam ruang (rotasi). Anda juga dapat menggunakan matriks transformasi tunggal untuk menggambarkan skala objek. Matriks ini dapat dianggap sebagai "ruang dasar". Jika kita mengalikan vektor atau titik (atau bahkan matriks lain) dengan matriks transformasi, maka kita "mentransformasikan" vektor ini, sebuah titik atau matriks ke dalam ruang yang direpresentasikan oleh matriks ini.

Dalam artikel ini saya tidak akan berbicara secara rinci tentang matriks transformasi. Rincian tentang matriks transformasi dapat ditemukan di artikel Matriks saya.

Pada artikel ini saya ingin berbicara tentang cara alternatif untuk menggambarkan orientasi suatu objek (rotasi) di ruang angkasa menggunakan angka empat.

Bilangan kompleks


Untuk memahami sepenuhnya angka empat, pertama-tama kita harus memahami dari mana asalnya. Prinsip angka empat didasarkan pada konsep sistem bilangan kompleks.

Seiring dengan set angka yang terkenal ( alami , bilangan bulat , nyata dan rasional ), sistem bilangan kompleks menambahkan serangkaian angka baru yang disebut bilangan imajiner. Angka imajiner diciptakan untuk menyelesaikan persamaan tertentu yang tidak memiliki solusi, misalnya:

x 2 + 1 = 0


Untuk mengatasi ungkapan ini, kita perlu menyatakannya x 2 = - 1 , dan ini, seperti yang Anda tahu, tidak mungkin, karena kuadrat dari angka berapa pun (positif atau negatif) selalu positif.

Matematikawan tidak dapat menerima kenyataan bahwa ungkapan tidak memiliki solusi, sehingga konsep baru ditemukan - angka imajiner yang dapat digunakan untuk menyelesaikan persamaan tersebut.

Angka imajiner adalah sebagai berikut:

i 2 = - 1


Jangan mencoba memahami asumsi ini, karena tidak ada alasan logis untuk keberadaannya. Kami hanya perlu menerima itu saya - Ini hanya jumlah tertentu yang berbentuk bujur sangkar - 1 .

Himpunan angka imajiner dapat dilambangkan sebagai  m a t h b b I .

Himpunan bilangan kompleks (dilambangkan dengan  m a t h b b C Apakah jumlah angka nyata dan imajiner dalam bentuk berikut:

z=a+bi  a,b in mathbbR,  i2=βˆ’1


Dapat juga dinyatakan bahwa semua bilangan real adalah kompleks dengan b=0 , dan semua bilangan imajiner rumit dengan a=0 .

Penambahan dan pengurangan bilangan kompleks


Bilangan kompleks dapat ditambahkan dan dikurangi dengan menambahkan dan mengurangi bagian nyata dan imajiner.

Tambahan:

(a1+b1i)+(a2+b2i)=(a1+a2)+(b1+b2)i


Pengurangan:

(a1+b1i)βˆ’(a2+b2i)=(a1βˆ’a2)+(b1βˆ’b2)i


Perkalian bilangan kompleks dengan nilai skalar


Bilangan kompleks dikalikan dengan skalar dengan mengalikan setiap anggota bilangan kompleks dengan skalar:

 lambda(a+bi)= lambdaa+ lambdabi


Produk bilangan kompleks


Selain itu, bilangan kompleks juga dapat dikalikan menggunakan aturan aljabar biasa.

\ begin {array} {rcl} z_1 & = & (a_1 + b_1i) \\ z_2 & = & (a_2 + b_2i) \\ z_1z_2 & = & (a_1 + b_1i) (a_2 + b_2i) \\ & = & a_1a_2 + a_1b_2i + b_1a_2i + b_1b_2i ^ 2 \\ & = & (a_1a_2-b_1b_2) + (a_1b_2 + b_1a_2) i \ end {array}


Kuadrat bilangan kompleks


Juga, bilangan kompleks dapat dikuadratkan dengan mengalikannya sendiri:

\ begin {array} {rcl} z & = & (a + bi) \\ z ^ 2 & = & (a + bi) (a + bi) \\ & = & (a ^ 2-b ^ 2) + 2abi \ end {array}


Konjugasi bilangan kompleks


Nilai konjugasi dari bilangan kompleks adalah bilangan kompleks dengan tanda yang berubah dari bagian imajiner, dilambangkan sebagai  barz atau bagaimana zβˆ— .

\ begin {array} {rcl} z & = & (a + bi) \\ z ^ * & = & (a-bi) \ end {array}


Penggandaan bilangan kompleks dengan nilai konjugatnya memberikan hasil yang menarik.

\ begin {array} {rcl} z & = & (a + bi) \\ z ^ * & = & (a-bi) \\ zz ^ * & = & (a + bi) (a-bi) \ \ & = & a ^ 2-abi + abi + b ^ 2 \\ & = & a ^ 2 + b ^ 2 \ end {array}


Nilai absolut dari bilangan kompleks


Kita dapat menggunakan bilangan konjugat dari bilangan kompleks untuk menghitung nilai absolut (atau norma , atau besarnya ) bilangan kompleks. Nilai absolut dari bilangan kompleks adalah akar kuadrat dari bilangan kompleks dikali konjugatnya . Ini dilambangkan sebagai |z| :

\ begin {array} {rcl} z & = & (a + bi) \\ | z | & = & \ sqrt {zz ^ *} \\ & = & \ sqrt {(a + bi) (a-bi)} \\ & = & \ sqrt {a ^ 2 + b ^ 2} \ end {array}


Quotient dari dua bilangan kompleks


Untuk menghitung hasil bagi dari dua bilangan kompleks, kita mengalikan pembilang dan penyebut dengan bilangan konjugator penyebut.

\ begin {array} {rcl} z_1 & = & (a_1 + b_1i) \\ z_2 & = & (a_2 + b_2i) \\ \ cfrac {z_1} {z_2} & = & \ cfrac {a_1 + b_1i} { a_2 + b_2i} \\ & = & \ cfrac {(a_1 + b_1i) (a_2-b_2i)} {(a_2 + b_2i) (a_2-b_2i)} \\ & = & \ cfrac {a_1a_2-a_1b_2i + b_1a_2i-bi ^ 2} {a_2 ^ 2 + b_2 ^ 2} \\ & = & \ cfrac {a_1a_2 + b_1b_2} {a_2 ^ 2 + b_2 ^ 2} + \ cfrac {b_1a_2-a_1b_2} {a_2 ^ 2 + b_2 ^ 2} i \ end {array}


Derajat i


Jika kami mengklaim itu i2=βˆ’1 maka harus ada kemungkinan ereksi i dan ke tingkat lain.

\ begin {array} {rrrrrrrr} i ^ 0 & = & & & & & & & 1 \ i ^ 1 & = & & & & & i \ i ^ 2 & = & & & & & & -1 -1 i ^ 3 & = & ii ^ 2 & = & & & -i \\ i ^ 4 & = & i ^ {2} i ^ {2} & = & & 1 \\ i ^ 5 & = & ii ^ 4 & = & & & i \\ i ^ 6 & = & ii ^ 5 & = & i ^ 2 & = & -1 \ end {array}


Jika kami terus merekam seri ini, kami mencatat polanya (1,i,βˆ’1,βˆ’i,1, dots) .

Pola serupa muncul dengan peningkatan derajat negatif.

\ begin {array} {rcr} i ^ 0 & = & 1 \\ i ^ {- 1} & = & -i \\ i ^ {- 2} & = & -1 \\ i ^ {- 3} & = & i \\ i ^ {- 4} & = & 1 \\ i ^ {- 5} & = & -i \\ i ^ {- 6} & = & -1 \ end {array}


Mungkin Anda sudah melihat pola seperti itu dalam matematika, tetapi dalam bentuk (x,y,βˆ’x,βˆ’y,x, dots) , yang diperoleh dengan memutar titik 90 Β° berlawanan arah jarum jam pada bidang Kartesius dua dimensi; baris (x,βˆ’y,βˆ’x,y,x, dots) dibuat dengan memutar titik 90 derajat pada pesawat kartesius dua dimensi.


Pesawat kartesius

Pesawat kompleks


Kita dapat juga menerapkan bilangan kompleks ke kisi dua dimensi, yang disebut bidang kompleks , menghubungkan bagian nyata ke sumbu horizontal, dan imajiner ke vertikal.


Pesawat kompleks

Seperti yang dapat Anda lihat dari baris sebelumnya, kita dapat mengatakan bahwa jika kita mengalikan bilangan kompleks dengan i , maka kita dapat memutar bilangan kompleks pada bidang kompleks dengan kelipatan 90 Β°.

Mari kita periksa apakah ini benar. Kami mengambil titik sewenang-wenang di pesawat kompleks p :

p=2+i


dan kalikan dengan i telah menerima q :

\ begin {array} {rcl} p & = & 2 + i \\ q & = & pi \\ & = & (2 + i) i \\ & = & 2i + i ^ 2 \\ & = & - 1 + 2i \ end {array}


Mengalikan q pada i kita dapatkan r :

\ begin {array} {rcl} q & = & -1 + 2i \\ r & = & qi \\ & = & (-1 + 2i) i \\ & = & -i + 2i ^ 2 \\ & = & -2-i \ end {array}


Dan mengalikan r pada i kita dapatkan s :

\ begin {array} {rcl} r & = & -2-i \\ s & = & ri \\ & = & (-2-i) i \\ & = & -2i-i ^ 2 \\ & = & 1-2i \ end {array}


Dan mengalikan s pada i kita dapatkan t :

\ begin {array} {rcl} s & = & 1-2i \\ t & = & si \\ & = & (1-2i) i \\ & = & i-2i ^ 2 \\ & = & 2 + i \ end {array}


Dan kami mendapatkan apa yang kami mulai dengan ( p ) Jika kita meletakkan bilangan kompleks ini di bidang kompleks, kita mendapatkan hasil sebagai berikut.


Bilangan kompleks pada bidang kompleks

Sekarang kita dapat memutar pada bidang kompleks dan searah jarum jam, mengalikan angka kompleks dengan βˆ’i .

Rotor


Kami juga dapat melakukan belokan sewenang-wenang pada bidang kompleks, mengatur nomor kompleks dalam bentuk berikut:

q= cos theta+i sin theta


Saat mengalikan angka kompleks dengan rotor q kami mendapatkan formula umum:

\ begin {array} {rcl} p & = & a + bi \\ q & = & \ cos \ theta + i \ sin \ theta \\ pq & = & (a + bi) (\ cos \ theta + i \ sin \ theta) \\ a ^ {\ prime} + b ^ {\ prime} i & = & a \ cos \ theta-b \ sin \ theta + (a \ sin \ theta + b \ cos \ theta) i \ end {array}


Apa yang juga bisa ditulis dalam bentuk matriks:

\ begin {bmatrix} a ^ {\ prime} & -b ^ {\ prime} \\ b ^ {\ prime} & a ^ {\ prime} \ end {bmatrix} = \ begin {bmatrix} \ cos \ theta & - \ sin \ theta \\ \ sin \ theta & \ cos \ theta \ end {bmatrix} \ begin {bmatrix} a & -b \\ b & a \ end {bmatrix}


Apa yang dimaksud dengan cara memutar berlawanan arah jarum jam titik acak pada bidang kompleks relatif terhadap asal.

Pertanyaan


Setelah mempelajari tentang sistem bilangan kompleks dan bidang kompleks, kita dapat membawanya ke ruang tiga dimensi, menambah sistem bilangan bersama dengan i dua angka imajiner lagi.

Kuota memiliki bentuk umum berikut

q=s+xi+yj+zk  s,x,y,z in mathbbR


Di mana menurut ungkapan terkenal Hamilton:

i2=j2=k2=ijk=βˆ’1



\ begin {array} {ccc} ij = k & jk = i & ki = j \\ ji = -k & kj = -i & ik = -j \ end {array}


Anda mungkin memperhatikan bahwa hubungan keduanya i , j dan k sangat mirip dengan aturan penggandaan vektor vektor satuan Cartesian:

\ begin {array} {ccc} \ mathbf {x} \ times \ mathbf {y} = \ mathbf {z} & \ mathbf {y} \ kali \ mathbf {z} = \ mathbf {x} & \ mathbf { z} \ times \ mathbf {x} = \ mathbf {y} \\ \ mathbf {y} \ times \ mathbf {x} = - \ mathbf {z} & \ mathbf {z} \ kali \ mathbf {y} = - \ mathbf {x} & \ mathbf {x} \ kali \ mathbf {z} = - \ mathbf {y} \ end {array}


Hamilton juga memperhatikan angka imajiner itu i , j dan k dapat digunakan untuk mewakili tiga vektor satuan Kartesius  mathbfi ,  mathbfj dan  mathbfk dengan sifat yang sama dari angka imajiner, jadi  mathbfi2= mathbfj2= mathbfk2=βˆ’1 .


Representasi grafis dari properti  mathbfij ,  mathbfjk ,  mathbfki

Gambar di atas secara grafis menunjukkan hubungan antara vektor satuan Cartesian dalam formulir  mathbfi ,  mathbfj dan  mathbfk .

Pertanyaan sebagai pasangan yang dipesan


Kami juga dapat mewakili angka empat sebagai pasangan yang dipesan:

q=[s, mathbfv]  s in mathbbR, mathbfv in mathbbR3


Dimana  mathbfv juga dapat direpresentasikan sebagai komponen individualnya:

q=[s,x mathbfi+y mathbfj+z mathbfk]  s,x,y,z dalam mathbbR


Dengan menggunakan entri ini, kita dapat lebih mudah mewakili fitur umum angka empat dan bilangan kompleks.

Penambahan dan Pengurangan Quaternion


Kuota dapat ditambahkan dan dikurangi dengan cara yang sama dengan bilangan kompleks:

\ begin {array} {rcl} q_a & = & [s_a, \ mathbf {a}] \\ q_b & = & [s_b, \ mathbf {b}] \\ q_a + q_b & = & [s_a + s_b, \ mathbf {a} + \ mathbf {b}] \\ q_a-q_b & = & [s_a-s_b, \ mathbf {a} - \ mathbf {b}] \ end {array}


Quaternion bekerja


Kami juga dapat mengekspresikan produk dari dua angka empat:

\ begin {array} {rcl} q_a & = & [s_a, \ mathbf {a}] \\ q_b & = & [s_b, \ mathbf {b}] \\ q_ {a} q_ {b} & = & [s_ {a}, \ mathbf {a}] [s_ {b}, \ mathbf {b}] \\ & = & (s_ {a} + x_ {a} i + y_ {a} j + z_ {a } k) (s_ {b} + x_ {b} i + y_ {b} j + z_ {b} k) \\ & = & (s_ {a} s_ {b} -x_ {a} x_ {b} -y_ {a} y_ {b} -z_ {a} z_ {b}) \\ & & (s_ {a} x_ {b} + s_ {b} x {a} + y_ {a} z_ {b} } -y_ {b} z_ {a}) i \\ & & + (s_ {a} y_ {b} + s_ {b} y_ {a} + z_ {a} x_ {b} -z_ {b} x_ {a}) j \\ & & + (s_ {a} z_ {b} + s_ {b} z_ {a} + x_ {a} y_ {b} -x_ {b} y_ {a}) k \ end {array}


Yang memberi kita angka empat lagi. Jika kita mengganti angka imajiner dalam ekspresi sebelumnya i , j dan k pasangan dipesan (juga dikenal sebagai unit angka empat), maka kita dapatkan

i=[0, mathbfi] j=[0, mathbfj] k=[0, mathbfk]


Dan mengganti kembali ke ekspresi aslinya dengan [1, mathbf0]=1 kami mendapatkan:

\ begin {array} {rcl} [s_ {a}, \ mathbf {a}] [s_ {b}, \ mathbf {b}] & = & (s_ {a} s_ {b} -x_ {a} x_ {b} -y_ {a} y_ {b} -z_ {a} z_ {b}) [1, \ mathbf {0}] \\ & & + (s_ {a} x_ {b} + s_ {b } x {a} + y_ {a} z_ {b} -y_ {b} z_ {a}) [0, \ mathbf {i}] \\ & & + (s_ {a} y_ {b} + s_ { b} y_ {a} + z_ {a} x_ {b} -z_ {b} x_ {a}) [0, \ mathbf {j}] \\ & & + (s_ {a} z_ {b} + s_ {b} z_ {a} + x_ {a} y_ {b} -x_ {b} y_ {a}) [0, \ mathbf {k}] \ end {array}


Dengan memperluas ekspresi ini ke jumlah pasangan yang dipesan, kita mendapatkan:

\ begin {array} {rcl} [s_ {a}, \ mathbf {a}] [s_ {b}, \ mathbf {b}] & = & [s_ {a} s_ {b} -x_ {a} x_ {b} -y_ {a} y_ {b} -z_ {a} z_ {b}, \ mathbf {0}] \\ & & + [0, (s_ {a} x_ {b} + s_ {b } x {a} + y_ {a} z_ {b} -y_ {b} z_ {a}) \ mathbf {i}] \\ & & + [0, (s_ {a} y_ {b} + s_ { b} y_ {a} + z_ {a} x_ {b} -z_ {b} x_ {a}) \ mathbf {j}] \\ & & + [0, (s_ {a} z_ {b} + s_ {b} z_ {a} + x_ {a} y_ {b} -x_ {b} y_ {a}) \ mathbf {k}] \ end {array}


Jika kita mengalikan dengan unit angka empat dan mengekstrak komponen vektor yang umum, kita dapat menulis ulang persamaan ini sebagai berikut:

\ begin {array} {rcl} [s_ {a}, \ mathbf {a}] [s_ {b}, \ mathbf {b}] & = & [s_ {a} s_ {b} -x_ {a} x_ {b} -y_ {a} y_ {b} -z_ {a} z_ {b}, \ mathbf {0}] \\ & & + [0, s_ {a} (x_ {b} \ mathbf {i} } + y_ {b} \ mathbf {j} + z_ {b} \ mathbf {k}) + s_ {b} (x_ {a} \ mathbf {i} + y_ {a} \ mathbf {j} + z_ { a} \ mathbf {k}) \\ & & (y_ {a} z_ {b} -y_ {b} z_ {a}) \ mathbf {i} + (z_ {a} x_ {b} -z_ { b} x_ {a}) \ mathbf {j} + (x_ {a} y_ {b} -x_ {b} y_ {a}) \ mathbf {k}] \ end {array}


Persamaan ini memberi kita jumlah dari dua pasangan yang dipesan. Pasangan yang dipesan pertama adalah angka empat material , dan yang kedua adalah angka empat murni . Dua pasangan berurutan ini dapat digabungkan menjadi satu pasangan berurutan:

\ begin {array} {rcl} [s_ {a}, \ mathbf {a}] [s_ {b}, \ mathbf {b}] & = & [s_ {a} s_ {b} -x_ {a} x_ {b} -y_ {a} y_ {b} -z_ {a} z_ {b}, \\ & & s_ {a} (x_ {b} \ mathbf {i} + y_ {b} \ mathbf {j} } + z_ {b} \ mathbf {k}) + s_ {b} (x_ {a} \ mathbf {i} + y_ {a} \ mathbf {j} + z_ {a} \ mathbf {k}) \\ & & + (y_ {a} z_ {b} -y_ {b} z_ {a}) \ mathbf {i} + (z_ {a} x_ {b} -z_ {b} x_ {a}) \ mathbf { j} + (x_ {a} y_ {b} -x_ {b} y_ {a}) \ mathbf {k}] \ end {array}


Jika kita gantikan, maka kita dapatkan

\ begin {array} {rcl} \ mathbf {a} & = & x_ {a} \ mathbf {i} + y_ {a} \ mathbf {j} + z_ {a} \ mathbf {k} \\ \ mathbf {b} & = & x_ {b} \ mathbf {i} + y_ {b} \ mathbf {j} + z_ {b} \ mathbf {k} \\ \ mathbf {a} \ cdot \ mathbf {b} & = & x_ {a} x_ {b} + y_ {a} y_ {b} + z_ {a} z_ {b} \\ \ mathbf {a} \ kali \ mathbf {b} & = & (y_ {a} z_ {b} -y_ {b} z_ {a}) \ mathbf {i} + (z_ {a} x_ {b} -z_ {b} x_ {a}) \ mathbf {j} + (x_ {a} y_ {b} -x_ {b} y_ {a}) \ mathbf {k} \ end {array}


Kami mendapatkan:

[sa, mathbfa][sb, mathbfb]=[sasbβˆ’ mathbfa cdot mathbfb,sa mathbfb+sb mathbfa+ mathbfa kali mathbfb]


Ini adalah persamaan umum untuk produk angka empat.

Quaternion nyata


Angka empat yang nyata adalah angka empat yang menjadi vektor  mathbf0 :

q=[s, mathbf0]


Dan produk dari dua angka kuat bahan adalah angka empat bahan lain:

\ begin {array} {rcl} q_a & = & [s_a, \ mathbf {0}] \\ q_b & = & [s_b, \ mathbf {0}] \\ q_ {a} q_ {b} & = & [s_a, \ mathbf {0}] [s_b, \ mathbf {0}] \\ & = & [s_ {a} s_ {b}, \ mathbf {0}] \ end {array}


Yang mirip dengan produk dari dua bilangan kompleks yang mengandung istilah nol imajiner.

\ begin {array} {rcl} z_1 & = & a_1 + 0i \\ z_2 & = & a_2 + 0i \\ z_ {1} z_ {2} & = & (a_1 + 0i) (a_2 + 0i) \\ & = & a_ {1} a_ {2} \ end {array}


Penggandaan Qalernion Skalar


Kami juga dapat mengalikan angka empat dengan skalar, sambil mematuhi aturan berikut:

\ begin {array} {rcl} q & = & [s, \ mathbf {v}] \\ \ lambda {q} & = & \ lambda [s, \ mathbf {v}] \\ & = & [\ lambda {s}, \ lambda \ mathbf {v}] \ end {array}


Kami dapat memverifikasi ini menggunakan produk angka empat nyata yang ditunjukkan di atas dengan mengalikan angka empat dengan skalar sebagai angka empat nyata :

\ begin {array} {rcl} q & = & [s, \ mathbf {v}] \\ \ lambda & = & [\ lambda, \ mathbf {0}] \\ \ lambda {q} & = & [ \ lambda, \ mathbf {0}] [s, \ mathbf {v}] \\ & = & [\ lambda {s}, \ lambda \ mathbf {v}] \ end {array}


Pertanyaan murni


Selain angka empat material , Hamilton juga mendefinisikan angka empat murni sebagai angka empat dengan istilah skalar nol:

q=[0, mathbfv]


Atau jika Anda menuliskan komponen:

q=xi+yj+zk


Dan sekali lagi kita dapat mengambil produk dari dua angka empat:

\ begin {array} {rcl} q_a & = & [0, \ mathbf {a}] \\ q_b & = & [0, \ mathbf {b}] \\ q_ {a} q_ {b} & = & [0, \ mathbf {a}] [0, \ mathbf {b}] \\ & = & [- \ mathbf {a} \ cdot \ mathbf {b}, \ mathbf {a} \ kali \ mathbf {b} ] \ end {array}


sesuai dengan aturan produk angka empat yang disajikan di atas.

Bentuk angka empat aditif


Selain itu, kita dapat mengekspresikan angka empat sebagai jumlah dari bagian nyata dan murni angka empat:

\ begin {array} {rcl} q & = & [s, \ mathbf {v}] \\ & = & [s, \ mathbf {0}] + [0, \ mathbf {v}] \ end {array }


Quaternion tunggal


Mengambil vektor sewenang-wenang  mathbfv , vektor ini dapat diekspresikan baik dari segi nilai skalar dan ke arah sebagai berikut:

 mathbfv=v mathbf hatv  textwhere v=| mathbfv|  textdan | mathbf hatv|=1


Menggabungkan definisi ini dengan definisi angka empat murni, kita memperoleh:

\ begin {array} {rcl} q & = & [0, \ mathbf {v}] \\ & = & [0, v \ mathbf {\ hat {v}}] \\ & = & v [0, \ mathbf {\ hat {v}}] \ end {array}


Kami juga dapat menggambarkan unit angka empat yang memiliki skalar nol dan vektor satuan:

 hatq=[0, mathbf hatv]


Bentuk biner Quaternion


Sekarang kita dapat menggabungkan definisi angka empat tunggal dan bentuk aditif angka empat, memperoleh bentuk angka empat yang mirip dengan notasi yang digunakan dalam deskripsi bilangan kompleks:

\ begin {array} {rcl} q & = & [s, \ mathbf {v}] \\ & = & [s, \ mathbf {0}] + [0, \ mathbf {v}] \\ & = & [s, \ mathbf {0}] + v [0, \ mathbf {\ hat {v}}] \\ & = & s + v \ hat {q} \ end {array}


Yang memberi kita cara untuk merepresentasikan angka empat dalam bentuk yang sangat mirip dengan bilangan kompleks:

\ begin {array} {rcl} z & = & a + bi \\ q & = & s + v \ topi {q} \ end {array}


Angka konjugasi dari angka empat


Angka konjugat dari angka empat dapat dihitung dengan mengambil bagian vektor angka empat yang berlawanan dalam tanda:

\ begin {array} {rcl} q & = & [s, \ mathbf {v}] \\ q ^ * & = & [s, - \ mathbf {v}] \ end {array}


Produk angka empat dan nomor konjugatnya memberi kita yang berikut:

\ begin {array} {rcl} qq ^ * & = & [s, \ mathbf {v}] [s, - \ mathbf {v}] \\ & = & [s ^ 2- \ mathbf {v} \ cdot- \ mathbf {v}, - s \ mathbf {v} + s \ mathbf {v} + \ mathbf {v} \ times- \ mathbf {v}] \\ & = & [s ^ 2 + \ mathbf { v} \ cdot \ mathbf {v}, \ mathbf {0}] \\ & = & [s ^ 2 + v ^ 2, \ mathbf {0}] \ end {array}


Tingkat kuota


Ingat definisi norma bilangan kompleks:

\ begin {array} {rcl} | z | & = & \ sqrt {a ^ 2 + b ^ 2} \\ zz ^ * & = & | z | ^ 2 \ end {array}


Demikian pula, norma (atau besarnya) angka empat didefinisikan sebagai:

\ begin {array} {rcl} q & = & [s, \ mathbf {v}] \\ | q | & = & \ sqrt {s ^ 2 + v ^ 2} \ end {array}


Yang memungkinkan kita untuk mengekspresikan norma angka empat sebagai berikut:

qqβˆ—=|q|2


Normalisasi quaternion


Memiliki definisi norma angka empat, kita dapat menggunakannya untuk menormalkan angka empat. Quaternion dinormalisasi dengan membaginya dengan |q| :

q prime= fracq sqrts2+v2


Misalnya, mari kita menormalkan angka empat:

q=[1,4 mathbfi+4 mathbfjβˆ’4 mathbfk]


Pertama kita perlu menghitung angka empat angka :

\ begin {array} {rcl} | q | & = & \ sqrt {1 ^ 2 + 4 ^ 2 + 4 ^ 2 + (- 4) ^ 2} \\ & = & \ sqrt {49} \\ & = & 7 \ end {array}


Maka kita harus membagi angka empat dengan norma angka empat untuk menghitung angka empat yang dinormalisasi:

\ begin {array} {rcl} q ^ {\ prime} & = & \ cfrac {q} {| q |} \\ [1.0em] & = & \ cfrac {(1 + 4 \ mathbf {i} + 4 \ mathbf {j} -4 \ mathbf {k})} {7} \\ [1.0em] & = & \ cfrac {1} {7} + \ cfrac {4} {7} \ mathbf {i} + \ cfrac {4} {7} \ mathbf {j} - \ cfrac {4} {7} \ mathbf {k} \ end {array}


Angka empat terbalik


Angka empat terbalik dilambangkan sebagai qβˆ’1 . Untuk menghitung angka empat terbalik, kita mengambil angka konjugasi angka empat dan membaginya dengan kuadrat dari norma:

qβˆ’1= fracqβˆ—|q|2


Untuk menunjukkan ini, kita dapat menggunakan definisi terbalik:

qqβˆ’1=[1, mathbf0]=1


Dan gandakan kedua sisi dengan angka konjugasi angka empat, yang akan memberi kita:

qβˆ—qqβˆ’1=qβˆ—


Dengan substitusi kita mendapatkan:

\ begin {array} {rcl} | q | ^ {2} q ^ {- 1} & = & q ^ {*} \\ q ^ {- 1} & = & \ cfrac {q ^ {*}} {| q | ^ {2}} \ end {array}


Untuk norma angka empat tunggal yang normanya 1, kita dapat menulis:

qβˆ’1=qβˆ—


Produk Skalar Quaternion


Demikian pula dengan produk skalar vektor, kita dapat menghitung produk skalar dari dua angka empat dengan mengalikan bagian skalar yang sesuai dan merangkum hasilnya:

\ begin {array} {rcl} q_1 & = & [s_1, x_1 \ mathbf {i} + y_1 \ mathbf {j} + z_1 \ mathbf {k}] \\ q_2 & = & [s_2, x_2 \ mathbf { i} + y_2 \ mathbf {j} + z_2 \ mathbf {k}] \\ q_1 {\ cdot} q_2 & = & s_ {1} s_ {2} + x_ {1} x_ {2} + y_ {1} y_ {2} + z_ {1} z_ {2} \ end {array}


Kami juga dapat menggunakan produk skalar angka empat untuk menghitung perbedaan sudut antara angka empat:

 cos theta= fracs1s2+x1x2+y1y2+z1z2|q1||q2|


Untuk norma angka empat, kita dapat menyederhanakan persamaan:

 cos theta=s1s2+x1x2+y1y2+z1z2


Ternyata


Biarkan saya mengingatkan Anda bahwa kami telah mengidentifikasi bentuk khusus dari bilangan kompleks yang disebut rotor , yang dapat digunakan untuk memutar titik pada bidang dua dimensi sebagai berikut:

q= cos theta+i sin theta


Karena kesamaan bilangan kompleks dengan angka empat, seharusnya dimungkinkan untuk menyatakan angka empat yang dapat digunakan untuk memutar titik dalam ruang tiga dimensi:

q=[ cos theta, sin theta mathbfv]


Mari kita periksa apakah teori ini benar dengan menghitung produk angka empat q dan vektor  mathbfp . Pertama, kita bisa ungkapkan  mathbfp angka empat murni sebagai berikut:

p=[0, mathbfp]


A q Adalah norma angka tunggal dalam bentuk:

q=[s, lambda mathbf hatv]


Lalu

\ begin {array} {rcl} p ^ {\ prime} & = & qp \\ & = & [s, \ lambda \ mathbf {\ hat {v}}] [0, \ mathbf {p}] \\ & = & [- \ lambda \ mathbf {\ hat {v}} \ cdot \ mathbf {p}, s \ mathbf {p} + \ lambda \ mathbf {\ hat {v}} \ kali \ mathbf {p}] \ end {array}


Kita melihat bahwa hasilnya adalah angka empat umum dengan skalar dan bagian vektor.

Pertama-tama mari kita lihat kasus "khusus" di mana  mathbfp tegak lurus  mathbf hatv . Dalam hal ini, anggota produk skalar βˆ’ lambda mathbf hatv cdot mathbfp=0 dan hasilnya menjadi angka empat murni :

p prime=[0,s mathbfp+ lambda mathbf hatv kali mathbfp]


Dalam hal ini, untuk berbelok  mathbfp tentang  mathbf hatv kami hanya mengganti s= cos theta dan  lambda= sin theta .

p prime=[0, cos theta mathbfp+ sin theta mathbf hatv kali mathbfp]


Sebagai contoh, mari kita putar vektor  mathbfp 45 Β° relatif terhadap sumbu Z; lalu angka empat kami q akan sama dengan:

\ begin {array} {rcl} q & = & [\ cos \ theta, \ sin \ theta \ mathbf {k}] \\ & = & \ kiri [\ frac {\ sqrt {2}} {2}, \ frac {\ sqrt {2}} {2} \ mathbf {k} \ kanan] \ end {array}


Dan mari kita ambil vektor  mathbfp yang berkaitan dengan kasus khusus di mana  mathbfp tegak lurus  mathbfk :

p=[0,2 mathbfi]


Sekarang mari kita cari bagian

qp

:

\ begin {array} {rcl} p ^ {\ prime} & = & qp \\ & = & \ kiri [\ frac {\ sqrt {2}} {2}, \ frac {\ sqrt {2}} { 2} \ mathbf {k} \ kanan] [0,2 \ mathbf {i}] \\ & = & \ kiri [0,2 \ frac {\ sqrt {2}} {2} \ mathbf {i} +2 \ frac {\ sqrt {2}} {2} \ mathbf {k} \ times \ mathbf {i} \ right] \\ & = & [0, \ sqrt {2} \ mathbf {i} + \ sqrt {2 } \ mathbf {j}] \ end {array}


Apa yang memberi kita angka empat bersih diputar 45 Β° tentang sumbu  mathbfk . Kami juga dapat memastikan bahwa nilai vektor akhir dipertahankan:

\ begin {array} {rcl} | \ mathbf {p} ^ {\ prime} | & = & \ sqrt {\ sqrt {2} ^ {2} + \ sqrt {2} ^ {2}} \\ & = & 2 \ end {array}


Persis seperti yang kami harapkan!

Kami dapat menampilkan ini secara grafis dengan gambar berikut:


Putar Quaternion (1)

Sekarang mari kita lihat angka empat yang tidak ortogonal  mathbfp . Jika kita ambil untuk bagian vektor angka empat offset dari 45 Β° dari  mathbfp lalu kita dapatkan:

\ begin {array} {rcl} \ mathbf {\ hat {v}} & = & \ frac {\ sqrt {2}} {2} \ mathbf {i} + \ frac {\ sqrt {2}} {2 } \ mathbf {k} \\ \ mathbf {p} & = & 2 \ mathbf {i} \\ q & = & [\ cos \ theta, \ sin \ theta \ mathbf {\ hat {v}}] \\ p & = & [0, \ mathbf {p}] \ end {array}


Dan mengalikan vektor kita  mathbfp pada q kami mendapatkan:

\ begin {array} {rcl} p ^ {\ prime} & = & qp \\ & = & [\ cos \ theta, sin \ theta \ mathbf {\ hat {v}}] [0, \ mathbf {p }] \\ & = & [- \ sin \ theta \ mathbf {\ hat {v}} \ cdot \ mathbf {p}, \ cos \ theta \ mathbf {p} + \ sin \ theta \ mathbf {\ hat { v}} \ times \ mathbf {p}] \ end {array}


Setelah substitusi  mathbf hatv ,  mathbfp dan  theta=45 circ kami mendapatkan:

\ begin {array} {rcl} p ^ {\ prime} & = & \ kiri [- \ frac {\ sqrt {2}} {2} \ kiri (\ frac {\ sqrt {2}} {2} \ mathbf {i} + \ frac {\ sqrt {2}} {2} \ mathbf {k} \ kanan) \ cdot (2 \ mathbf {i}), \ frac {\ sqrt {2}} {2} 2 \ mathbf {i} + \ frac {\ sqrt {2}} {2} \ kiri (\ frac {\ sqrt {2}} {2} \ mathbf {i} + \ frac {\ sqrt {2}} {2} \ mathbf {k} \ kanan) \ times2 \ mathbf {i} \ kanan] \\ & = & [-1, \ sqrt {2} \ mathbf {i} + \ mathbf {j}] \ end {array}


Artinya, tidak lagi angka empat murni , tidak diputar 45 Β° dan norma vektor tidak lagi sama dengan 2 (turun menjadi  sqrt3 )

Hasil ini dapat ditampilkan secara grafis.


Putaran Quaternion (2)

Sebenarnya, itu tidak benar untuk mewakili angka empat p prime dalam ruang tiga dimensi, karena sebenarnya itu adalah vektor empat dimensi! Demi kesederhanaan, saya hanya akan menampilkan komponen vektor angka empat.

Namun, tidak semuanya hilang. Hamilton menemukan (tetapi tidak mempublikasikan ini) bahwa jika kita kemudian gandakan hasilnya qp ke nilai sebaliknya q , maka hasilnya akan menjadi angka empat murni , dan norma komponen vektor akan dipertahankan. Mari kita lihat apakah ini bisa diterapkan dalam contoh kita.

Pertama, mari kita hitung qβˆ’1 :

\ begin {array} {rcl} q & = & \ kiri [\ cos \ theta, \ sin \ theta \ kiri (\ frac {\ sqrt {2}} {2} \ mathbf {i} + \ frac {\ sqrt {2}} {2} \ mathbf {k} \ kanan) \ kanan] \\ q ^ {- 1} & = & \ kiri [\ cos \ theta, - \ sin \ theta \ kiri (\ frac {\ sqrt {2}} {2} \ mathbf {i} + \ frac {\ sqrt {2}} {2} \ mathbf {k} \ kanan) \ kanan] \ end {array}


Di  theta=45 circ kami mendapatkan:

\ begin {array} {rcl} q ^ {- 1} & = & \ kiri [\ frac {\ sqrt {2}} {2}, - \ frac {\ sqrt {2}} {2} \ kiri ( \ frac {\ sqrt {2}} {2} \ mathbf {i} + \ frac {\ sqrt {2}} {2} \ mathbf {k} \ kanan) \ kanan] \\ & = & \ frac {1 } {2} \ kiri [\ sqrt {2}, - \ mathbf {i} - \ mathbf {k} \ kanan] \ end {array}


Menggabungkan nilai sebelumnya qp dan qβˆ’1 kami mendapatkan:

\ begin {array} {rcl} qp & = & \ kiri [-1, \ sqrt {2} \ mathbf {i} + \ mathbf {j} \ kanan] \\ qpq ^ {- 1} & = & \ kiri [-1, \ sqrt {2} \ mathbf {i} + \ mathbf {j} \ kanan] \ frac {1} {2} \ kiri [\ sqrt {2}, - \ mathbf {i} - \ mathbf {k} \ kanan] \\ & = & \ frac {1} {2} \ kiri [- \ sqrt {2} - \ kiri (\ sqrt {2} \ mathbf {i} + \ mathbf {j} \ kanan ) \ cdot (- \ mathbf {i} - \ mathbf {k}), \ mathbf {i} + \ mathbf {k} + \ sqrt {2} \ kiri (\ sqrt {2} \ mathbf {i} + \ mathbf {j} \ kanan) - \ mathbf {i} + \ sqrt {2} \ mathbf {j} + \ mathbf {k} \ kanan] \\ & = & \ frac {1} {2} \ kiri [- \ sqrt {2} + \ sqrt {2}, \ mathbf {i} + \ mathbf {k} +2 \ mathbf {i} + \ sqrt {2} \ mathbf {j} - \ mathbf {i} + \ sqrt {2} \ mathbf {j} + \ mathbf {k} \ kanan] \\ & = & \ kiri [0, \ mathbf {i} + \ sqrt {2} \ mathbf {j} + \ mathbf {k} \ kanan] \ end {array}


Yang merupakan angka empat murni , dan norma hasilnya adalah:

\ begin {array} {rcl} | p ^ {\ prime} | & = & \ sqrt {1 ^ 2 + \ sqrt {2} ^ 2 + 1 ^ 2} \\ & = & \ sqrt {4} \\ & = & 2 \ end {array}


yang sama  mathbfp , yaitu, norma vektor dipertahankan.

Gambar di bawah ini menunjukkan hasil rotasi.


Putaran Quaternion (3)

Kita melihat bahwa hasilnya adalah angka empat murni, dan norma dari vektor asli dipertahankan, tetapi vektor diputar 90 Β°, bukan 45 Β°, yang dua kali lebih banyak dari yang diperlukan! Oleh karena itu, untuk rotasi vektor yang benar  mathbfp di sudut  theta relatif terhadap sumbu sewenang-wenang  mathbf hatv kita perlu mengambil setengah sudut dan membuat angka empat berikut:

q= kiri[ cos frac12 theta, sin frac12 theta mathbf hatv kanan]


Apa pandangan umum dari angka empat berputar!

Interpolasi Quaternion


Salah satu alasan paling penting untuk menggunakan angka empat dalam grafik komputer adalah angka empat menggambarkan rotasi dalam ruang dengan sangat baik. Quaternion menghilangkan beban cara lain untuk memutar titik dalam ruang 3D, seperti bingkai lipat , di mana masalahnya mewakili rotasi di sudut Euler.

Dengan menggunakan angka empat, kita dapat mendefinisikan beberapa metode yang mewakili interpolasi rotasi dalam ruang 3D. Metode pertama yang saya pertimbangkan disebut SLERP . Ini digunakan untuk menginterpolasi titik antara dua orientasi dengan lancar. Metode kedua adalah pengembangan SLERP dan disebut SQUAD . Ini digunakan untuk interpolasi sepanjang serangkaian orientasi yang menentukan jalur.

SLERP


SLERP adalah kependekan dari Spherical L inear Interpolasi (interpolasi linier berbentuk bola). SLERP menyediakan kemampuan untuk menginterpolasi titik antara dua orientasi dengan lancar.

Saya akan menunjuk orientasi pertama sebagai q1 , dan yang kedua sebagai q2 . Titik interpolasi dilambangkan dengan  mathbfp , titik interpolasi dilambangkan dengan  mathbfp prime . Parameter interpolasi t akan interpolasi  mathbfp dari q1 di t=0 sebelumnya q2 di t=1 .

Formula interpolasi linier standar adalah:

 mathbfp prime= mathbfp1+t( mathbfp2βˆ’ mathbfp1)


Berikut adalah langkah-langkah dasar untuk menerapkan persamaan ini:

  • Kami menghitung perbedaan antara  mathbfp1 dan  mathbfp2 .
  • Ambil bagian pecahan dari perbedaan ini.
  • Perbaiki nilai awal dengan perbedaan fraksional antara dua poin.

Kita dapat menggunakan prinsip dasar yang sama untuk menginterpolasi antara dua orientasi angka empat.

Perbedaan kuota


Langkah pertama berarti kita perlu menghitung selisihnya q1 dan q2 . Dalam konteks angka empat, ini mirip dengan menghitung perbedaan sudut antara dua angka empat.

 Deltaq=qβˆ’11q2


Meningkatkan angka empat ke kekuatan


Langkah selanjutnya adalah mengambil bagian fraksional dari perbedaan ini. Kita bisa menghitung bagian pecahan angka empat dengan menaikkannya ke kekuatan yang nilainya berada dalam kisaran [0...1] .

Rumus umum untuk menaikkan angka empat ke kekuatan memiliki bentuk berikut:

qt= exp(t logq)


Di mana fungsi eksponensial untuk angka empat terlihat seperti ini:

\ begin {array} {rcl} \ exp (q) & = & \ exp \ kiri ([0, \ theta \ mathbf {\ hat {v}}] \ kanan) \\ & = & [\ cos \ theta , \ sin \ theta \ mathbf {\ hat {v}}] \ end {array}


Dan logaritma angka empat memiliki bentuk:

\ begin {array} {rcl} \ log {q} & = & \ log (\ cos \ theta {+} \ sin \ theta \ mathbf {\ hat {v}}) \\ & = & \ log \ kiri (\ exp (\ theta \ mathbf {\ hat {v}}) \ kanan) \\ & = & \ theta \ mathbf {\ hat {v}} \\ & = & [0, \ theta \ mathbf {\ hat {v}}] \ end {array}


Di t=0 kami memiliki yang berikut:

\ begin {array} {rcl} q ^ 0 & = & \ exp (0 \ log {q}) \\ & = & \ exp ([\ cos (0), \ sin (0) \ mathbf {\ hat {v}}]) \\ & = & \ exp ([1, \ mathbf {0}]) \\ & = & [1, \ mathbf {0}] \ end {array}


Dan kapan t=1 kami punya

\ begin {array} {rcl} q ^ 1 & = & \ exp (\ log {q}) \\ & = & q \ end {array}


Perbedaan pecahan angka empat


Untuk menghitung rotasi sudut interpolasi, kami mengubah orientasi awal q1 ke bagian pecahan dari perbedaan antara q1 dan q2 .

q prime=q1 kiri(qβˆ’11q2 kanan)t


Apa pandangan umum interpolasi linear bola untuk angka empat. Namun, ini bukan jenis persamaan SLERP yang biasa digunakan dalam praktik.

Kita dapat menerapkan rumus yang sama untuk melakukan interpolasi bola vektor ke angka empat. Bentuk umum interpolasi bola untuk vektor didefinisikan sebagai berikut:

 mathbfvt= frac sin(1βˆ’t) theta sin theta mathbfv1+ frac sint theta sin theta mathbfv2


Secara grafis, ini dapat ditunjukkan pada gambar berikut.


Interpolasi Quaternion

Formula ini dapat diterapkan ke angka empat tanpa perubahan:

qt= frac sin(1βˆ’t) theta sin thetaq1+ frac sint theta sin thetaq2


Dan kita bisa mendapatkan sudutnya  theta menghitung produk skalar q1 dan q2 .

\ begin {array} {rcl} \ cos \ theta & = & \ cfrac {q_1 {\ cdot} q_2} {| q_1 || q_2 |} \\ & = & \ cfrac {s_ {1} s_ {2} + x_ {1} x_ {2} + y_ {1} y_ {2} + z_ {1} z_ {2}} {| q_1 || q_2 |} \\ \ theta & = & \ cos ^ {- 1} \ kiri (\ cfrac {s_ {1} s_ {2} + x_ {1} x_ {2} + y_ {1} y_ {2} + z_ {1} z_ {2}} {| q_1 || q_2 |} \ kanan) \ end {array}


Faktor yang Perlu Dipertimbangkan


Implementasi ini memiliki dua masalah untuk dipertimbangkan saat menggunakannya.

Pertama, jika produk skalar dari angka empat ternyata menjadi nilai negatif, maka interpolasi akan berjalan jauh pada bola empat dimensi, dan ini tidak selalu diinginkan.Untuk mengatasi masalah ini, kita dapat memeriksa hasil produk skalar dan jika negatif, maka kita dapat mengambil nilai yang berlawanan dengan salah satu orientasi. Melawan skalar dan bagian vektor angka empat tidak mengubah orientasi yang diwakilinya, tetapi dengan melakukan ini, kami menjamin bahwa rotasi akan terjadi di sepanjang jalur "terpendek".

Masalah lain muncul jika perbedaan sudut antaraq1 dan q2 sangat kecil, sementara sinΞΈ menjadi 0. Jika ini terjadi, maka bagi dengan sinΞΈkita bisa mendapatkan hasil yang tidak pasti. Dalam hal ini, Anda dapat kembali menggunakan interpolasi linierq1 dan q2 .

Pasukan


Sama seperti SLERP dapat digunakan untuk interpolasi antara dua angka empat, SQUAD ( S pherical dan Quad rangle - spherical dan quadrangular) dapat digunakan untuk interpolasi yang mulus di sepanjang jalur rotasi.

Jika kami memiliki sejumlah angka:

q1,q2,q3,β‹―,qnβˆ’2,qnβˆ’1,qn


Dan kami mendefinisikan angka empat "pembantu" ( si ), yang dapat kita pertimbangkan sebagai titik kontrol menengah:

si=exp(βˆ’log(qi+1qβˆ’1i)+log(qiβˆ’1qβˆ’1i)4)qi


Orientasi sepanjang bagian kurva didefinisikan sebagai:

qiβˆ’1,qi,qi+1,qi+2


pada saat t memberikan kita:

squad(qi,qi+1,si,si+1,t)=slerp(slerp(qi,qi+1,t),slerp(si,si+1,t),2t(1βˆ’t))


Kesimpulan


Meskipun sulit untuk dipahami, ketika bekerja dengan belokan, angka empat memberikan beberapa keuntungan yang jelas dibandingkan dengan matriks dan sudut Euler.

  • SLERP SQUAD .
  • , , .
  • - . , ( , ).
  • , .
  • 4 (3, . ), 9 .

Namun, bersama dengan semua keuntungan menggunakan angka empat, ada juga beberapa kelemahan.

  • Kuuat bisa menjadi tidak valid karena kesalahan pembulatan angka floating point; Namun, "crept in error" ini dapat dihilangkan dengan melakukan renormalisasi angka empat.
  • Mungkin hambatan yang paling signifikan untuk penggunaan angka empat adalah kompleksitas tinggi dari pemahaman mereka. Saya harap Anda menyelesaikan masalah ini dengan membaca artikel saya.

Ada banyak perpustakaan matematika yang mengimplementasikan angka empat, dan hanya beberapa dari mereka yang mengimplementasikan angka empat dengan benar. Dalam pengalaman saya sendiri, perpustakaan matematika yang baik dengan implementasi quaternions berkualitas tinggi adalah GLM (OpenGL Math Library). Jika Anda ingin menggunakan angka empat dalam aplikasi Anda sendiri, maka saya merekomendasikan perpustakaan ini.

Unduh demo


, . Unity 3.5.2, . zip Windows, Unity Mac.

Understanding Quaternions.zip


Quaternions for Computer Graphics

Vince, J (2011). Quaternions for Computer Graphics. 1st. ed. London: Springer.



Dunn, F. and Parberry, I. (2002). 3D Math Primer for Graphics and Game Development. 1st. ed. Plano, Texas: Wordware Publishing, Inc.

Source: https://habr.com/ru/post/id426863/


All Articles