1 poin oleh GN⁺ 2024-06-16 | 1 komentar | Bagikan ke WhatsApp
  • 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, dengan u adalah 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 exp dan log yang 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 p yang diputar sebesar θ menjadi dapat ditulis sebagai berikut
    • pθ = p cosθ + Jp sinθ
    • J adalah matriks yang memutar vektor 2D sebesar 90 derajat
  • J adalah [[0, -1], [1, 0]], dan karena J² = -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θ, i berperan sebagai quarter turn; dalam bentuk matriks 2D, J memainkan peran yang sama
  • Jika matriks A = θJ dimasukkan ke Taylor series fungsi eksponensial, perhitungan yang sama dapat dilakukan dengan penjumlahan, perkalian, dan scaling matriks
  • Hasil pengembangan memunculkan Taylor series dari sinθ dan cosθ, sehingga diperoleh persamaan berikut
    • e^(θ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), maka log(R) = θJ
    • θ = atan2(R21, R11) dapat dipakai untuk memulihkannya
  • 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
    • atan2 mengimplementasikan definisi ini

Interpolasi berbasis exp/log

  • Dua sudut rotasi 2D θ0, θ1 dapat diinterpolasi linear sederhana lalu dibuatkan rotation matrix
  • Namun, jika jarak θ0 dan θ1 lebih 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, R1
    • R1 R0^-1 adalah rotasi yang terlebih dahulu membatalkan R0, lalu menerapkan R1
    • log(R1 R0^-1) memberikan sudut terkecil dari R0 ke R1
    • Rotasi axis/angle ini di-scale dengan t, lalu diubah kembali menjadi matriks dengan exp
  • Rumus interpolasi akhirnya adalah sebagai berikut
    • R(t) = exp(t log(R1 R0^-1)) R0
    • R(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 u sebagai sumbu
  • Cross product u × p didefinisikan sebagai vektor yang tegak lurus terhadap bidang yang dibentuk u dan p, tetapi juga dapat ditafsirkan sebagai quarter turn dari p⊥, yaitu proyeksi p ke bidang yang tegak lurus terhadap u
  • Matriks û dapat dibuat untuk menghasilkan keluaran yang sama dengan u × p
    • û = [[0, -uz, uy], [uz, 0, -ux], [-uy, ux, 0]]
    • ûp = u × p
  • Karena ûᵀ = -û, û adalah skew-symmetric matrix
  • J pada 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) = -û^k berasal dari interpretasi geometris bahwa menerapkan cross product tiga kali memutar p⊥ 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 berikut
    • e^(θû) = I + sin(θ)û + (1 - cos(θ))û²
  • Persamaan ini dikenal sebagai Rodrigues’ formula
  • Jika θ = 0, maka e^(0û)p = p, sehingga titik tetap tidak berubah
  • Jika θ = π/2, hasilnya adalah u × p + p∥, yaitu quarter rotation
  • Jika θ = π, hasilnya adalah -p⊥ + p∥, yaitu half rotation
  • Matriks ini orthonormal
    • Kondisi AᵀA = I diperiksa dengan ûᵀ = -û dan û^(k+2) = -û^k
  • Determinan bernilai 1 pada θ = 0, tidak pernah ada kasus determinan menjadi 0, dan karena exp kontinu 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 R
    • R - 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

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| > ε
  • 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| > ε
  • 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 number , lalu dieksponensialkan
    • e^(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 u dapat dibuat pure-imaginary quaternion q = 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 p dengan quaternion q, hitung conjugation q p q^-1
    • Titik direpresentasikan sebagai pure-imaginary quaternion p = px i + py j + pz k
    • Secara teknis conjugation memutar sebesar terhadap sumbu u, jadi cukup tetapkan |u| = θ/2 di awal

Bacaan lebih lanjut

1 komentar

 
GN⁺ 2024-06-16
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

    • Begitu melihat banyak angka, mata saya langsung buram, tapi sapinya benar-benar lucu
    • Rasanya ini sangat cocok dijadikan game iOS cash-cow dengan usaha minim
  • 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 penasaran kenapa saat drag dari titik seperti sisi kanan, bukan dari tengah, rasanya jauh lebih buruk. Terasa seperti tersangkut dan kadang meloncat; kalau titik acuan untuk menghitung rotasi memang berubah, menurut saya maknanya harus terlihat secara visual di layar
    • Saya penasaran apakah ini bisa dibuat berjalan juga di mobile
      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 = Ax adalah exp(t A), dan jika A antisimetri maka perubahan x selalu ortogonal terhadap x, sehingga menjadi rotasi yang tidak mengubah panjang
    Grup 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

    • Quaternion sendiri juga sering direpresentasikan sebagai matriks, seperti matriks Pauli, dan ini banyak dipakai untuk memodelkan spin kuantum
      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
    • Artikel ini juga menjelaskan keunggulan besar quaternion dibanding matriks. Quaternion bagus untuk interpolasi, sedangkan matriks tidak
      Sifat ini sangat penting dalam pekerjaan grafis seperti animasi atau menghitung frame sepanjang kurva spline 3D
    • Dari sudut pandang komputasi, kelebihan quaternion adalah hanya memakai 4 angka alih-alih 9 angka pada matriks 3x3, dan saat menerapkan rotasi jumlah operasinya juga berkurang dengan cara serupa
    • Kelebihan utama quaternion adalah komposisi rotasi
      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 Rotation yang 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 sama
  • Kuaternion 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^-1
    Menurut 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

    • Saat memikirkan rotasi, saya masih menganggap pemetaan eksponensial sebagai pendekatan yang paling kokoh. Karena ini memungkinkan kita menangani grup Lie SO(3) dengan cara yang paling langsung, termasuk perubahan koordinat, diferensiasi, dan penanganan ruang singgung
      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
    • Saya penasaran apakah yang dimaksud dengan “kuaternion penuh” di sini adalah kuaternion imajiner murni
  • 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 rotasi
    Dengan cara ini, rotasi bisa diestimasi tanpa perlu khawatir soal gimbal lock
    https://openslam-org.github.io/MTK

    • Saya penasaran apakah maksudnya adalah menjadikan ruang singgung SO(2) sebagai state
    • Mengimplementasikan operator + di ruang singgung cukup umum, bukan hanya pada filter Kalman tetapi juga pada optimisasi nonlinier secara umum. Library Ceres juga mendukung ini lewat LocalParameterization
  • Ini 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

    • Belum terlambat. Dalam beberapa tahun terakhir saya mempelajari keterampilan yang cukup khusus secara otodidak, dan tampaknya ada perusahaan besar yang ingin membayar untuk memakainya. Usia saya sekitar 35 tahun
      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

    • Saya penasaran dengan konteks saat ingin menghitung rata-rata beberapa rotasi
      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
    • Beberapa hari lalu saya menulis komentar yang agak menyimpang tentang rotasi bidang. Di bidang, semuanya menjadi jauh lebih sederhana, dan ini особенно nyaman jika lingkungan pemrograman mendukung operasi bilangan kompleks sebagai fitur kelas satu
      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

    • Bahkan ketika mempelajari matematika yang lebih abstrak, sudut pandang ini tetap berlaku. Misalnya, grup adalah antarmuka, dan “suatu grup” bisa dipandang sebagai tipe yang memiliki operasi yang mengimplementasikan tiga sifat/metode yang dibutuhkan
      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