- Rotasi 3D memiliki keunggulan berbeda tergantung cara representasinya; rotation matrix nyaman untuk transformasi titik, tetapi interpolasi, komposisi, dan perataan membutuhkan alat tersendiri
- Euler angles mudah ditangani manusia, tetapi dapat menimbulkan masalah seperti gimbal lock, kecepatan sudut yang tidak konstan, dan interpolasi linear yang melewatkan jalur terpendek
- Unit quaternion menyediakan interpolasi jalur terpendek berkecepatan konstan melalui slerp, tetapi karena bukan ruang vektor, authoring langsung, perkalian skalar, dan perhitungan rata-rata tidak intuitif
- Exponential/logarithmic map menghubungkan vektor axis/angle dan rotation matrix untuk menyusun interpolasi jalur terpendek 2D dan 3D dalam bentuk
R(t) = exp(t log(R1 R0^-1)) R0 - Rata-rata beberapa rotasi dapat mengalami catastrophic cancellation jika hanya memakai rata-rata axis/angle sederhana; Karcher mean mencari rotasi yang meminimalkan jumlah kuadrat jarak sudut secara iteratif dan menghasilkan hasil yang lebih konsisten
Kelebihan dan kekurangan tiap representasi rotasi
- Rotasi 3D memiliki banyak representasi, dan pilihan yang tepat berbeda tergantung apakah yang dilakukan adalah transformasi, authoring, interpolasi, atau perhitungan rata-rata
-
Rotation matrix
- Representasi aljabar linear yang paling langsung adalah orthonormal 3x3 matrix dengan determinan positif
- Tiga kolom pada rotation matrix menunjukkan ke mana sumbu x, y, z berpindah setelah rotasi
- Transformasi titik dapat diproses dengan perkalian matriks, dan dapat dikomposisikan dengan transformasi linear lain melalui perkalian matriks
- Alasan memakai rotation matrix saat menggambar ke layar adalah karena hanya diperlukan satu perkalian matriks untuk memindahkan titik dari world-space ke screen
- Rotation matrix bukan ruang vektor, sehingga menjumlahkan dua rotation matrix tidak akan menghasilkan rotation matrix lagi
- Jika dua rotation matrix diinterpolasi secara linear, bukan hanya rotasi, scaling juga bisa ikut tercampur
-
Euler angles
- Euler angles menentukan tiga rotasi terhadap sumbu x, y, z, dan juga disebut pitch, yaw, roll
- Urutan penerapan tiga rotasi penyusun berbeda tergantung konvensi, dan contoh ini memakai urutan x, y, z
- Mudah dipahami manusia dan sering dipakai untuk authoring rotasi, tetapi interpolasi sederhana dapat menghasilkan keluaran yang tidak diinginkan
- Gimbal lock, yaitu ketika satu rotasi penyusun membuat dua sumbu rotasi lainnya menjadi sejajar, merupakan sebuah singularity
- Pada singularity, mengubah salah satu dari dua sudut yang terkunci dapat menghasilkan rotasi keluaran yang sama
- Jika jalur interpolasi mencapai singularity, derajat kebebasan untuk merepresentasikan posisi saat ini bertambah, dan saat memilih representasi arbitrer untuk melanjutkan, interpolasi keluaran dapat menjadi diskontinu
- Karena setiap sudut penyusun bersifat cyclic, interpolasi linear tidak selalu memilih jalur terpendek antara dua rotasi
- Jika jalurnya tidak melewati singularity, interpolasi berjalan mulus, dan jika tidak perlu merepresentasikan “straight up” dan “straight down”, keterbatasannya dapat dihindari
-
Quaternions
- Unit quaternion digunakan sebagai alat standar untuk komposisi dan interpolasi rotasi
- spherical linear interpolation, atau slerp, memilih jalur terpendek berkecepatan konstan antara dua quaternion
- Unit quaternion juga bukan ruang vektor, sulit di-author langsung oleh manusia, dan perhitungan interpolasinya bisa memiliki biaya komputasi
- Konsep intuitif untuk perkalian skalar atau rata-rata juga kurang
- Quaternion melakukan double-cover terhadap ruang rotasi, sehingga dalam kasus tertentu
Q(1)dapat menuju-Q1
-
Axis/angle
- Rotasi axis/angle direpresentasikan sebagai vektor 3D real
- Arah vektor menentukan sumbu rotasi, sedangkan besarnya menentukan sudut rotasi terhadap sumbu tersebut
- Ditulis sebagai
θu, denganuadalah vektor satuan danθadalah sudut rotasi - Karena berupa vektor 3D, ia membentuk ruang vektor sehingga penjumlahan, scaling, dan interpolasi dimungkinkan
- Menginterpolasi dua rotasi axis/angle secara linear dapat menghasilkan gerakan mulus dengan kecepatan sudut konstan
- Namun, bergantung pada representasi axis/angle yang dipilih untuk rotasi target, interpolasi linear mungkin gagal memilih jalur terpendek
- Seperti quaternion, vektor axis/angle juga melakukan double-cover terhadap ruang rotasi
Exponential map dan logarithmic map
- Jika berbagai representasi rotasi dapat dikonversi bolak-balik sesuai tujuan, keunggulan tiap representasi dapat digunakan bersama
- Karena transformasi akhir membutuhkan rotation matrix, matriks dijadikan canonical form
- Exponential map adalah fungsi yang menerima objek rotasi dan mengembalikan rotation matrix yang ekuivalen
- Logarithmic map adalah fungsi padanannya yang menerima rotation matrix dan mengembalikannya ke objek rotasi
- Di sini dibahas map
expdanlogyang menghubungkan rotation matrix dengan vektor axis/angle
Intuisi dari axis/angle 2D
- Dalam 2D, hanya ada satu sumbu rotasi yang mengarah keluar dari bidang, sehingga rotasi axis/angle dapat direpresentasikan dengan satu sudut
θ - Titik 2D
pyang diputar sebesarθmenjadipθdapat ditulis sebagai berikutpθ = p cosθ + Jp sinθJadalah matriks yang memutar vektor 2D sebesar 90 derajat
Jadalah[[0, -1], [1, 0]], dan karenaJ² = -I, menerapkannya dua kali menghasilkan rotasi 180 derajat- Mengembangkan persamaan ini menghasilkan rotation matrix 2D standar
[[cosθ, -sinθ], [sinθ, cosθ]]
Exponential map dan logarithmic map 2D
- Dalam rumus Euler untuk bilangan kompleks
e^(iθ) = cosθ + i sinθ,iberperan sebagai quarter turn; dalam bentuk matriks 2D,Jmemainkan peran yang sama - Jika matriks
A = θJdimasukkan ke Taylor series fungsi eksponensial, perhitungan yang sama dapat dilakukan dengan penjumlahan, perkalian, dan scaling matriks - Hasil pengembangan memunculkan Taylor series dari
sinθdancosθ, sehingga diperoleh persamaan berikute^(θJ) = [[cosθ, -sinθ], [sinθ, cosθ]]
- Karena itu, exponential map 2D mengubah sudut
θmenjadi rotation matrix yang sesuai - Logarithmic map didefinisikan sebagai invers dari exponential map
- Jika
R = exp(θJ), makalog(R) = θJ θ = atan2(R21, R11)dapat dipakai untuk memulihkannya
- Jika
- Exponential map tidak injective
- Karena
exp(θJ) = exp((θ + 2π)J), menambahkan satu putaran penuh tetap menghasilkan rotation matrix yang sama - Logarithmic map didefinisikan agar mengembalikan sudut terkecil yang sesuai dengan rotation matrix tersebut
atan2mengimplementasikan definisi ini
- Karena
Interpolasi berbasis exp/log
- Dua sudut rotasi 2D
θ0,θ1dapat diinterpolasi linear sederhana lalu dibuatkan rotation matrix - Namun, jika jarak
θ0danθ1lebih besar dariπ, sifat cyclic sudut tidak tercermin, sehingga jalur panjang yang dipilih - Interpolasi berbasis exp/log menghitung rotasi perpindahan langsung dari dua rotation matrix
R0,R1R1 R0^-1adalah rotasi yang terlebih dahulu membatalkanR0, lalu menerapkanR1log(R1 R0^-1)memberikan sudut terkecil dariR0keR1- Rotasi axis/angle ini di-scale dengan
t, lalu diubah kembali menjadi matriks denganexp
- Rumus interpolasi akhirnya adalah sebagai berikut
R(t) = exp(t log(R1 R0^-1)) R0R(0) = R0,R(1) = R1
- Dalam 2D, selisih sudut dapat diperiksa langsung, tetapi metode ini tergeneralisasi ke 3D dan dimensi arbitrer tanpa perubahan
Axis/angle 3D dan skew-symmetric matrix
- Dalam 3D juga, rotation matrix dapat dibuat dengan mengeksponensialkan axis/angle
θu - Intinya adalah menemukan transformasi quarter turn dengan vektor satuan
usebagai sumbu - Cross product
u × pdidefinisikan sebagai vektor yang tegak lurus terhadap bidang yang dibentukudanp, tetapi juga dapat ditafsirkan sebagai quarter turn darip⊥, yaitu proyeksipke bidang yang tegak lurus terhadapu - Matriks
ûdapat dibuat untuk menghasilkan keluaran yang sama denganu × pû = [[0, -uz, uy], [uz, 0, -ux], [-uy, ux, 0]]ûp = u × p
- Karena
ûᵀ = -û,ûadalah skew-symmetric matrix Jpada 2D juga skew-symmetric dan merepresentasikan cross product 2D, sehingga struktur yang sama berlanjut- Penjumlahan dan perkalian skalar dari skew-symmetric matrix juga tetap skew-symmetric, sehingga sifat ruang vektor axis/angle terjaga dalam representasi matriks ini
- Identitas
û^(k+2) = -û^kberasal dari interpretasi geometris bahwa menerapkan cross product tiga kali memutarp⊥tiga kali quarter turn, yang sama dengan quarter turn negatif
Exponential map 3D: Rodrigues’ formula
- Dari rotasi axis/angle
θu, buatθûlalu eksponensialkan untuk mendapatkan rotation matrix 3D - Dengan Taylor series dan
û^(k+2) = -û^k, diperoleh persamaan berikute^(θû) = I + sin(θ)û + (1 - cos(θ))û²
- Persamaan ini dikenal sebagai Rodrigues’ formula
- Jika
θ = 0, makae^(0û)p = p, sehingga titik tetap tidak berubah - Jika
θ = π/2, hasilnya adalahu × p + p∥, yaitu quarter rotation - Jika
θ = π, hasilnya adalah-p⊥ + p∥, yaitu half rotation - Matriks ini orthonormal
- Kondisi
AᵀA = Idiperiksa denganûᵀ = -ûdanû^(k+2) = -û^k
- Kondisi
- Determinan bernilai 1 pada
θ = 0, tidak pernah ada kasus determinan menjadi 0, dan karenaexpkontinu terhadapθdanû, nilainya tidak dapat menjadi negatif - Karena itu,
exp(θû)adalah rotation matrix 3D
Logarithmic map 3D
- Exponential map 3D juga tidak injective, sehingga logarithmic map 3D didefinisikan agar mengembalikan rotasi axis/angle dengan besar terkecil yang sesuai dengan matriks yang diberikan
- Dari
R = exp(θû) = I + sin(θ)û + (1 - cos(θ))û², sudut rotasi dapat diperoleh dengan mengambil trace- Trace adalah jumlah diagonal
tr(I) = 3- Karena
ûskew-symmetric, jumlah diagonalnya 0 tr(û²) = -2- Maka
tr(R) = 1 + 2cosθ θ = arccos((tr(R) - 1) / 2)
- Sumbu rotasi dipulihkan dengan mengantisimetri
RR - Rᵀ = 2 sin(θ)ûû = (R - Rᵀ) / (2 sinθ)u = 1/(2 sinθ) [R32 - R23, R13 - R31, R21 - R12]ᵀ
- Dengan demikian, seluruh logarithmic map dari rotation matrix 3D kembali ke axis/angle selesai
Hasil interpolasi 3D
- Dalam 3D juga, rumus interpolasi yang sama seperti 2D dapat diterapkan apa adanya
R(t) = exp(t log(R1 R0^-1)) R0
- Interpolasi ini mempertahankan keunggulan rotasi axis/angle sekaligus selalu memilih jalur terpendek
- Dengan Euler angles, contoh yang sama mungkin tidak terlihat mulus
Rata-rata beberapa rotasi
- Jika memakai quaternion, interpolasi yang baik dapat diperoleh tanpa matematika matriks exp/log, sehingga masalah interpolasi bisa terselesaikan
- Salah satu pekerjaan yang dapat dilakukan lebih mudah dengan rotasi axis/angle adalah menghitung rata-rata beberapa rotation matrix
- Cara paling sederhana adalah mengubah setiap matriks ke axis/angle, merata-ratakan vektornya, lalu mengubahnya kembali
- Cara ini valid, tetapi dapat menimbulkan perilaku yang tidak intuitif
- Secara khusus, menggabungkan vektor axis/angle dapat menyebabkan catastrophic cancellation
- Contohnya adalah ketika
[π, 0, 0]dan[-π, 0, 0]dirata-ratakan menjadi 0 - Kedua nilai tersebut adalah rotasi yang ekuivalen, tetapi hasil rata-rata 0 tidak mewakili kedua rotasi tersebut
- Contohnya adalah ketika
Karcher mean
- Rata-rata titik pada bidang dapat dipandang sebagai titik yang meminimalkan total jarak kuadrat ke semua titik
- Prosedur untuk menemukannya dengan optimisasi iteratif adalah sebagai berikut
- Pilih estimasi awal
x̄ ∈ R² - Hitung translation
ui = xi - x̄dari tiap titik ke estimasi - Hitung rata-rata vektor
u = (1/n) Σ ui - Bergerak ke arah rata-rata dengan
x̄ = x̄ + τu - Ulangi selama
|u| > ε
- Pilih estimasi awal
- Ide yang sama dapat diterapkan pada rotasi
R0, ..., Rn- Pilih estimasi awal rotasi
R̄ ∈ R^(3×3) - Untuk tiap matriks, hitung axis/angle
ui = log(Ri R̄^-1)dari estimasi ke rotasi tersebut - Hitung rata-rata vektor
u = (1/n) Σ ui - Bergerak ke arah rotasi rata-rata dengan
R̄ = exp(τu) R̄ - Ulangi selama
|u| > ε
- Pilih estimasi awal rotasi
- Hasil algoritme ini adalah Karcher mean
- Karcher mean adalah rotasi yang meminimalkan jarak sudut kuadrat ke semua rotasi lainnya
- Karena tidak terkena catastrophic cancellation, ia selalu konvergen ke rotasi tengah yang bukan nol
- Hasil rata-rata axis/angle sederhana dan Karcher mean sering kali mirip, tetapi Karcher mean menunjukkan perilaku yang lebih konsisten
Hubungan quaternion dan exp/log
- Bagian ini mengasumsikan pengetahuan tentang quaternion
- Seperti eksponensial bilangan kompleks yang ekuivalen dengan eksponensial skew-symmetric 2D matrix, eksponensial quaternion ekuivalen dengan eksponensial skew-symmetric 3D matrix
- Dalam 2D, dari rotasi axis/angle
θdibuat pure-imaginary complex numberiθ, lalu dieksponensialkane^(iθ) = cosθ + i sinθ- Hasilnya adalah bilangan kompleks yang, saat dikalikan dengan titik, memutarnya sebesar
θ - Karena norm-nya selalu 1, rotasi 2D dapat direpresentasikan sebagai unit-norm complex number
- Dalam 3D, dari vektor rotasi axis/angle
udapat dibuat pure-imaginary quaternionq = ux i + uy j + uz k - Dengan aturan perkalian quaternion,
q² = -||q||² = -θ², yang mirip dengan identitas yang digunakan pada skew-symmetric matrix - Hasil eksponensialnya adalah sebagai berikut
e^q = cosθ + (q/θ) sinθ- Hampir sama dengan rumus 2D, tetapi imaginary axis-nya bukan satu melainkan tiga
- Rotasi axis/angle 3D dikonversi menjadi unit-norm quaternion
- Jika rotation matrix tidak diperlukan, quaternion exponential map adalah pilihan yang mudah dihitung
- Quaternion logarithmic map juga sederhana
θ = arccos(Re(q))u = Im(q) / sinθ
- Untuk memutar titik
pdengan quaternionq, hitung conjugationq p q^-1- Titik direpresentasikan sebagai pure-imaginary quaternion
p = px i + py j + pz k - Secara teknis conjugation memutar sebesar
2θterhadap sumbuu, jadi cukup tetapkan|u| = θ/2di awal
- Titik direpresentasikan sebagai pure-imaginary quaternion
Bacaan lebih lanjut
- Untuk materi belajar quaternion, lihat quaternions dari eater.net
- Alasan geometric algebra lebih intuitif dibahas dalam artikel Marc ten Bosch
- Mempelajari SO(3), struktur aljabar rotasi 3D, membantu memahami hubungan axis/angle, quaternion, dan double-cover dengan lebih baik
- Ada video terkait yang menjelaskan secara visual hubungan SO(3), SU(2), quaternion, dan axis/angle
- Halaman Wikipedia SO(3) membahas axis/angle, topology, SU(2), quaternion, dan koneksinya dengan Lie algebra
- Ruang vektor skew-symmetric matrix membentuk so(3), yaitu Lie algebra yang berkaitan dengan
SO(3)
1 komentar
Komentar Hacker News
Korespondensi grup Lie/aljabar Lie adalah salah satu konsep paling keren yang seharusnya diajarkan di sekolah. Ini adalah peta eksponensial dan peta logaritma yang disebut dalam artikel, tetapi muncul dalam bentuk yang jauh lebih mudah digunakan kembali
Jika kita menangkap objek abstrak yang ingin diperlakukan seperti rotasi 3D tanpa terseret ke detail koordinat, itulah grup Lie, dan jika dari sana kita menurunkan representasi koordinat yang bekerja dengan baik, itulah aljabar Lie yang bersesuaian
Setelah itu, cara berpindah antara koordinat dan objek abstrak, cara mengomposisikannya, dan lain-lain hampir didapat secara gratis, dan dalam kasus yang sering ditemui di engineering, interpolasi serta perataan rata-rata juga bisa ditangani dengan cukup masuk akal
Jika sebuah masalah bisa dinyatakan sebagai kombinasi grup Lie, kita bisa menghemat banyak pekerjaan yang akan memakan waktu lama jika harus mencari sendiri setiap aljabarnya
Tentu objeknya perlu punya konsep perubahan halus dan sedikit struktur tambahan, dan dalam proses bolak-balik itu kadang muncul masalah komponen terhubung, tetapi justru itu juga alasan kenapa hasil yang sudah dikenal mudah dimanfaatkan
Minggu yang panjang ini hampir selesai, dan ternyata yang saya butuhkan untuk beristirahat adalah memutar sapi dengan slider
Sudah lama saya kesal karena banyak software 3D tidak memakai antarmuka Arcball untuk rotasi
Produk Autodesk seperti 3DSmax dan Maya memakainya, tetapi Blender dan OpenSCAD tidak, dan bahkan saat bekerja di Roblox saya tidak berhasil meyakinkan PM karena pengguna toh tetap bisa bertahan dengan cara lama
Arcball berbasis quaternion dan memakai fungsi eksponensial untuk interpolasi, memungkinkan rotasi apa pun dengan satu drag, tidak mengalami gimbal lock, dan punya sifat bahwa jika Anda menyeret membentuk loop tertutup, posisinya kembali ke titik awal
Ini bisa dibuktikan secara matematis dari fakta bahwa quaternion satuan adalah 2-cover dari SO(3), mirip seperti bilangan kompleks satuan yang merepresentasikan rotasi pada lingkaran secara tepat
Implementasi referensi quaternion/Arcball yang bisa dicoba langsung: https://romankogan.net/math/arcball_js/index.html
Kodenya adalah Java dengan banyak komentar dan menjalankan library Processing di JavaScript lewat ProcessingJS
Tangan dan tubuh bisa memahami quaternion lebih dulu daripada otak, jadi kalau Anda membuat software 3D, akan bagus sekali jika memakai pendekatan ini
Arcball: http://courses.cms.caltech.edu/cs171/assignments/hw3/hw3-not...
Quaternion untuk rotasi: https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotati...
Arcball di Processing: https://romankogan.net/math/arcball_js/index.html
Saya sedang membukanya di mobile sekarang, dan https://asliceofrendering.com/camera/2019/11/30/ArcballCamer... membantu saya memahami Arcball
Dalam konteks ini saya kurang paham kenapa orang begitu menyukai quaternion. Sulit mengatakan bahwa matriks kurang intuitif dibanding quaternion
Matriks bekerja pada vektor, dan rotasi juga bekerja pada vektor, jadi saya tidak tahu apa yang bisa lebih alami daripada melihat rotasi sebagai matriks
Eksponensial matriks juga intuitif jika dikaitkan dengan persamaan diferensial biasa. Solusi
dx/dt = Axadalahexp(t A), dan jika A antisimetri maka perubahan x selalu ortogonal terhadap x, sehingga menjadi rotasi yang tidak mengubah panjangGrup Lie/aljabar Lie menggeneralisasi ini secara besar-besaran, tetapi intinya adalah bahwa kita menghasilkan rotasi dengan terus-menerus menciptakan perubahan yang ortogonal, dan peta eksponensial menjelaskan proses itu. Gambaran ini terasa jauh lebih geometris dan intuitif
Menurut saya kelebihan quaternion adalah bahwa dengan kertas dan pena, ia lebih mudah ditangani daripada menghitung perkalian matriks yang sama secara manual
Secara pribadi saya merasa ia intuitif dalam arti yang mirip dengan bilangan kompleks. Awalnya terasa aneh, tetapi sekarang lebih sederhana untuk dipakai dan dipikirkan dibanding alternatif yang saya kenal
Sifat ini sangat penting dalam pekerjaan grafis seperti animasi atau menghitung frame sepanjang kurva spline 3D
Mirip seperti menangani rotasi 2D dengan bilangan kompleks, mengalikan dua bilangan kompleks akan mengomposisikan rotasi, dan di 2D bentuknya adalah penjumlahan argumen. Demikian juga, mengalikan dua quaternion bisa mengomposisikan rotasi 3D, dan jauh lebih efisien daripada perkalian matriks 3x3
Untuk intuisi, quaternion sangat dekat dengan representasi sumbu-sudut, yang sama dengan aljabar Lie so(3)
Dari sudut pandang bekerja pada vektor, berbagai parameterisasi rotasi bisa dipandang sebagai implementasi dari sifat abstrak
Rotationyang sama. Terlepas dari apakah implementasi internalnya matriks, quaternion, vektor Euler, sudut Euler, atau vektor Gibbs, rotasi tetap bekerja pada vektor dan dikomposisikan dengan cara yang samaKuaternion satuan adalah grup Lie, dan jika ingin sesuatu yang bisa dijumlahkan begitu saja, kita perlu melihat aljabar Lie dari kuaternion penuh yang merepresentasikan kecepatan rotasi. Ini setara dengan merepresentasikan kecepatan rotasi sumbu-sudut
Membandingkan kuaternion satuan dengan sumbu-sudut agak meleset secara kategori; kuaternion satuan lebih tepat dibandingkan dengan matriks rotasi, sedangkan kuaternion penuh lebih tepat dibandingkan dengan sumbu-sudut
Keuntungan memakai kuaternion adalah pemetaan eksponensial dapat dihitung dengan mudah, tetapi saat memakai kuaternion, matriks rotasi hampir tidak diperlukan. Seperti di artikel, rotasi bisa dihitung dengan
pqp^-1Menurut saya, cara termudah memahami kuaternion adalah membaca aljabar geometri. Butuh ratusan tahun untuk menemukan kuaternion, tetapi jika memahami aljabar geometri yang sangat sederhana itu, kita bisa “menemukan ulang” kuaternion dalam hitungan menit
Tulisan yang dulu saya anggap sebagai pengantar yang bagus beberapa tahun lalu: https://crypto.stanford.edu/~blynn/haskell/ga.html
Bahkan setelah melewati berbagai formalisasi aljabar geometri, pada akhirnya kita tetap memakai rotor dan motor untuk merepresentasikan ruang SO(3)/SE(3), yang masing-masing isomorfik dengan kuaternion dan kuaternion ganda
Namun untuk tujuan itu, menurut saya matriks rotasi 3x3 dan matriks transformasi 4x4 yang dipadukan dengan pemetaan eksponensial tetap jauh lebih berguna. Kuaternion memang lebih hemat ruang penyimpanan dan lebih cepat dikalikan satu sama lain, tetapi untuk mentransformasikan titik, matriks lebih cepat, dan efisiensi keseluruhan bergantung pada situasi
Salah satu hal keren yang saya pelajari di universitas adalah bahwa jika operator
+didefinisikan ulang agar sesuai dengan perubahan pada matriks dan ruang vektor, dan operator-agar sesuai untuk dua matriks, maka state filter Kalman bisa langsung memuat matriks rotasiDengan cara ini, rotasi bisa diestimasi tanpa perlu khawatir soal gimbal lock
https://openslam-org.github.io/MTK
+di ruang singgung cukup umum, bukan hanya pada filter Kalman tetapi juga pada optimisasi nonlinier secara umum. Library Ceres juga mendukung ini lewatLocalParameterizationIni benar-benar bagus, dan bukan cuma bagian soal sapi yang bagus
Saya terutama suka bahwa metode-metode ini pada akhirnya menghitung matriks rotasi standar. Jika harus memutar sejuta vektor, kita cukup melakukan komputasi menariknya sekali saja, lalu setelah itu menjalankan pipeline perkalian matriks yang sangat dioptimalkan
Blognya keren, tetapi lalu saya mengklik profil penulis untuk melihat tulisan lain dan menemukan kalimat “sekitar tahun 2010 saya pertama kali mengenal pemrograman saat berusia 9 tahun”
Pada tahun 2010 saya berusia 13 tahun dan sedang berusaha memasukkan matematika dan sains tingkat sekolah menengah ke kepala saya
Setiap kali melihat tulisan keren tentang grafika komputer, saya merasa itu ditulis oleh seseorang yang lebih muda dari saya dan jauh lebih berbakat, dan saya jadi sangat minder
Hanya saja saya tidak terlalu bisa memberi saran soal bagaimana melakukannya. Saya terus melakukannya hanya karena saya benar-benar menyukainya. Meski begitu, latihan yang lebih terstruktur sepertinya juga mungkin berhasil
Saat mencari cara menghitung rata-rata dari beberapa rotasi, saya menemukan https://mathweb.ucsd.edu/~sbuss/ResearchWeb/spheremean/paper...
Metode dalam tulisan ini tampak jauh lebih mudah daripada paper itu, setidaknya untuk tingkat matematika saya
Rata-rata adalah operasi yang bisa dilakukan dengan penjumlahan, dan dalam penjumlahan urutan komposisi tidak penting. Tetapi rotasi tidak komutatif, jadi konsep rata-rata seperti yang biasa kita pahami tidak bisa langsung diterapkan
Pegang ponsel dan putar layarnya 180° hingga menjauh dari Anda, lalu putar 90° searah jarum jam relatif terhadap tanah, maka kameranya akan menghadap ke kiri. Sebaliknya, jika dua rotasi yang sama dilakukan dalam urutan terbalik, kameranya akan menghadap ke kanan
Tidak ada satu jawaban tunggal untuk ke mana kamera harus menghadap dalam “rata-rata” dari dua rotasi ini; itu bergantung pada sifat apa yang diinginkan dari rata-rata tersebut
https://news.ycombinator.com/item?id=40333541
Intuisi utamanya adalah bahwa penjumlahan adalah translasi, sedangkan perkalian adalah rotasi. Jadi untuk translasi rata-rata kita bisa memakai rata-rata aritmetika, dan untuk rotasi rata-rata kita bisa memakai rata-rata geometri
Butuh waktu lama bagi saya untuk menyadari bahwa dalam matematika pun orang menciptakan abstraksi, mirip seperti ketika kita memikirkan abstraksi dalam rekayasa perangkat lunak
Dulu ketika kecil saya bingung mengapa orang menciptakan bilangan imajiner, dan sebenarnya apa arti matriks itu
Baru belakangan saya paham bahwa representasi seperti ini memang dirancang. Dengan menciptakan sesuatu seperti bilangan imajiner, beberapa perhitungan menjadi lebih mudah, dan dengan menuliskan persamaan linear sebagai matriks, penalarannya jauh lebih mudah daripada menuliskan semuanya satu per satu
Kelihatannya memang jelas, tetapi tidak ada yang pernah menjelaskannya seperti ini kepada saya
Ruang vektor, gelanggang, ruang metrik, dan kategori juga demikian; matematika penuh dengan antarmuka sebagai pola desain
Hanya saja, antarmuka dalam matematika lebih dekat ke type class daripada pewarisan dalam pemrograman. Karena himpunan/tipe yang sama pun bisa menjadi grup dengan beberapa cara berbeda