- 3D döndürmelerde her temsil biçiminin güçlü yanları farklıdır; nokta dönüşümleri için döndürme matrisi kullanışlıdır, ancak enterpolasyon, bileşim ve ortalama için ayrı araçlar gerekir
- Euler angles insanlar için kolaydır, ancak gimbal lock, sabit olmayan açısal hız ve en kısa yolu kaçıran doğrusal enterpolasyon sorunları doğurabilir
- Birim quaternion, slerp ile sabit hızlı en kısa yol enterpolasyonu sağlar; ancak vektör uzayı olmadığı için doğrudan yazımı, skaler çarpımı ve ortalaması sezgisel değildir
- Üstel/logaritmik haritalar, axis/angle vektörleri ile döndürme matrislerini bağlayarak
R(t) = exp(t log(R1 R0^-1)) R0biçiminde 2D ve 3D en kısa yol enterpolasyonu kurar - Birden çok döndürmenin ortalamasında yalnızca basit axis/angle ortalaması kullanmak catastrophic cancellation yaratabilir; Karcher mean ise açısal uzaklıkların kareleri toplamını en aza indiren döndürmeyi yinelemeli olarak bularak daha tutarlı sonuçlar üretir
Döndürme temsillerinin artıları ve eksileri
- 3D döndürmeler için birden fazla temsil vardır; dönüşüm, yazım/oluşturma, enterpolasyon ve ortalama alma işlemlerinden hangisini yaptığınıza göre uygun seçim değişir
-
Döndürme matrisi
- En doğrudan doğrusal cebir temsili, determinantı pozitif olan orthonormal 3x3 matrix’tir
- Döndürme matrisinin üç sütunu, döndürmeden sonra x, y, z eksenlerinin nereye taşındığını gösterir
- Nokta dönüşümü matris çarpımıyla yapılabilir ve diğer doğrusal dönüşümlerle de matris çarpımıyla bileştirilebilir
- Ekrana çizerken döndürme matrisi kullanılmasının nedeni, noktaları world-space’ten screen’e taşımak için tek bir matris çarpımının yeterli olmasıdır
- Döndürme matrisi bir vektör uzayı değildir; bu yüzden iki döndürme matrisi toplandığında sonuç yine bir döndürme matrisi olmaz
- İki döndürme matrisi doğrusal olarak enterpole edilirse döndürmenin yanı sıra scaling de karışabilir
-
Euler angles
- Euler angles, x, y, z eksenleri etrafında üç döndürme belirtir; pitch, yaw, roll olarak da adlandırılır
- Üç bileşen döndürmenin uygulanma sırası kurala göre değişir; örnek x, y, z sırasını kullanır
- İnsanların anlaması kolaydır ve döndürme yazımında sık kullanılır; ancak basit enterpolasyon istenmeyen sonuçlar üretebilir
- Bir bileşen döndürme nedeniyle diğer iki döndürme ekseninin paralel hale geldiği gimbal lock, bir singularity durumudur
- Singularity’de kilitlenen iki açıdan hangisini değiştirirseniz değiştirin aynı çıktı döndürmesi üretilebilir
- Enterpolasyon yolu bir singularity’ye ulaşırsa mevcut konumu ifade etme serbestlik derecesi artar; devam etmek için keyfi bir temsil seçildiğinde çıktı enterpolasyonu süreksiz olabilir
- Her bileşen açısı cyclic olduğu için doğrusal enterpolasyon iki döndürme arasındaki en kısa yolu her zaman seçemez
- Yol singularity’den geçmiyorsa enterpolasyon pürüzsüzdür; “straight up” ve “straight down” durumlarını ifade etmeniz gerekmiyorsa sınırlar aşılabilir
-
Quaternions
- Birim quaternion, döndürme bileşimi ve enterpolasyonu için standart araç olarak kullanılır
- spherical linear interpolation, yani slerp, iki quaternion arasındaki sabit hızlı en kısa yolu seçer
- Birim quaternion da vektör uzayı değildir; insanlar tarafından doğrudan yazılması zordur ve enterpolasyon hesaplama maliyeti doğurabilir
- Skaler çarpım veya ortalama için de sezgisel bir kavram eksiktir
- Quaternion, döndürme uzayını double-cover ettiği için bazı durumlarda
Q(1)-Q1’e gidebilir
-
Axis/angle
- Axis/angle döndürme, gerçek 3D vektörle temsil edilir
- Vektörün yönü döndürme eksenini, büyüklüğü ise o eksen etrafındaki döndürme açısını belirtir
θuolarak yazılır;ubirim vektördür,θise döndürme açısıdır- 3D vektör olduğu için vektör uzayı oluşturur; toplama, ölçekleme ve enterpolasyon yapılabilir
- İki axis/angle döndürme doğrusal olarak enterpole edilirse pürüzsüz ve sabit açısal hızlı sonuç verebilir
- Ancak hedef döndürmenin hangi axis/angle temsiliyle belirtildiğine bağlı olarak doğrusal enterpolasyon en kısa yolu seçemeyebilir
- Quaternion gibi axis/angle vektörü de döndürme uzayını double-cover eder
Üstel harita ve logaritmik harita
- Birden çok döndürme temsili arasında amaca uygun biçimde geçiş yapılabilirse her temsilin avantajları birlikte kullanılabilir
- Nihai dönüşüm için döndürme matrisi gerektiğinden matrisi canonical form olarak alırız
- exponential map, bir döndürme nesnesini alıp eşdeğer döndürme matrisini döndüren fonksiyondur
- logarithmic map, döndürme matrisini alıp döndürme nesnesine geri çeviren karşılık fonksiyondur
- Burada döndürme matrisi ile axis/angle vektörü arasında geçiş yapan
expvelogharitalarını ele alıyoruz
2D axis/angle’dan başlayan sezgi
- 2D’de döndürme ekseni düzlemin dışına bakan tek bir eksendir; bu nedenle axis/angle döndürme tek bir
θaçısıyla temsil edilebilir - 2D nokta
p’ninθkadar döndürülmüş hali olanpθşöyle yazılabilirpθ = p cosθ + Jp sinθJ, 2D vektörü 90 derece döndüren matristir
J,[[0, -1], [1, 0]]’dır veJ² = -Iolduğundan iki kez uygulandığında 180 derece döndürme olur- Bu ifade açıldığında standart 2D döndürme matrisi
[[cosθ, -sinθ], [sinθ, cosθ]]elde edilir
2D üstel harita ve logaritmik harita
- Karmaşık sayıların Euler formülü
e^(iθ) = cosθ + i sinθiçindeinasıl quarter turn rolünü oynuyorsa, 2D matris ifadesinde deJaynı rolü oynar - Üstel fonksiyonun Taylor series’ine
A = θJmatrisi koyulduğunda aynı hesaplama matris toplama, çarpma ve ölçeklemeyle yapılabilir - Açılım sonucunda
sinθvecosθTaylor series’leri ortaya çıkar ve şu ifade elde edilire^(θJ) = [[cosθ, -sinθ], [sinθ, cosθ]]
- Dolayısıyla 2D üstel harita,
θaçısını karşılık gelen döndürme matrisine dönüştürür - Logaritmik harita, üstel haritanın tersi olarak tanımlanır
R = exp(θJ)iselog(R) = θJθ = atan2(R21, R11)ile geri elde edilebilir
- Üstel harita injective değildir
exp(θJ) = exp((θ + 2π)J)olduğundan bir tam tur eklemek aynı döndürme matrisini verir- Logaritmik harita, ilgili döndürme matrisine karşılık gelen en küçük açıyı döndürecek şekilde tanımlanır
atan2bu tanımı uygular
exp/log tabanlı enterpolasyon
- İki 2D döndürme açısı
θ0,θ1basitçe doğrusal enterpole edilip ardından döndürme matrisi oluşturulabilir - Ancak
θ0veθ1birbirindenπ’den daha uzaktaysa açıların cyclic niteliği yansıtılamaz ve uzun yol seçilir - exp/log tabanlı enterpolasyon, iki döndürme matrisi
R0,R1üzerinden hareket döndürmesini doğrudan hesaplarR1 R0^-1, önceR0’ı geri alıp sonraR1’i uygulayan döndürmedirlog(R1 R0^-1),R0’danR1’e giden en küçük açıyı sağlar- Bu axis/angle döndürme
tile ölçeklenir veexpile tekrar matrise çevrilir
- Nihai enterpolasyon formülü şöyledir
R(t) = exp(t log(R1 R0^-1)) R0R(0) = R0,R(1) = R1
- 2D’de açı farkı doğrudan kontrol edilebilir, ancak bu yöntem değişiklik gerektirmeden 3D’ye ve herhangi bir boyuta genellenir
3D axis/angle ve skew-symmetric matrix
- 3D’de de axis/angle
θuüstel hale getirilerek döndürme matrisi oluşturulabilir - Temel nokta, birim vektör
u’yu eksen alan quarter turn dönüşümünü bulmaktır - Cross product
u × p,uvep’nin oluşturduğu düzleme dik bir vektör olarak tanımlanır; ancakp’ninu’ya dik düzleme izdüşümü olanp⊥için bir quarter turn olarak da yorumlanabilir u × pile aynı sonucu verenûmatrisi oluşturulabilirû = [[0, -uz, uy], [uz, 0, -ux], [-uy, ux, 0]]ûp = u × p
ûᵀ = -ûolduğundanûbir skew-symmetric matrix’tir- 2D’deki
Jde skew-symmetric’tir ve 2D cross product’ı temsil eder; dolayısıyla aynı yapı sürer - Skew-symmetric matrix’lerin toplamı ve skaler çarpımı da skew-symmetric olduğundan axis/angle vektör uzayı özelliği bu matris temsilinde de korunur
û^(k+2) = -û^közdeşliği, cross product’ı üç kez uygulamanınp⊥üzerinde üç quarter turn yapıp negatif quarter turn’e eşdeğer olması şeklindeki geometrik yorumdan gelir
3D üstel harita: Rodrigues’ formula
- Axis/angle döndürme
θu’danθûoluşturulup üstel hale getirildiğinde 3D döndürme matrisi elde edilir - Taylor series ve
û^(k+2) = -û^kkullanıldığında şu ifade türetilire^(θû) = I + sin(θ)û + (1 - cos(θ))û²
- Bu ifade Rodrigues’ formula olarak bilinir
θ = 0isee^(0û)p = polur ve nokta aynı kalırθ = π/2iseu × p + p∥olur; bu bir quarter rotation’dırθ = πise-p⊥ + p∥olur; bu bir half rotation’dır- Bu matris orthonormal’dır
AᵀA = Ikoşuluûᵀ = -ûveû^(k+2) = -û^kile doğrulanır
- Determinant
θ = 0iken 1’dir; determinantın 0 olduğu bir durum yoktur veexp,θileûaçısından sürekli olduğundan negatif olamaz - Dolayısıyla
exp(θû)bir 3D döndürme matrisidir
3D logaritmik harita
- 3D üstel harita da injective değildir; bu yüzden 3D logaritmik harita verilen matrise karşılık gelen en küçük büyüklükteki axis/angle döndürmeyi döndürecek şekilde tanımlanır
R = exp(θû) = I + sin(θ)û + (1 - cos(θ))û²ifadesinde trace alınarak döndürme açısı bulunabilir- trace, köşegen toplamıdır
tr(I) = 3ûskew-symmetric olduğundan köşegen toplamı 0’dırtr(û²) = -2’dir- Dolayısıyla
tr(R) = 1 + 2cosθ θ = arccos((tr(R) - 1) / 2)
- Döndürme ekseni,
Rantisymmetrize edilerek geri elde edilirR - Rᵀ = 2 sin(θ)ûû = (R - Rᵀ) / (2 sinθ)u = 1/(2 sinθ) [R32 - R23, R13 - R31, R21 - R12]ᵀ
- Böylece 3D döndürme matrisinden axis/angle’a dönen tam logaritmik harita tamamlanır
3D enterpolasyonun sonucu
- 3D’de de 2D ile aynı enterpolasyon formülü aynen uygulanır
R(t) = exp(t log(R1 R0^-1)) R0
- Bu enterpolasyon axis/angle döndürmenin avantajlarını korurken her zaman en kısa yolu seçer
- Euler angles ile aynı örnek pürüzsüz görünmeyebilir
Birden çok döndürmenin ortalaması
- Quaternion kullanıldığında iyi enterpolasyon elde edilebilir; exp/log matris matematiği olmadan da enterpolasyon sorunu çözülebilir
- Axis/angle döndürmelerle daha kolay yapılabilen işlerden biri, birden çok döndürme matrisinin ortalamasını almaktır
- En basit yöntem her matrisi axis/angle’a çevirmek, vektörlerin ortalamasını almak ve tekrar dönüştürmektir
- Bu yöntem geçerlidir, ancak sezgisel olmayan davranışlar üretebilir
- Özellikle axis/angle vektörleri birleştirildiğinde catastrophic cancellation oluşabilir
- Örnek olarak
[π, 0, 0]ile[-π, 0, 0]ortalandığında 0 elde edilir - Bu iki değer eşdeğer döndürmelerdir, fakat ortalama sonucu olan 0 iki döndürmeyi temsil edemez
- Örnek olarak
Karcher mean
- Düzlemdeki noktaların ortalaması, tüm noktalara olan toplam kare mesafeyi en aza indiren nokta olarak görülebilir
- Bunu yinelemeli optimizasyonla bulma prosedürü şöyledir
- Başlangıç tahmini olarak
x̄ ∈ R²seçilir - Her noktadan tahmine translation
ui = xi - x̄hesaplanır - Vektör ortalaması
u = (1/n) Σ uibulunur x̄ = x̄ + τuile ortalama yönünde hareket edilir|u| > εolduğu sürece tekrarlanır
- Başlangıç tahmini olarak
- Aynı fikir döndürmeler
R0, ..., Rniçin uygulanabilir- Başlangıç tahmini döndürme olarak
R̄ ∈ R^(3×3)seçilir - Her matris için tahminden ilgili döndürmeye giden axis/angle
ui = log(Ri R̄^-1)hesaplanır - Vektör ortalaması
u = (1/n) Σ uibulunur R̄ = exp(τu) R̄ile ortalama döndürme yönünde hareket edilir|u| > εolduğu sürece tekrarlanır
- Başlangıç tahmini döndürme olarak
- Bu algoritmanın sonucu Karcher mean’dir
- Karcher mean, diğer tüm döndürmelere olan kare açısal uzaklıkları en aza indiren döndürmedir
- Catastrophic cancellation’dan etkilenmez ve her zaman sıfır olmayan ara bir döndürmeye yakınsar
- Basit axis/angle ortalaması ile Karcher mean’in sonuçları çoğu zaman benzerdir, ancak Karcher mean daha tutarlı davranış gösterir
Quaternion ile exp/log ilişkisi
- Bu bölüm quaternion bilgisi varsayar
- Karmaşık sayı üstel hale getirmenin skew-symmetric 2D matris üstel hale getirmeye eşdeğer olması gibi, quaternion üstel hale getirme de skew-symmetric 3D matris üstel hale getirmeye eşdeğerdir
- 2D’de axis/angle döndürme
θile pure-imaginary complex numberiθoluşturulur ve üstel hale getirilire^(iθ) = cosθ + i sinθ- Sonuç, bir noktaya çarpıldığında onu
θkadar döndüren karmaşık sayıdır - Normu her zaman 1 olduğundan 2D döndürme unit-norm complex number ile temsil edilebilir
- 3D’de axis/angle döndürme vektörü
u’dan pure-imaginary quaternionq = ux i + uy j + uz koluşturulabilir - Quaternion çarpım kuralları kullanıldığında
q² = -||q||² = -θ²olur; bu da skew-symmetric matrix’te kullanılan özdeşliğe benzer - Üstel hale getirme sonucu şöyledir
e^q = cosθ + (q/θ) sinθ- 2D ifadeye neredeyse aynıdır, ancak imaginary axis bir değil üç tanedir
- 3D axis/angle döndürme unit-norm quaternion’a dönüştürülür
- Rotation matrix gerekmiyorsa quaternion üstel haritası hesaplaması kolay bir seçenektir
- Quaternion logaritmik haritası da basittir
θ = arccos(Re(q))u = Im(q) / sinθ
- Quaternion
qile noktap’yi döndürmek için conjugationq p q^-1hesaplanır- Nokta,
p = px i + py j + pz kolan pure-imaginary quaternion olarak temsil edilir - Conjugation teknik olarak
uekseni etrafında2θkadar döndürdüğü için başlangıçta|u| = θ/2almak yeterlidir
- Nokta,
Ek okumalar
- Quaternion öğrenme materyali olarak eater.net’in quaternions içeriğine bakılabilir
- Geometric algebra’nın neden daha sezgisel olduğu Marc ten Bosch’un yazısında ele alınır
- 3D döndürmelerin cebirsel yapısı olan SO(3) öğrenildiğinde axis/angle, quaternion ve double-cover ilişkisi daha iyi anlaşılabilir
- İlgili video olarak SO(3), SU(2), quaternion ve axis/angle ilişkisini görsel olarak açıklayan video bulunur
- SO(3) Wikipedia page, axis/angle, topology, SU(2), quaternion ve Lie algebra bağlantılarını ele alır
- Skew-symmetric matrix’lerin vektör uzayı,
SO(3)’e karşılık gelen Lie algebra olan so(3)’ü oluşturur
1 yorum
Hacker News yorumları
Lie grubu/Lie cebiri karşılığı, okulda öğrenmiş olmayı isteyeceğim en harika kavramlardan biri. Yazıda bahsedilen üstel eşleme ve logaritma eşlemesi bu, ama çok daha yeniden kullanılabilir bir biçimde ortaya çıkıyor.
3B dönme gibi ele almak istediğiniz soyut nesneyi, koordinatların ayrıntılarına takılmadan yakalarsanız bu bir Lie grubu olur; buradan iyi çalışan bir koordinat gösterimi türetirseniz de karşılık gelen Lie cebiri elde edilir.
Böylece koordinatlar ile soyut nesne arasında gidip gelme, bileştirme vb. yöntemler neredeyse bedavaya gelir; mühendislikte sık karşılaşılan durumlarda interpolasyon ve ortalama alma da oldukça makul biçimde ele alınabilir.
Bir problemi Lie gruplarının birleşimi olarak ifade edebiliyorsanız, her bir cebirin ne olduğunu bulup normalde elle yapması uzun sürecek pek çok işten tasarruf edebilirsiniz.
Burada nesnenin düzgün değişim kavramına ve biraz ek yapıya sahip olması gerekir; gidip gelme sürecinde bağlantılı bileşen sorunları da çıkabilir, ama zaten bilinen sonuçları ödünç almanın bu kadar işe yaramasının nedenlerinden biri de budur.
Uzun bir hafta neredeyse biterken, bir ineği döndürmek için kaydırıcılarla oynamak tam ihtiyacım olan molaydı.
Pek çok 3B yazılımın dönme için Arcball arayüzü kullanmaması uzun süredir şikâyet ettiğim bir konu.
Autodesk ürünleri olan 3DSmax ve Maya bunu kullanıyor; Blender ve OpenSCAD kullanmıyor. Roblox’ta çalışırken de mevcut yöntemlerle kullanıcıların idare edebildiği gerekçesiyle PM’i ikna edememiştim.
Arcball kuaterniyon tabanlıdır, interpolasyonda üstel fonksiyon kullanır; tek bir sürüklemeyle herhangi bir dönmeyi mümkün kılar, gimbal lock yoktur ve kapalı bir döngü çizerek sürüklerseniz başlangıç konumuna geri dönersiniz.
Birim kuaterniyonların SO(3)’ün 2 katlı örtüsü olmasından matematiksel olarak kanıtlanabilir; çember üzerindeki dönmeleri birim karmaşık sayıların tam olarak ifade etmesine benzer.
Elle deneyebileceğiniz bir kuaterniyon/Arcball referans uygulaması: https://romankogan.net/math/arcball_js/index.html
Kod, bol yorumlu Java; Processing kütüphanesini ProcessingJS ile JavaScript’te çalıştırıyor.
Eller ve beden, kuaterniyonları beyinden önce anlayabilir; bu yüzden 3B yazılım yapıyorsanız bu yöntemi kullanmanız iyi olur.
Arcball: http://courses.cms.caltech.edu/cs171/assignments/hw3/hw3-not...
Dönme için kuaterniyonlar: https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotati...
Processing’de Arcball: https://romankogan.net/math/arcball_js/index.html
Şu an mobilde bakıyorum; https://asliceofrendering.com/camera/2019/11/30/ArcballCamer... Arcball’u anlamama yardımcı oldu.
Bu bağlamda kuaterniyonların neden bu kadar sevildiğini pek anlamıyorum. Matrislerin kuaterniyonlardan daha az sezgisel olduğunu söylemek zor.
Matrisler vektörlere etki eder; dönmeler de vektörlere etki eder. Bu yüzden dönmeleri matris olarak görmekten daha doğal ne olabilir bilmiyorum.
Matris üstelini de adi diferansiyel denklemlerle ilişkilendirince sezgiseldir.
dx/dt = Axdenkleminin çözümüexp(t A)dır; A antisimetrikse x’teki değişim her zaman x’e diktir, dolayısıyla uzunluğu değiştirmeyen bir dönme olur.Lie grubu/Lie cebiri bunu büyük ölçüde genelleştirir, ama özünde dik değişimleri sürekli biçimde üretip dönme oluşturmak ve üstel eşlemenin bu süreci açıklaması vardır. Bu resim bana çok daha geometrik ve sezgisel geliyor.
Kuaterniyonların avantajının, aynı matris çarpımını elle hesaplamaya kıyasla kâğıt kalemle uğraşmasının daha kolay olması olduğunu düşünüyorum.
Kişisel olarak karmaşık sayılara benzer anlamda sezgisel geliyor. Başta tuhaftı, ama artık bildiğim alternatiflerden daha basit kullanılıyor ve daha kolay akıl yürütülüyor gibi geliyor.
Bu özellik, animasyonlarda veya 3B spline eğrileri boyunca frame hesaplanan grafik işlerinde çok önemlidir.
2B dönmeleri karmaşık sayılarla ele almaya benzer: iki karmaşık sayıyı çarptığınızda dönmeler bileştirilir ve 2B’de argümanların toplanması biçimini alır. Aynı şekilde iki kuaterniyonu çarparak 3B dönmeleri bileştirebilirsiniz; bu, 3x3 matris çarpımından çok daha verimlidir.
Sezgi vermek için söylemek gerekirse kuaterniyonlar eksen-açı gösterimiyle yakından ilişkilidir; bu da Lie cebiri so(3) ile aynıdır.
Vektörlere etki etme açısından bakarsak, çeşitli dönme parametreleştirmelerini aynı soyut
Rotationözelliğinin uygulamaları olarak görebiliriz. İç uygulama matris, kuaterniyon, Euler vektörü, Euler açıları veya Gibbs vektörü olsun, dönmelerin vektörlere etki etme ve bileştirilme biçimi aynıdır.Birim kuaterniyonlar bir Lie grubudur; gelişigüzel toplayabileceğiniz bir şey istiyorsanız, dönme hızını temsil eden tüm kuaterniyonların Lie cebirine bakmak gerekir. Bu, eksen-açı dönme hızını temsil etmekle aynıdır.
Birim kuaterniyonlarla eksen-açıyı karşılaştırmak kategorileri biraz karıştırır; birim kuaterniyonları dönme matrisleriyle, tüm kuaterniyonları da eksen-açıyla karşılaştırmak daha uygundur.
Kuaterniyon kullanmanın avantajı üstel eşlemeyi kolay hesaplayabilmektir, ama kuaterniyon kullanırken dönme matrislerine pek ihtiyaç duyulmaz. Yazıdaki gibi
pqp^-1ile dönüş hesaplanabilir.Kuaterniyonları anlamanın en kolay yolunun geometrik cebiri okumak olduğunu düşünüyorum. Kuaterniyonların icadı yüzlerce yıl sürdü, ama şaşırtıcı derecede basit geometrik cebiri anladığınızda kuaterniyonları birkaç dakika içinde yeniden icat edebilirsiniz.
Birkaç yıl önce iyi bir giriş olarak gördüğüm yazı: https://crypto.stanford.edu/~blynn/haskell/ga.html
Geometrik cebirin çeşitli formülasyonlarından geçseniz de sonunda SO(3)/SE(3) uzayını ifade etmek için rotorlar ve motorlar kullanıyorsunuz; bunlar da sırasıyla kuaterniyonlara ve dual kuaterniyonlara izomorfiktir.
Ama amaç buysa, üstel eşlemeyle birlikte 3x3 dönme matrisleri ve 4x4 dönüşüm matrislerinin hâlâ çok daha kullanışlı olduğunu düşünüyorum. Kuaterniyonlar daha az depolama alanı kullanır ve birbirleriyle çarpmaları da hızlıdır, ancak noktaları dönüştürürken matrisler daha hızlıdır; toplam verimlilik duruma göre değişir.
Üniversitede öğrendiğim harika şeylerden biri,
+operatörünü matris ve vektör uzayı değişim miktarına göre,-operatörünü de iki matrise göre yeniden tanımlarsanız Kalman filtresi durumunun içine dönme matrisini doğrudan koyabilmenizdi.Böylece gimbal lock endişesi olmadan dönmeyi tahmin edebiliyorsunuz.
https://openslam-org.github.io/MTK
+operatörünü uygulamak yalnızca Kalman filtrelerinde değil, genel olarak doğrusal olmayan optimizasyonda da oldukça yaygın. Ceres kütüphanesi de bunun içinLocalParameterizationdesteği sunuyor.Gerçekten iyiydi; yalnızca küçük bir kısmı iyi değildi.
Bu yöntemlerin sonuçta standart dönme matrisini hesaplaması özellikle hoşuma gitti. Bir milyon vektörü döndürmeniz gerekiyorsa, ilginç hesabı yalnızca bir kez yapar, sonrasında yüksek derecede optimize edilmiş matris çarpımı hattını çalıştırırsınız.
Güzel bir blogdu; yazar profilini tıklayıp diğer yazılara bakarken “2010 civarında, 9 yaşındayken programlamayla ilk kez tanıştım” cümlesini gördüm.
Ben 2010'da 13 yaşındaydım ve ortaokul matematiğiyle fenini kafama sokmaya çalışıyordum.
Harika bilgisayar grafikleri yazıları gördüğüm her seferinde, bunları benden daha genç ve çok daha yetenekli biri yazmış gibi geliyor ve ciddi bir aşağılık duygusu hissediyorum.
Yine de nasıl yapılacağına dair pek iyi tavsiye veremem. Sadece bunu gerçekten sevdiğim için yapmaya devam ettim. Buna rağmen yapılandırılmış pratik gibi şeylerin de işe yarama ihtimali var gibi görünüyor.
Birden çok dönmenin ortalamasını alma yöntemini ararken https://mathweb.ucsd.edu/~sbuss/ResearchWeb/spheremean/paper... adresini buldum.
Bu yazıdaki yöntem, en azından benim matematik seviyemde, o makaleden çok daha kolay görünüyor.
Ortalama, toplamla yapılabilen bir işlemdir ve toplamda bileşim sırası önemli değildir. Ama dönmeler değişme özelliğine uymaz; bu yüzden normalde anladığımız ortalama kavramı doğrudan uygulanmaz.
Telefonu elinizde tutup ekranı 180° çevirerek sizden uzağa baktırdıktan sonra, yere göre saat yönünde 90° döndürürseniz kamera sola bakar. Tersine, aynı iki dönmeyi ters sırada yaparsanız kamera sağa bakar.
Bu iki dönmenin “ortalamasında” kameranın nereye bakması gerektiğine dair tek bir cevap yoktur; ortalamadan istediğiniz özelliklere bağlıdır.
https://news.ycombinator.com/item?id=40333541
Temel sezgi şu: toplama ötelemedir, çarpma ise dönmedir. Bu yüzden ortalama öteleme için aritmetik ortalama, ortalama dönme için geometrik ortalama kullanılabilir.
Matematikte de, yazılım mühendisliğinde soyutlamayı düşünmeye benzer şekilde soyutlamalar üretildiğini fark etmem uzun sürdü.
Çocukken neden sanal sayıların icat edildiğini, matrislerin tam olarak ne anlama geldiğini kafam almıyordu.
Ancak sonradan bu gösterimlerin tasarlanmış şeyler olduğunu anladım. Sanal sayı diye bir şey oluşturunca bazı hesaplar kolaylaşıyor; doğrusal denklemleri matris olarak yazınca bütünü açıp yazmaktan çok daha kolay akıl yürütülüyor.
Bariz görünüyor ama kimse bunu bana böyle anlatmamıştı.
Vektör uzayları, halkalar, metrik uzaylar ve kategoriler de aynı şekilde; matematik, tasarım kalıbı olarak arayüzlerle doludur.
Ancak matematikteki arayüzler, programlamadaki kalıtımdan çok type class'lara daha yakındır. Çünkü aynı küme/tip farklı şekillerde grup olabilir.