Mari kita hilangkan angka empat dari semua mesin 3D

gambar

Pemrogram grafik menggunakan angka empat untuk merekam putaran tiga dimensi. Namun, angka empat sulit untuk dipahami karena mereka dipelajari secara dangkal . Kami hanya mengambil tabel perkalian yang aneh dan definisi samar lainnya tentang iman, dan menggunakannya sebagai "kotak hitam" yang memutar vektor sesuai kebutuhan. Mengapa  m a t h b f i 2 = m a t h b f j 2 = m a t h b f k 2 = - 1   dan  m a t h b f i m a t h b f j = m a t h b f k   ? Mengapa kita mengambil vektor dan mengubahnya menjadi vektor "imajiner" untuk mengubahnya, misalnya  mathbfq(x mathbfi+y mathbfj+z mathbfk) mathbfq ? Tapi siapa yang peduli jika semuanya bekerja, kan?

Ada cara untuk menggambarkan rotasi yang disebut rotor , yang mengacu pada bidang bilangan kompleks (dalam 2D) dan angka empat (dalam 3D), dan bahkan digeneralisasikan ke sejumlah dimensi.

Kita dapat membuat rotor hampir sepenuhnya dari awal , alih-alih menentukan angka empat dari nol dan mencoba menjelaskan bagaimana mereka bekerja secara surut . Butuh lebih banyak waktu, tetapi bagi saya itu sepadan, karena mereka jauh lebih mudah dipahami!

Selain itu, untuk visualisasi dan pemahaman rotor tiga dimensi, tidak perlu menggunakan dimensi spasial keempat.

Akan lebih bagus jika mereka mulai menggantikan penggunaan dan studi angka empat, menggantinya dengan rotor. Menggantinya sangat sederhana, tetapi kodenya akan tetap hampir sama . Segala sesuatu yang dapat dilakukan dengan angka empat, misalnya, menyisipkan dan melepas kunci gandar (kunci Gimbal), dapat dilakukan dengan rotor. Tetapi kita mulai mengerti lebih banyak.

(Dalam artikel asli, semua bagan bersifat interaktif, dan artikel diikuti oleh video. Dengan mengeklik tombol putar, Anda dapat memulai bagian yang sesuai dari video. Anda juga dapat mengklik tombol transisi di bawah video untuk pergi ke bagian yang sesuai dari artikel. Anda dapat memperluas jendela sehingga ada lebih banyak ruang untuk video , atau atur ukuran konstan untuk itu.)

1. Mengubah pesawat


1.1. Giliran dilakukan pada pesawat dua dimensi.


Dalam ruang tiga dimensi, kita biasanya melihat belokan terjadi di sekitar sumbu, seperti roda yang berputar pada sumbu, tetapi sebaliknya akan lebih tepat untuk mewakili bidang di mana roda berada. Bidang ini tegak lurus terhadap sumbu.


Wanita tua ini memutar roda di pesawat  mathbfxz tegak lurus terhadap sumbu  mathbfy .

Ini terjadi karena jika kita membagi vektor menjadi dua bagian, salah satunya terletak pada bidang (  mathbfv parallel ), dan yang lainnya di luar (  mathbfv pelaku ), maka rotasi memutar bagian dalam, dan bagian luar tetap tidak berubah.


Rotasi di pesawat yx [ dalam artikel asli, animasi ini dan kamera bisa dipindahkan ]

Dalam ruang dua dimensi hanya ada satu bidang di mana rotasi dimungkinkan ( tidak ada bagian eksternal ). Oleh karena itu, untuk mengasumsikan bahwa rotasi yang terjadi di sekitar sumbu ketiga (tegak lurus terhadap bidang 2D) adalah benar-benar salah, karena untuk menyelesaikan rotasi kita tidak boleh menambahkan dimensi lain.

Jika kita memberi tahu "pemilik tanah datar" dua dimensi (yang tinggal di dalam bidang 2D dan tidak pernah keluar dari ruang dua dimensi) tentang sumbu rotasi tegak lurus, dia akan bertanya: "Di mana arah titik sumbu ini? Saya tidak bisa membayangkannya! "

Catatan
Dan dalam dimensi yang lebih tinggi (4D dan lebih tinggi) tidak mungkin untuk menentukan satu vektor normal ke bidang 2D (misalnya, dalam 4D bidang 2D memiliki dua arah normal, di 5D ada tiga arah normal, dan dalam n D. mereka n - 2 )

1.2. Arah belokan yang tepat


Selain itu, ketika kita berpikir tentang rotasi di sekitar sumbu, arah rotasi tidak ditentukan, dan karena itu harus ditentukan oleh aturan (yang disebut "aturan tangan kanan").

Namun, jika kita mengasumsikan bahwa belokan terjadi di dalam pesawat, maka arahnya menjadi jelas: rotasi di pesawat  mathbfxy berarti rotasi yang menggerakkan vektor (unit)  mathbfx ke vektor (unit)  mathbfy di dalam pesawat mereka bersama-sama terbentuk. Rotasi di pesawat  mathbfyx Adalah rotasi ke arah yang berlawanan: ia menggerakkan vektor  mathbfy ke vektor  mathbfx .

Catatan
Saya ingat bahwa ketika saya pertama kali belajar tentang tiga matriks rotasi 3D di sepanjang pesawat ortogonal, saya pertama kali berpikir: apa itu matriks  m a t h b f R y memiliki tanda kebalikannya? Ini karena aturan tangan kanan, yang menurutnya kita harus menentukan rotasi di sekitar sumbu  m a t h b f y sehingga berjalan dari  m a t h b f z untuk  mathbfx bukan dari  mathbfx untuk  mathbfz untuk mempertahankan arah rotasi "tangan kanan" yang konstan. Ketika kita mulai berbicara langsung tentang pesawat itu sendiri, aturan ini menjadi tidak perlu.

R_X (\ theta) = \ begin {bmatrix} 1 & 0 & 0 \\ 0 & cos (\ theta) & -sin (\ theta) \\ 0 & sin (\ theta) & cos (\ theta) \ end {bmatrix} \: \: \: R_Y (\ theta) = \ begin {bmatrix} cos (\ theta) & 0 & \ bbox [5px, batas bawah: 2px merah solid] {\ \} sin (\ theta) \\ 0 & 1 & 0 \\ \ bbox [5px, batas-bawah: 2px merah solid] {-} sin (\ theta) & 0 & cos (\ theta) \ end {bmatrix} \: \: \: R_Z (\ theta) = \ begin {bmatrix} cos (\ theta) & -sin (\ theta) & 0 \\ sin (\ theta) & cos (\ theta) & 0 \\ 0 & 0 & 1 \ end {bmatrix }


2. Bivektor



2.1. Pekerjaan eksternal


Untuk menghitung sumbu rotasi ketika memutar satu vektor  mathbfa ke vektor lain  mathbfb kami mengambil produk vektor dari dua vektor untuk mendapatkan vektor yang tegak lurus terhadap keduanya. Tetapi mengapa kita perlu "meninggalkan" pesawat jika rotasi pada dasarnya adalah operasi dua dimensi?

Sebagai gantinya, kami mengambil apa yang disebut produk eksternal (juga dikenal sebagai produk vektor dua dimensi), dua vektor, menciptakan elemen baru yang disebut "bivector" (atau 2-vektor)  mathbfB mewakili bidang yang membentuk dua vektor bersama. Jika produk vektor membuat vektor normal ke bidang, maka produk eksternal membuat bidang itu sendiri . Perhitungan normal ke pesawat tidak relevan.

 mathbfB= mathbfa wedge mathbfb


 mathbfB dapat direpresentasikan sebagai jajaran genjang yang dibangun dari vektor  mathbfa dan  mathbfb di pesawat yang mereka bersama membentuk.

Pada awalnya, gagasan bivektor mungkin tampak aneh, tetapi segera kita akan melihat bahwa mereka hampir sama mendasarnya dengan vektor itu sendiri . Jika vektor dapat dibandingkan dengan garis lurus, maka bivektornya mirip dengan bidang ... Sifat-sifat produk eksternal menangkap sifat-sifat penting pesawat.

2.2. Dasar untuk bivektor



Bivektor, seperti vektor, memiliki komponen. Tetapi mereka ditentukan berdasarkan pesawat , dan bukan garis lurus , seperti vektor.

Tiga bidang dasar ortogonal adalah  mathbfx wedge mathbfy ,  mathbfx wedge mathbfz dan  mathbfy wedge mathbfz seperti yang kita lihat dari gambar.

Tapi pertama-tama, mari kita lihat kasus dua dimensi yang lebih sederhana ...

2.3. Bivektor dua dimensi


Dalam 2D, hanya ada satu bidang, yaitu  mathbfxy . Artinya, bivektor dua dimensi hanya memiliki satu komponen. Untuk bivektor terdiri dari vektor  mathbfa dan  mathbfb adalah nomornya Bxy sama dengan luas (dengan tanda) dari jajar genjang yang dibentuk oleh dua vektor.

 mathbfB= mathbfa wedge mathbfb=Bxy( mathbfx wedge mathbfy)


Dalam artikel asli dengan bivektor 2D, Anda dapat bereksperimen pada grafik interaktif dengan mengubah vektor (tunggal) yang terdiri dari:


Anda dapat melihat bahwa ketika sudut antara vektor berubah, area jajaran genjang berubah (sesuai dengan sinus sudut).

Jika vektor-vektornya sama atau paralel, maka vektor-vektor itu tidak membentuk bidang biasa dan hasilnya akan nol. Properti sederhana ini mendefinisikan apa yang dimaksud bivektor:

 mathbfa wedge mathbfa=0


Melihat jumlah dari dua vektor, Anda dapat melihat bahwa properti mengikuti:

\ begin {eqnarray} (\ mathbf {a} + \ mathbf {b}) \ wedge (\ mathbf {a} + \ mathbf {b}) & = & 0 \\ \ mathbf {a} \ wedge \ mathbf { a} + \ mathbf {b} \ wedge \ mathbf {a} + \ mathbf {a} \ wedge \ mathbf {b} + \ mathbf {b} \ wedge \ mathbf {b} & = & 0 \\ \ mathbf { b} \ wedge \ mathbf {a} + \ mathbf {a} \ wedge \ mathbf {b} & = & 0 \ end {eqnarray}


Oleh karena itu:

 mathbfa wedge mathbfb= mathbfb wedge mathbfa


Sama seperti arah rotasi , urutan argumen dalam karya eksternal juga penting. Menyusun ulang argumen mengubah tanda hasil (ini disebut "antisimetri").

Pada bagan, tanda ditandai dengan warna yang berubah dari biru menjadi hijau. Tanda berubah saat pergantian  mathbfa masuk  mathbfb bergerak dari searah jarum jam ke berlawanan arah jarum jam (mis., jika cocok dengan arah (dari  mathbfx untuk  mathbfy ) atau arah (dari  mathbfy untuk  mathbfx )).

Anda dapat melihat bahwa sifat-sifat produk eksternal diatur sehingga mereka menyampaikan sifat-sifat pesawat dan belokan.

2.4. Bivektor dua dimensi vektor nonunit


Jelas, vektor tidak harus memiliki panjang satuan, dan batasan ini telah dihapus pada grafik ini:


Luas jajaran genjang dengan tanda sebanding dengan panjang kedua vektor: Bxy=sin( alpha) |a | |b | dimana  alpha Apakah sudut antara  mathbfa dan  mathbfb . Misalnya, ketika menggandakan panjang satu vektor, area tersebut berlipat ganda.

Kita bisa mendapatkan nilai sebenarnya dengan mengganti vektor sebagai komponen:

\ begin {eqnarray} \ mathbf {a} \ wedge \ mathbf {b} & = & (a_x \ mathbf {x} + a_y \ mathbf {y}) \ wedge (b_x \ mathbf {x} + b_y \ mathbf { y}) \\ & = & a_x b_x (\ mathbf {x} \ wedge \ mathbf {x}) + a_x b_y (\ mathbf {x} \ wedge \ mathbf {y}) + a_y b_x (\ mathbf {y} \ wedge \ mathbf {x}) + a_y b_y (\ mathbf {y} \ wedge \ mathbf {y}) \\ & = & a_x b_y (\ mathbf {x} \ wedge \ mathbf {y}) + a_y b_x ( \ mathbf {y} \ wedge \ mathbf {x}) \\ & = & a_x b_y (\ mathbf {x} \ wedge \ mathbf {y}) - a_y b_x (\ mathbf {x} \ wedge \ mathbf {y} ) \\ & = & (a_x b_y - a_y b_x) (\ mathbf {x} \ wedge \ mathbf {y}) \ end {eqnarray}


Bxy=axbybxay


2.5. Bivektor 3D



Sama seperti koordinat vektor  mathbfv dapat dianggap proyeksi vektor pada tiga sumbu dasar ortogonal (  mathbfx ,  mathbfy ,  mathbfz ), koordinat bivector  mathbfB dapat dianggap proyeksi lebih kecil dari pesawat pada tiga bidang dasar ortogonal.

Proyeksi vektor adalah panjang vektor ini di sepanjang setiap vektor basis, dan proyeksi bivektor adalah area bidang pada setiap bidang basis.

Untuk vektor:

 mathbfv= bbox[5px,batasbawah:2pxmerahsolid]vx mathbfx+ bbox[5px,batasbawah:hijausolid2px]vy mathbfy+ bbox[5px,batasbawah:2pxbirusolid]vz mathbfz


Untuk bivector:

 mathbfB= bbox[5px,batasbawah:2pxsolidcoral]Bxy( mathbfx wedge mathbfy)+ bbox[5px,batasbawah:2pxemasmurni]Bxz( mathbfx wedge mathbfz)+ bbox[5px,batasbawah:2pxsolidDarkViolet]Byz( mathbfy wedge mathbfz)


Dimana Bxy , Bxz , Byz Seperti angka saja vx , vy , vz (mereka digarisbawahi oleh warna yang sesuai dengan warna pada grafik).

Komponen bivektor 3D hanyalah tiga proyeksi 2D dari bivektor ke bidang 2D dasar.

Dengan menggunakan metode yang sama seperti sebelumnya, kami menemukan bahwa nilai sebenarnya dari komponen sangat mirip dengan komponen XY dari kasus dua dimensi, tetapi diterapkan pada ketiga bidang:

Bxy=axbybxay


Bxz=axbzbxaz


Byz=aybzbyaz


Anda dapat bereksperimen dengan bivektor 3D pada bagan interaktif di artikel asli:


Catatan
Norma bivektor  | mathbfB |= | mathbfa wedge mathbfb | ditentukan mirip dengan norma vektor (akar kuadrat dari jumlah kuadrat komponen). Ini sama dengan luas jajaran genjang yang terbentuk  mathbfa dan  mathbfb , yaitu  | mathbfa wedge mathbfb |= midsin( alpha) mid | mathbfa | | mathbfb | dimana  alpha - sudut antara  mathbfa dan  mathbfb .

Jika kita membagi bivektor berdasarkan normanya, maka kita mengurangi dua panjang vektor dan nilai (absolut) dari sinus sudut, yaitu, kita akan memiliki bivektor  hat mathbfB , yang akan dibangun seolah-olah kedua vektor awalnya tegak lurus dan memiliki panjang satuan. Ini adalah representasi yang sangat bersih dari bidang yang mengandung kedua vektor. Jadi:

 mathbfB=| mathbfa | ||mathbfb | midsin( alpha) mid hat mathbfB


Apakah sesuatu mengingatkan Anda pada pekerjaan eksternal? Dalam 3D, definisi karya eksternal sangat mirip dengan definisi karya vektor. Bahkan, vektor dalam 3D yang diperoleh dari produk vektor (misalnya, vektor normal) akan memiliki tiga komponen yang sama dengan komponen bivektor (angkanya akan sama, tetapi dasarnya berbeda).

$$ menampilkan $$ \ begin {eqnarray} \ mathbf {a} \ wedge \ mathbf {b} & = & & (a_x b_y - b_x a_y) (\ mathbf {x} \ wedge \ mathbf {y}) \\ & & + & (a_x b_z - b_x a_z) (\ mathbf {x} \ wedge \ mathbf {z}) \\ & & & & (a_y b_z - b_y a_z) (\ mathbf {y} \ wedge \ mathbf {z} ) \\ \\ \ mathbf {a} \ kali \ mathbf {b} & = & & (a_x b_y - b_x a_y) \ \ mathbf {z} \\ & & - & (a_x b_z - b_x a_z) \ \ mathbf {y} \\ & & + & (a_y b_z - b_y a_z) \ \ mathbf {x} \ end {eqnarray} $$ tampilkan $$


Definisi bivector memiliki arti geometris, dan tidak muncul entah dari mana. Saya ingat ketika saya mempelajari produk-produk vektor, saya berpikir: “Apa-apaan ini mengembalikan vektor yang panjangnya sama dengan area jajaran genjang yang dibentuk oleh dua vektor ini? Sepertinya acak. Dan mengapa kita bisa mengubah area jajaran genjang menjadi panjang vektor? "

2.6. Semantik vektor dan bivektor


Dalam 3D, bivector memiliki tiga koordinat, satu per pesawat: (  mathbfxy ,  mathbfxz dan  mathbfyz ) Vektor juga memiliki tiga koordinat, satu per sumbu (  mathbfx ,  mathbfy dan  mathbfz ) Setiap bidang tegak lurus terhadap satu sumbu. Kebetulan ini hanya muncul dalam tiga dimensi (*) dan itulah sebabnya kami terus-menerus mengacaukan bivektor dengan vektor .

(*)
Dalam 2D, hanya ada satu bivektor dasar (  mathbfxy ), dan dalam 3D ada 3 bivektor dasar (  mathbfxy ,  mathbfxz ,  mathbfyz ), dalam 4D ada 6 basis bivektor (  mathbfxy ,  mathbfxz ,  mathbfxw ,  mathbfyz ,  mathbfyw ,  mathbfzw ) dan seterusnya ...

Dalam pemrograman, mereka berdua memiliki tata letak memori yang sama, tetapi operasi yang berbeda. Menggunakan vektor 3D alih-alih bivektor 3D mirip dengan "konversi tipe" bivektor.

Berikut ini sebuah contoh: Anda dapat melihat bahwa vektor normal ditransformasikan berbeda dari vektor biasa menggunakan matriks "transfer terbalik" ( mathbfMT)1 , bukannya matriks itu sendiri. Ini karena, pada kenyataannya, mereka sebenarnya bukan vektor, tetapi bivektor, yang diubah menjadi vektor oleh "konversi tipe". Dalam fisika, ada retasan yang disebut "vektor aksial," yang diperkenalkan untuk membedakan vektor yang diperoleh oleh produk vektor dari vektor biasa. Bivector adalah "tipe" sebenarnya dari suatu objek dan harus dirasakan dan diproses sesuai.

Trivectors

Kami dapat terus mengambil produk eksternal untuk mendapatkan tidak hanya area 2D yang berorientasi, tetapi juga volume 3D yang berorientasi. Trivector T dapat diperoleh dengan melakukan produk eksternal dua kali:

 mathbfT= mathbfa wedge mathbfb wedge mathbfc


Dalam ruang tiga dimensi, semuanya berakhir di sana. Seperti dalam 2D, di mana hanya ada satu bidang yang mengisi seluruh ruang 2D, dalam 3D hanya ada satu volume yang mengisi seluruh ruang 3D.

[Tetapi dalam nD, kami dapat terus membuat vektor produk eksternal yang lebih besar hingga kami mencapai dimensi ke-n. Sebagai contoh, dalam 4D, kami memiliki empat basis trivctors (3-vektor) (  mathbfxyz ,  mathbfxyw ,  mathbfxwz ,  mathbfyzw ) dan satu dasar 4-vektor  mathbfxyzw ]

Dalam 3D, trivector hanya memiliki satu komponen dasar ( Txyz ) sama dengan volume parallelepiped yang dibentuk oleh tiga vektor. Produk luar tiga adalah versi yang ditingkatkan dari produk skalar tiga ( ( mathbfa kali mathbfb) cdot mathbfc ), karena hanya melibatkan satu jenis operasi, ia mengembalikan jenis yang benar (volume bukan skalar) dan bekerja di sejumlah dimensi.

 mathbfT=Txyz mathbfx wedge mathbfy wedge mathbfz


3. Produk geometris


3.1. Multiplikasi vektor satu sama lain


Produk geometris  mathbfab (dilambangkan tanpa simbol) adalah operasi lain yang dapat dilakukan dengan vektor. Produk geometrik didefinisikan sehingga vektor adalah jumlah terbalik (mis.  mathbfa mathbfa1=1 , di mana 1 hanya nomor 1!) dan memiliki sifat yang nyaman, misalnya, asosiatif  mathbfa( mathbfb mathbfc)=( mathbfa mathbfb) mathbfc ) Tujuan dari ini adalah untuk dapat melipatgandakan vektor sehingga (seperti halnya dengan matriks) perkalian sesuai dengan operasi geometris.

Catatan
Memiliki nilai invers berguna karena apapun objeknya  mathbfa mathbfa1 , itu tidak akan mempengaruhi vektor, yaitu, ia akan berperilaku sama seperti ketika mengalikan angka dengan 1.

Untuk mendefinisikan suatu produk, pertama-tama kita perhatikan bahwa mungkin untuk membagi produk (atau fungsi apa pun yang menggunakan dua argumen) menjadi jumlah bagian yang tidak berubah jika kita menukar argumen dan bagian yang berubah sebagai berikut:

\ begin {eqnarray} \ mathbf {a} \ mathbf {b} & = & \ frac {1} {2} (\ mathbf {a} \ mathbf {b} + \ mathbf {a} \ mathbf {b} + \ mathbf {b} \ mathbf {a} - \ mathbf {b} \ mathbf {a}) \\ & = & \ frac {1} {2} (\ mathbf {a} \ mathbf {b} + \ mathbf { b} \ mathbf {a}) + \ frac {1} {2} (\ mathbf {a} \ mathbf {b} - \ mathbf {b} \ mathbf {a}) \ end {eqnarray}


Istilah pertama tidak lagi tergantung pada urutan argumen  mathbfa dan  mathbfb (disebut bagian "simetris"), dan istilah kedua berubah tanda ketika mengubah tempat argumen (disebut bagian "antisimetrik").

Produk skalar dari dua vektor (juga disebut produk dalam) simetris dan merupakan ukuran jarak (  mathbfa cdot mathbfa= | mathbfa |2 ), oleh karena itu, dari sudut pandang geometris, tampaknya berguna bahwa kita membuatnya sama dengan bagian simetris:

 frac12( mathbfa mathbfb+ mathbfb mathbfa)= mathbfa cdot mathbfb


Demikian pula, produk luar dari dua vektor adalah antisimetri, sehingga akan berguna untuk menyamakannya dengan bagian antisimetrik:

 frac12( mathbfa mathbfb mathbfb mathbfa)= mathbfa wedge mathbfb


Selain itu, produk skalar mengandung kosinus sudut antara dua vektor (  mathbfa cdot mathbfb= | mathbfa | | mathbfb |cos( alpha) ), sedangkan produk eksternal mengandung sinus sudut. Bersama-sama, mereka sepenuhnya menggambarkan sudut antara vektor, serta bidang yang mereka bentuk.

Catatan
Kelengkapan uraian inilah yang membuat karya tersebut dapat dibalik, karena kita dapat beralih dari satu vektor ke vektor lainnya dengan bantuan informasi yang terkandung dalam karya mereka. Jika aku memberimu  mathbfa dan  mathbfa mathbfb maka kamu bisa mendapatkan  mathbfb . Ini tidak mungkin dilakukan, hanya mengetahui cosinus atau hanya sinus / bidang.

Artinya, produk geometris sama dengan:

 mathbfa mathbfb= mathbfa cdot mathbfb+ mathbfa wedge mathbfb


Ini aneh karena mengalikan dua vektor memberikan jumlah dua hal yang berbeda: skalar dan bivektor. Namun, ini mirip dengan bagaimana bilangan kompleks adalah jumlah dari skalar dan angka "imajiner", sehingga Anda sudah terbiasa dengannya. Di sini, bagian bivektor sesuai dengan bagian "imajiner" dari bilangan kompleks. Hanya ini bukan nilai "imajiner", itu hanya bivektor yang benar-benar dapat kami tunjukkan secara grafis!

Bahkan, mengalikan dua vektor, kami menghitung sifat berguna mereka ("panjang proyeksi mereka satu sama lain" / "cosinus sudut" (  mathbfa cdot mathbfb ) dan "bidang yang mereka bentuk bersama" / "sinus sudut" (  mathbfa wedge mathbfb )), yang kita hubungkan bersama dengan tanda plus. Produk geometrik juga memberikan operasi "grup properti" yang dapat diterapkan padanya, dan operasi ini memiliki interpretasi geometris (misalnya: rotasi dan refleksi vektor). Ini akan kita lihat segera.

Anda dapat mengekspresikan produk geometris dalam bentuk sinus dan kosinus:  mathbfa mathbfb= | mathbfa | | mathbfb |(cos( alpha)+sin( alpha) mathbfB) dimana  mathbfB Adalah bivektor dari kedua vektor pada bidang, terdiri dari dua unit vektor tegak lurus.

3.2. Tabel perkalian


Tabel multiplikasi memungkinkan kita untuk membuat produk lebih spesifik: mari kita lihat apa yang terjadi jika kita mendapatkan produk vektor basis (  mathbfx ,  mathbfy ,  mathbfz )

Untuk setiap vektor basis, misalnya sumbu  mathbfx , hasilnya akan sama 1 :

 mathbfx mathbfx= mathbfx cdot mathbfx+ mathbfx wedge mathbfx=1


Untuk setiap pasangan vektor basis, misalnya, sumbu  mathbfx dan  mathbfy , hasilnya akan menjadi bivektor, yang bersama-sama mereka bentuk:

 mathbfx mathbfy= mathbfx cdot mathbfy+ mathbfx wedge mathbfy= mathbfx wedge mathbfy


(mis. kita bisa memberi nama  mathbfx wedge mathbfy adil  mathbfx mathbfy , karena ini satu dan sama!)

Ini memberi kita tabel berikut:
 mathbfa mathbfb mathbfb
 mathbfx mathbfy mathbfz
 mathbfa mathbfx1 mathbfx mathbfy mathbfx mathbfz
 mathbfy mathbfx mathbfy1 mathbfy mathbfz
 mathbfz mathbfx mathbfz mathbfy mathbfz1

Bahkan, tabel ini sepele, dibandingkan, misalnya, dengan tabel angka empat.

Catatan
Sebagai contoh, ini adalah perkalian dua vektor (5,3,0) dan (2,0,1) :

\ begin {eqnarray} (5 \ mathbf {x} + 3 \ mathbf {y}) (2 \ mathbf {x} + 1 \ mathbf {z}) & = & 5 \ 2 \ \ mathbf {x} \ mathbf {x} + 5 \ 1 \ \ mathbf {x} \ mathbf {z} + 3 \ 2 \ \ mathbf {y} \ mathbf {x} + 3 \ 1 \ \ mathbf {y} \ mathbf {z} \\ & = & 10 + 5 \ \ mathbf {x} \ mathbf {z} - 6 \ \ mathbf {x} \ mathbf {y} + 3 \ \ mathbf {y} \ mathbf {z} \ end {eqnarray}


3.3. Formula refleksi (tampilan tradisional)



Refleksi pada vektor [dalam artikel asli, setiap vektor dapat dipindahkan]

Jika kita memiliki vektor satuan  mathbfa dan vektor  mathbfv kita bisa bercermin  mathbfv melalui pesawat tegak lurus  mathbfa .

Ini dilakukan dengan cara biasa: kami berbagi  mathbfv pada bagian tegak lurus ke pesawat:  mathbfv perp=( mathbfv cdot mathbfa) mathbfa , dan bagian yang sejajar dengan pesawat:  mathbfv parallel= mathbfv mathbfv perp= mathbfv( mathbfv cdot mathbfa) mathbfa .

Kemudian, untuk mencerminkan vektor, kita membalik bagian tegak lurus, dan membiarkan bagian paralelnya tidak berubah:

\ begin {eqnarray} R _ {\ mathbf {a}} (\ mathbf {v}) & = & \ mathbf {v} _ \ parallel - \ mathbf {v} _ \ pel \\ & = & (\ mathbf { v} - (\ mathbf {v} \ cdot \ mathbf {a}) \ mathbf {a}) - ((\ mathbf {v} \ cdot \ mathbf {a}) \ mathbf {a}) \\ & = & & & \ mathbf {v} - 2 (\ mathbf {v} \ cdot \ mathbf {a}) \ mathbf {a} \ end {eqnarray}


3.4. Formula refleksi (tampilan untuk produk geometris)


Pada tahap ini, kita dapat mengganti produk skalar  mathbfv cdot mathbfa pada versinya dalam bentuk produk geometris  frac12( mathbfv mathbfa+ mathbfa mathbfv) , dan dapatkan yang berikut ini:

\ begin {eqnarray} R _ {\ mathbf {a}} (\ mathbf {v}) & = & \ mathbf {v} - 2 (\ frac {1} {2} (\ mathbf {v} \ mathbf {a} } + \ mathbf {a} \ mathbf {v})) \ mathbf {a} \\ & = & \ mathbf {v} - \ mathbf {v} \ mathbf {a} ^ 2 - \ mathbf {a} \ mathbf {v} \ mathbf {a} \\ & = & - \ mathbf {a} \ mathbf {v} \ mathbf {a} \ end {eqnarray}


(  mathbfa2= mathbfa cdot mathbfa=1 sejak itu  mathbfa adalah vektor satuan)

Ini memberi kita hal yang persis sama, tetapi dalam entri yang berbeda. Menggunakan catatan dalam bentuk produk sederhana alih-alih formula untuk penyandian operasi fundamental seperti refleksi akan sangat berguna!

Bagaimana cara kerja beberapa produk geometrik?
Jika Anda tidak mengerti bagaimana pengambilan berganda dari produk geometrik bekerja, maka lihat saja vektor basis. Hanya ada tiga kemungkinan kasus:

\ begin {eqnarray} \ mathbf {x} (\ mathbf {x} \ mathbf {x}) & = & \ mathbf {x} 1 = \ mathbf {x} \\ \ mathbf {x} (\ mathbf {x } \ mathbf {y}) & = & \ mathbf {x} (\ mathbf {x} \ cdot \ mathbf {y} + \ mathbf {x} \ wedge \ mathbf {y}) = \ mathbf {x} (\ mathbf {x} \ cdot \ mathbf {y}) + \ mathbf {x} \ mathbf {x} \ mathbf {y} = \ mathbf {x} (\ mathbf {x} \ cdot \ mathbf {y}) + \ mathbf {y} \\ \ mathbf {x} (\ mathbf {y} \ mathbf {z}) & = & \ mathbf {x} (\ mathbf {y} \ cdot \ mathbf {z}) + \ mathbf {x } \ mathbf {y} \ mathbf {z} \ end {eqnarray}


Hasilnya akan menjadi: vektor, vektor, vektor + trivektor. Namun, kasus terakhir hanya dapat terjadi ketika ketiga vektor independen, yang tidak pernah benar  mathbfava

Detail
Orang-orang yang ingin tahu dapat melihat apa yang terjadi pada setiap tahap.  mathbfa mathbfv mathbfa dalam hal produk geometris.

  1. Tahap pertama:

     mathbfv mathbfa= mathbfv cdot mathbfa+ mathbfv wedge mathbfa


    Jika, seperti sebelumnya, kita membelah  mathbfv ke bagian tegak lurus ke pesawat (  mathbfv pelaku ), dan bagian yang sejajar dengannya (  mathbfv parallel ), lalu kita dapatkan:

    \ begin {eqnarray} (\ mathbf {v} _ \ pel + \ mathbf {v} _ \ parallel) \ mathbf {a} & = & (\ mathbf {v} _ \ pel + \ mathbf {v} _ \ paralel) \ cdot \ mathbf {a} + (\ mathbf {v} _ \ pel + \ mathbf {v} _ \ parallel) \ wedge \ mathbf {a} \\ & = & \ mathbf {v} _ \ pel \ cdot \ mathbf {a} + \ mathbf {v} _ \ parallel \ cdot \ mathbf {a} + \ mathbf {v} _ \ perp \ wedge \ mathbf {a} + \ mathbf {v} _ \ parallel \ wedge \ mathbf {a} \ end {eqnarray}


     mathbfv parallel cdot mathbfa=0 , karena vektor-vektor ini tegak lurus, dan  mathbfv pel wedge mathbfa=0 karena vektor-vektor ini paralel.

     mathbfv mathbfa= mathbfv perp cdot mathbfa+ mathbfv parallel wedge mathbfa


    Istilah pertama hanya panjang proyeksi  mathbfv pada  mathbfa , yaitu istilah pertama hanya panjangnya  mathbfv pelaku .

    Mari kita panggil  hat mathbfv parallel versi dinormalisasi  mathbfv parallel itu adalah  mathbfv parallel= hat mathbfv parallel | mathbfv parallel | . Maka istilah kedua hanyalah bivektor  mathbfB= hat mathbfv parallel wedge mathbfa kali panjangnya  mathbfv parallel .

    Bivector ini  mathbfB terdiri dari dua vektor satuan tegak lurus, yaitu ini adalah representasi bidang vektor yang sangat bersih  mathbfa dan  mathbfv . Itu tidak mengandung informasi tentang sudut relatif atau panjangnya, hanya orientasi bidang.

    Artinya, kedua istilah itu hanyalah pembusukan  mathbfv pada dua proyeksi orthogonal (  mathbfv parallel dan  mathbfv pelaku ), serta bidang yang mereka bentuk (  mathbfB ):

     | mathbfv pel |+ | mathbfv parallel | mathbfB


    Sebelum beralih ke langkah berikutnya, kita dapat mengganti produk eksternal dengan yang geometris, karena  mathbfa dan  mathbfv parallel adalah tegak lurus, dan karena itu produk eksternal dan geometrik mereka akan setara (karena bagian dengan produk skalar dari produk geometriknya sama dengan nol).

     mathbfv pelaku cdot mathbfa+ mathbfv parallel wedge mathbfa= mathbfv pelaku cdot mathbfa+ mathbfv parallel mathbfa

  2. Tahap kedua adalah sebagai berikut:

     mathbfa mathbfv mathbfa= mathbfa( mathbfv perp cdot mathbfa)+ mathbfa mathbfv parallel mathbfa


    Anggota pertama hanyalah sebuah komponen  mathbfv sepanjang  mathbfa , yaitu komponen  mathbfv tegak lurus ke pesawat. Dengan kata lain, istilah pertama itu adil  mathbfv pelaku .

     mathbfa mathbfv mathbfa= mathbfv pel+ mathbfa mathbfv parallel mathbfa


    Sejak  mathbfa dan (lagi) tegak lurus, produk geometris mereka hanyalah produk eksternal mereka, yaitu, Anda dapat menukar mereka dan mengubah tanda.

  3. Akhirnya, langkah terakhir membalik tanda:


    Artinya, kita melihat komponen itu tegak lurus terhadap pesawat, terbalik, tetapi bagian paralelnya tetap sama!

Catatan
Panjangnya tidak terlalu penting, jadi di bawah ini kita abaikan, tetapi jika bukan vektor satuan, maka kita harus membaginya dengan panjangnya dan rumusnya berubah menjadi , yang lebih seperti "produk berlapis", yang seharusnya Anda terbiasa.

3.5. Dua refleksi adalah giliran: situasi dalam 2D


Ternyata jika kita melamar dua refleksi berturut-turut (pertama dengan vektor) dan kemudian dengan vektor ), lalu kita dapatkan rotasi dua kali sudut antara vektor dan .

Kami dapat menunjukkan setiap tahap refleksi selanjutnya dalam grafik di bawah ini:


Anda juga dapat mengubah vektor di artikel asli. , dan , tetapi konfigurasi awal vektor pada grafik (klik pada tombol "Reset Vector Positions") terutama dengan jelas menunjukkan mengapa rotasi sebagai akibatnya terjadi pada sudut ganda . Konfigurasi bagus lainnya adalah pengaturan sebagai dan kapak dan .

3.6. Dua refleksi adalah giliran: situasi dalam 3D


Dalam kasus vektor 3D dapat dibagi menjadi dua bagian, salah satunya terletak pada bidang yang diberikan dan , dan yang lainnya terletak di luar bidang (tegak lurus terhadapnya). Seperti yang ditunjukkan pada grafik di bawah ini, ketika vektor dipantulkan oleh masing-masing bidang, bagian luarnya tetap sama. Sedangkan untuk bagian dalam, kami kembali dalam 2D, dan hanya berputar dua kali sudutnya!


3.7. Rotor


Dari sudut pandang produk geometris, dua refleksi cukup sesuai dengan yang berikut:


Kami memanggil rotor karena dikalikan dengan di kedua sisi vektor, kami melakukan rotasi ( Apakah sama dengan , hanya di bagian-bivector terbalik).

Aplikasi rotor untuk kedua sisi vektor memutar vektor ini di bidang vektor dan dua kali sudut antara dan .

Dan itu saja!

Perbandingan rotor 3D dan angka empat


Anda dapat melihat bahwa rotor 3D sangat mirip dengan angka empat:



Bahkan, kode / matematika hampir sama! Perbedaan utamanya adalah itu , dan diganti oleh , dan tetapi pada dasarnya mereka bekerja sama. Perbandingan kode dapat ditemukan di sini . Saya tidak mengimplementasikan semuanya, misalnya log / exp untuk interpolasi, tetapi mereka cukup sederhana untuk dibuat.


Namun, seperti yang telah kita lihat, rotor 3D adalah konsep tiga dimensi yang tidak memerlukan penggunaan "putaran ganda empat dimensi" atau "proyeksi stereografi" untuk visualisasi. Mencoba memvisualisasikan angka empat yang berjalan dalam 4D untuk menjelaskan rotasi 3D agak mirip dengan mencoba memahami gerakan planet dari sudut pandang geosentris. Yaitu pendekatan ini terlalu rumit karena kita melihatnya dari sudut pandang yang salah.

Seperti yang kita lihat, pemodelan rotasi seperti yang terjadi di dalam pesawat, bukan di sekitar vektor, banyak membantu kita. Sebagai contoh, kuadrat dari bivektor basis memberi , seperti angka empat dasar ( ):


Mengalikan dua bivektor satu sama lain memberikan bivektor ketiga, tetapi sebenarnya sepele, dan kita tidak perlu mengingat bahwa :



(Perhatikan bahwa kami menggunakan )

Properti ini adalah hasil dari produk geometris, dan tidak muncul dari mana pun!

Bacaan tambahan


(Omong-omong, dalam aljabar geometris tidak hanya ada rotor, tetapi juga hal-hal keren lainnya!)

  • Aljabar Linier dan Geometris oleh Macdonald [ tautan ke Amazon ]

    Sumber yang sangat baik, sangat jelas dan dapat dimengerti, karena tersirat bahwa itu akan menggantikan buku teks aljabar linier untuk siswa.
  • Aljabar Geometris Untuk Ilmu Komputer oleh Dorst et al. [ tautan ke Amazon ]

    Sumber yang bagus, karena pemrograman terkadang memungkinkan Anda untuk lebih memahami subjek.
    Catatan: dalam buku ini, penulis memperjelas bahwa aljabar geometris lebih lambat dari angka empat (dan sejenisnya ...). Bahkan, ia harus memiliki kira-kira kode yang sama (mis., Anda tidak boleh menulis kode untuk aljabar geometris, membuat struct umum yang dapat berisi semua jenis vektor k yang mungkin, cukup tulis, jika perlu, satu struct untuk setiap jenis k-vektor Artinya, untuk mengganti angka empat, Anda dapat menulis satu struktur Bivector dan satu struktur Rotor, yaitu Scalar + Bivector).

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


All Articles