Kuaterniyonlar neden rotasyonlar için kullanılır?


108

Ben bir fizikçiyim ve bazı programlama öğreniyorum ve matris / vektör formunda şeyler yazmak yerine dönüşler için kuaterniyonları kullanan birçok insanla karşılaştım.

Fizikte, kuaterniyonları kullanmamamızın çok iyi nedenleri vardır (ara sıra Hamilton / Gibbs / vb. Hakkında anlatılan tuhaf hikayeye rağmen). Fizik, açıklamalarımızın iyi bir analitik davranışa sahip olmasını gerektirir (bunun kesin olarak tanımlanmış bir anlamı vardır, ancak normal giriş sınıflarında öğretilenin çok ötesine geçen bazı oldukça teknik yollarla, bu nedenle herhangi bir detaya girmeyeceğim). Kuaterniyonların bu güzel davranışa sahip olmadığı ve bu yüzden kullanışlı olmadıkları ve vektörler / matrisler olduğu için onları kullanıyoruz.

Bununla birlikte, herhangi bir analitik yapı kullanmayan katı rotasyonlar ve açıklamalarla sınırlı olan 3B rotasyonlar, her iki şekilde de (veya birkaç başka şekilde) eşit olarak tanımlanabilir.

Genel olarak, bir X = (x, y, z) noktasının, X 2 = X ' 2 kısıtlamasına tabi olarak yeni bir X' = (x ', y', z ') noktasına eşlenmesini istiyoruz . Ve bunu yapan pek çok şey var.

Saf yol, sadece bunun tanımladığı üçgenleri çizip trigonometri kullanmak veya bir nokta (x, y, z) ile bir vektör (x, y, z) ve f (X) = X 'fonksiyonu arasındaki izomorfizmi kullanmaktır ve bir matris MX = X ', veya kuaterniyonlar kullanarak veya eski vektörün bileşenlerini başka bir yöntem kullanarak (x, y, z) T. [a, b, c) (x', y ', z ') vb.

Matematik açısından bakıldığında, bu açıklamaların tümü bu ortamda eşdeğerdir (bir teorem olarak). Hepsi aynı sayıda serbestlik derecesine, aynı sayıda kısıtlamaya vb. Sahiptir.

Öyleyse neden kuaterniyonlar vektörlere göre tercih edilir?

Gördüğüm olağan nedenler, gimbal kilidi veya sayısal sorunlar.

Gimbal kilit yok argümanı tuhaf görünüyor, çünkü bu sadece bir euler açıları sorunudur. Aynı zamanda sadece bir koordinat problemidir (tıpkı kutupsal koordinatlarda r = 0'daki tekillik gibi (Jacobian rütbesini kaybeder)), bu da sadece yerel bir problem olduğu anlamına gelir ve koordinatları değiştirerek, dejenerelikten dönerek çözülebilir. veya örtüşen iki koordinat sistemi kullanarak.

Bunların her ikisinin (ve herhangi bir alternatifin) nasıl uygulanacağını ayrıntılı olarak bilmediğim için sayısal konular hakkında daha az eminim. Bir kuaterniyonu yeniden normalleştirmenin bunu bir rotasyon matrisi için yapmaktan daha kolay olduğunu okudum, ancak bu yalnızca genel bir matris için geçerlidir; bir dönme, bunu önemsizleştiren ek kısıtlamalara sahiptir (bunlar dördeylerin tanımına dahil edilmiştir) (Aslında, aynı sayıda serbestlik derecesine sahip oldukları için bu doğru olmalıdır).

Öyleyse kuaterniyonların vektörlere veya diğer alternatiflere göre kullanılmasının nedeni nedir?


2
"Gimbal kilit yok" olayı zaten bir yalan. Bir kuaterniyon ile iki ortogonal dönüş kullanırsanız, Euler açıları ile aynı gimbal kilit problemine sahip olursunuz. 3 değil, 1 operasyon olduğu için tek bir rotasyon için bir sorununuz yok.
Damon

2
@Damon Bu tamamen doğru değil. Bkz mathoverflow.net/a/95908/97344
plasmacel

Yanıtlar:


62

Gimbal kilit bir nedendir, dediğiniz gibi sadece Euler açıları ile ilgili bir problemdir ve kolayca çözülebilir. Euler açıları, yalnızca 3 sayı kaydetmeniz gerektiğinden bellek sorun olduğunda da kullanılır.

Bir 3x3 dönme matrisine karşı kuaterniyonlar için, kuaterniyon boyut (4 skalere karşı 9) ve hız (kuaterniyon çarpımı 3x3 matris çarpımından çok daha hızlıdır) avantajına sahiptir.

Not Tüm rotasyonlar temsilleri bu uygulamada kullanılmaktadır. Euler açıları en az belleği kullanır; matrisler daha fazla bellek kullanır ancak Gimbal kilidinden etkilenmez ve güzel analitik özelliklere sahiptir; ve kuaterniyonlar, hafif olmakla birlikte Gimbal kilidi içermezler.


Ancak bir rotasyon matrisinin o kadar çok bağımsız bileşeni yoktur - kısıtlıdır. İki boyutlu bir döndürme, gösterime bakılmaksızın, üç boyutta üç koordinatla belirtilir. Matrisler genel olarak daha fazla bileşene sahiptir çünkü rotasyonlardan daha fazlasını yapabilirler. Ancak rotasyon durumunda, ekstra bileşenler diğerlerine göre belirlenir.
JMP

1
@ JMP: Haklısın. Pek çok insan matrisi "sıkıştırır", böylece yalnızca gerektiği kadar bilgi depolayabilirsiniz, ancak sıkıştırılmış bir matrisle uğraşmak daha zordur, bu nedenle performansınızı kaybedersiniz. Her şey hafıza ve performanstaki değiş tokuşlarla ilgili.
Peter Alexander

10
@JMP Standart matris çarpım rutinleri 9 değerin tamamına ihtiyaç duyar. Bunlardan sadece 3 tanesi bağımsız olsa da, gerçekten matematik yapmaya gittiğinizde hala 9 sayılık hafıza gerektirir (yine, bilgisayarda matris çarpımını gerçekten yapıyorsanız).
David Z

1
"kuaterniyon çarpımı 3x3 matris çarpımından çok daha hızlıdır" Gerçekten mi? Kuaterniyon dönüşü, 24 toplama / işleme işlemi gerektirir (iki çapraz ürün ve tamamlayıcı işlem nedeniyle), 3x3 matris yalnızca 15 ekleme / işleme işlemi gerektirir.
Marat Buharov

Tamamen 3 boyutlu bir oryantasyonu temsil etmek için sadece 2 vektör (6 float) kullanabilir, 3. vektör sadece bir çapraz uzaklıktadır. Matrislerin sahip olduğu bir avantaj, birçok uygulama için kullanıma hazır bir formda olmalarıdır. Euler ve Quats'in her ikisi de fazladan işlem tüketen paketleme (matristen) ve ambalaj açma (matrise) gerektirir. Euler ve Quats, uzun süreli kompakt depolama için kullanışlı olabilir.
user3015682

40

Fizikte, kuaterniyonları kullanmamamızın çok iyi nedenleri vardır (ara sıra Hamilton / Gibbs / vb. Hakkında anlatılan tuhaf hikayeye rağmen). Fizik, açıklamalarımızın iyi bir analitik davranışa sahip olmasını gerektirir (bunun kesin olarak tanımlanmış bir anlamı vardır, ancak normal giriş sınıflarında öğretilenin çok ötesine geçen bazı oldukça teknik yollarla, bu nedenle herhangi bir detaya girmeyeceğim). Kuaterniyonların bu güzel davranışa sahip olmadığı ve bu yüzden kullanışlı olmadıkları ve vektörler / matrisler olduğu için onları kullanıyoruz.

Ben de fizikçiyim. Ve kuaterniyonların basitçe sallandığı bazı durumlar vardır! Örneğin Küresel Harmonikler. Saçılan, elektron değiş tokuş eden iki atomunuz var: yörünge spin transferi nedir? Kuaterniyonlarla bu sadece çarpmadır, yani kuaterniyonlar olarak ifade edilen SH baz fonksiyonlarının üslerini toplamaktır. (Legendre Polinomlarını kuaterniyon gösterimine sokmak biraz sıkıcı olsa da).

Ama kabul ediyorum, evrensel bir araç değiller ve özellikle katı gövde mekaniğinde kullanımları çok zahmetli olacak. Yine de bir fizikçinin ne kadar matematiği bilmesi gerektiğini bir öğrenciyle ilgili sorusuna Bertrand Russell cevabını vermek gerekirse: "Mümkün olduğunca çok!"

Her neyse: Neden bilgisayar grafiklerinde kuaterniyonları seviyoruz? Çünkü çok sayıda çekici özellikleri var. Birincisi, onları güzel bir şekilde enterpolasyon yapabilir; bu, eklem çevresindeki uzuvlar gibi dönen şeylere animasyon uyguluyorsa önemlidir. Bir kuaterniyonla, sadece skaler çarpma ve normalizasyondur. Bunu bir matrisle ifade etmek, sin ve cos'un değerlendirilmesini ve ardından bir rotasyon matrisi oluşturmayı gerektirir. O zaman bir vektörü bir kuaterniyonla çarpmak, tam bir vektör-matris çarpımından geçmek kadar hala daha ucuzdur, ayrıca daha sonra bir çeviri eklenirse daha ucuzdur. Bir insan karakteri için iskelet animasyon sistemini düşünürseniz, çok sayıda köşe için çok sayıda çeviri / dönüşü değerlendirmek gerekir, bunun çok büyük bir etkisi vardır.

Kuaterniyonları kullanmanın bir başka güzel yan etkisi de, herhangi bir dönüşümün doğası gereği birimdik olmasıdır. Çeviri matrisleri ile, sayısal yuvarlama hataları nedeniyle, her iki animasyon adımının yeniden ortonormalleştirilmesi gerekir.


1
Kuaterniyonlu küresel harmonikler / Legendre polinomları için bir referansınız var mı? İlgili konularla ilgili bir makale sunmak üzereyim ve bu konudaki diğer çalışmaları görmek (alıntı yapmak) isterim.
Mike

4
@Mike: Kafamın dışında, ne yazık ki hiçbir şey yayınlanmadı. Ne yazık ki kuaterniyonlar hala fizikçiler için oldukça belirsizdir. Sadece hatırlıyorum, çünkü Kuantum Mekaniği 2 öğretmenim bunu bir alıştırma yaptı ve beni çok şaşırttı. Esasen yaptığımız şey exp ((a · iω + b · jθ + c · kη + d) r) terimini kullanmaktı, burada r'nin kendisi karmaşık bir değişkendi. Bunu çizerseniz, 3 boyutlu bir dağılım elde edersiniz (ilk önce bir kuaterniyon değişkenine göre üstel seriyi geliştirmemiz gerekiyordu). Bu, bilinen SH terimlerine dönüştürebileceğiniz bir şeyle sonuçlanan bir "fourier" dönüşümü yapmaya izin verir.
datenwolf

32

Gimbal kilit yok argümanı tuhaf görünüyor, çünkü bu sadece bir euler açıları sorunudur. Aynı zamanda sadece bir koordinat problemidir (tıpkı kutupsal koordinatlarda r = 0'daki tekillik gibi (Jacobian rütbesini kaybeder)), bu da sadece yerel bir problem olduğu anlamına gelir ve koordinatları değiştirerek, dejenerelikten dönerek çözülebilir. veya örtüşen iki koordinat sistemi kullanarak.

Bir nesnenin yönünü tanımlamak için Euler açılarını kullanmak gibi birçok 3B uygulama. Özellikle uçuş simülasyonları için, oryantasyonu kolayca değiştirilebilecek bir şekilde depolamanın teorik olarak kullanışlı bir yolunu temsil ederler.

Ayrıca, "koordinatları değiştirmek, dejenerasyonun dışına çıkmak veya üst üste binen iki koordinat sistemi kullanmak" gibi şeylerin hepsinin çaba gerektirdiğini bilmelisiniz. Çaba kod demektir. Ve kod, performans demektir. Eğer yok performansını kaybetmek zorunda için birçok 3D uygulamalar için iyi bir şey değildir. Sonuçta, tüm bu numaralarla elde edilecek olan şey, eğer sadece kuaterniyonları kullanmak size ihtiyacınız olan her şeyi kazandıracaksa.

Bunların her ikisinin (ve herhangi bir alternatifin) nasıl uygulanacağını ayrıntılı olarak bilmediğim için sayısal konular hakkında daha az eminim. Bir kuaterniyonu yeniden normalleştirmenin bunu bir rotasyon matrisi için yapmaktan daha kolay olduğunu okudum, ancak bu yalnızca genel bir matris için geçerlidir; bir dönme, bunu önemsizleştiren ek kısıtlamalara sahiptir (bunlar dördeylerin tanımına dahil edilmiştir) (Aslında, aynı sayıda serbestlik derecesine sahip oldukları için bu doğru olmalıdır).

Bir oryantasyonun birden fazla ardışık dönüşü ile uğraşırken sayısal sorunlar ortaya çıkar. Uzayda bir nesneniz olduğunu hayal edin. Ve her zaman dilimine, ona küçük bir sapma değişikliği uygularsınız. Her değişiklikten sonra, yönlendirmeyi yeniden normalleştirmeniz gerekir; aksi takdirde, hassasiyet sorunları ortaya çıkar ve işleri alt üst eder.

Matrisleri kullanırsanız, matris çarpımını her yaptığınızda, matrisi yeniden ortonormalleştirmelisiniz. Ortonormalleştirdiğiniz matris henüz değil matris bir rotasyon matrisi değil, bu yüzden bu kolay birimormalleştirme konusunda çok emin olamam. Ancak bundan emin olabilirim:

4D vektör normalizasyonu kadar hızlı olmayacak. Kuaterniyonların ardışık rotasyonlardan sonra normalleştirmek için kullandığı şey budur.

Kuaterniyon normalizasyonu ucuzdur. Özelleştirilmiş rotasyon matrisi normalizasyonu bile , ucuz . Yine, performans önemlidir.

Matrislerin kolayca yapamadığı başka bir konu daha var: iki farklı yönelim arasında enterpolasyon.

Bir 3B karakterle uğraşırken, genellikle karakterdeki her kemiğin konumunu tanımlayan bir dizi dönüşümünüz olur. Bu kemik hiyerarşisi, belirli bir pozdaki karakteri temsil eder.

Çoğu animasyon sisteminde, belirli bir zamandaki bir karakter için pozu hesaplamak için dönüşümler arasında enterpolasyon yapılır. Bu, karşılık gelen dönüşümlerin enterpolasyonunu gerektirir.

İki matrisin enterpolasyonu ... önemsiz değildir. En azından sonunda bir rotasyon matrisine benzeyen bir şey istiyorsanız. Sonuçta, enterpolasyonun amacı, iki dönüşüm arasında yarı yolda bir şey üretmektir.

Kuaterniyonlar için tek ihtiyacınız olan bir 4D lerp ve ardından normalize etmektir. Hepsi bu: iki kuaterniyon alın ve bileşenleri doğrusal olarak hesaplayın. Sonucu normalleştirin.

Daha kaliteli enterpolasyon istiyorsanız (ve bazen istiyorsan), küresel lerp'i ortaya çıkarabilirsiniz . Bu, enterpolasyonun daha farklı yönelimler için daha iyi davranmasını sağlar. Bu matematik çok daha zordur ve matrisler için kuaterniyonlardan daha fazla işlem gerektirir.


8

Görüş: Kuaterniyonlar güzel.

Dönme matrisi: Küçük dezavantaj : Matrislerin çarpımı, kuaterniyonlardan ~ 2 kat daha yavaştır. Küçük Avantaj : Matris vektör çarpımı ~ 2 kat daha hızlı ve büyüktür. Büyük dezavantaj : Normalleştirme! Ghram-Shmit asimetriktir ve diferansiyel denklemler yaparken daha yüksek dereceden doğru bir cevap vermez. Daha karmaşık yöntemler çok karmaşık ve pahalıdır.

Eksen (açı = eksen uzunluğu) Küçük avantaj : Küçük. Orta derecede dezavantaj : Çarpma ve bir vektöre uygulama trigonometrik olarak yavaştır. Orta derecede dezavantaj : Uzunlukta kuzey kutbu tekilliği = 2 * pi, çünkü tüm eksen yönleri hiçbir şey yapmaz. 2pi'ye yaklaştığında otomatik olarak yeniden ölçeklendirmek için daha fazla kod (ve hata ayıklama).


6

Genel olarak, X ^ 2 = X '^ 2 kısıtlamasına tabi olarak X = (x, y, z) noktasının yeni bir X' = (x ', y', z ') noktasına eşlenmesini istiyoruz. Ve bunu yapan pek çok şey var.

Biz kesinlikle yok sadece bunu istiyorum. Pek çok insanın gözden kaçırdığı çok önemli bir incelik var . Bahsettiğiniz yapı (üçgenleri çizin ve trigonometri kullanın vb.) Bir vektörü diğerine doğru şekilde döndürecektir. Ancak bunu yapacak sonsuz sayıda dönüş vardır. Özellikle, siz dönüşünüzü yaptıktan sonra gelebilirim ve sonra tüm sistemi X 'vektörü etrafında döndürebilirim. Bu, X'in konumunu hiç değiştirmeyecek. Sizin rotasyonunuzla benim rotasyonunuzun kombinasyonu başka bir tek rotasyona eşdeğerdir (rotasyonlar bir grup oluşturduğundan ). Genel olarak, böyle bir dönüşü temsil edebilmeniz gerekir.

Bu çıkıyor olabilir sadece bir vektör ile bunu. (Bu , dönüşlerin eksen-açı temsilidir .) Ancak, eksen-açı gösterimindeki dönüşleri birleştirmek zordur. Kuaterniyonlar, diğer birçok şeyin yanı sıra bunu kolaylaştırır. Temel olarak, kuaterniyonlar diğer temsillerin tüm avantajlarına sahiptir ve hiçbir dezavantajı yoktur. (Yine de, bazı diğer temsillerin daha iyi olabileceği özel uygulamalar olabileceğini kabul edeceğim.)


5

Gördüğüm olağan nedenler, parıltılı kilit veya sayısal sorunlar değildir.

Ve bunlar iyi nedenlerdir.

Zaten anladığınız gibi, kuaterniyonlar, Euler 3-uzayındaki üç ardışık dönüşün aksine, gelişigüzel bir eksen etrafında tek bir dönüşü kodlar. Bu, kuaterniyonları gimbal kilidine karşı bağışık hale getirir .

Ayrıca, SLERP gibi bazı enterpolasyon biçimleri güzel ve kolay hale gelir .

... veya örtüşen iki koordinat sistemi kullanarak.

Performans açısından bakıldığında, çözümünüz neden daha iyi?

Devam edebilirim, ancak kuaterniyonlar kullanılabilecek olası araçlardan yalnızca biridir. İhtiyaçlarınızı karşılamıyorlarsa, kullanmayın.


Yine de rotasyon matrisleri aynı şeyi yapar ve düzgün bir şekilde kullanılabilen daha fazla cebirsel özelliğe sahiptir. Bunun üzerine matris manipülasyonu, bilgisayarların özellikle iyi olduğu şeylerden biridir.
paul23

4

Döndürmeyle ilgili tüm özelliklerin gerçekten Kuaterniyonların özellikleri olmadığını unutmamak gerekir: bunlar Euler-Rodrigues Parametrelendirmelerinin özellikleridir. , bir 3B dönüşü tanımlamak için kullanılan gerçek 4 elemanlı yapı .

Kuaterniyonlarla olan ilişkileri tamamen, yazarın Kuaterniyon çarpımı ile Euler-Rodrigues parametreleştirmelerinin kombinasyonu arasındaki korelasyonu gözlemlediği "Kuaterniyonlarla ilgili belirli sonuçlar üzerine" Cayley tarafından yazılan bir makaleden kaynaklanmaktadır. Bu, Kuaterniyon teorisinin yönlerinin rotasyonların temsiline ve özellikle bunlar arasındaki enterpolasyona uygulanmasını sağladı.

Makaleyi buradan okuyabilirsiniz: https://archive.org/details/collmathpapers01caylrich . Ancak o sırada Kuaterniyonlar ile rotasyon arasında bir bağlantı yoktu ve Cayley, şunları bulunca oldukça şaşırdı:

Aslında formüller tam da böyle bir dönüşüm için M. Olinde Rodrigues Liouville, tv, "Des lois géométriques qui régissent les déplacements d'un système solide [...]" (veya Comb. Math. Journal, t. iii. s. 224 [6]). Bu katsayıların burada ortaya çıkışını a priori açıklamak ilginç bir soru olurdu.

Bununla birlikte, Kuaterniyonlar hakkında dönüşe herhangi bir fayda sağlayan içsel hiçbir şey yoktur. Kuaterniyonlar gimbal kilitlenmesini engellemez; Euler-Rodrigues parametrelendirmeleri yapar. Döndürme gerçekleştiren çok az sayıda bilgisayar programı, birinci sınıf karmaşık matematiksel değerler olan Kuaterniyon türlerini gerçekten uygulayabilir. Maalesef, Kuaterniyonların rolünün yanlış anlaşılması bir yere sızmış gibi görünüyor, bu da çok sayıda şaşkın grafik öğrencisinin karmaşık matematiğin ayrıntılarını birden çok sanal sabitle öğrenmesine ve bunun neden rotasyonla ilgili sorunları çözdüğü konusunda şaşkınlığa neden oluyor.


2

Birinin okuyabileceği bir cevap: Tüm temsillerde can sıkıcı sorunlar var. Kuaterniyonlar matrislerden daha küçüktür, ancak kuaterniyon çarpımı sadece bir vektör nokta çarpımı veya benzeri değildir ve aslında bir bilgisayarda iki 3x3 matrisin iç çarpımından daha fazla zaman alır. (Bilgisayarlar, sıradan matrislerle çalışma konusunda çok iyidir)

Matrislerin başka can sıkıcı özellikleri de vardır. Örneğin, uzun vadede istikrarlı yaratıklar değillerdir. 3B uzayda rotasyonları modellerken, biri genellikle üst üste döndürmeleri bir Oryantasyon matrisinde toplar, bu sadece bir referans çerçevesinin oryantasyonunu saklayan tek bir rotasyon matrisidir. Bu süreç, milyonlarca ekleme boyunca O-matrisin katı bir rotasyon matris formundan sapmasına neden olacaktır. Bu, matrisin periyodik olarak yeniden yapılandırılmasıyla engellenebilir, ancak bunun önemsiz olduğu durumlar vardır. Yani kimlik matrisinin dönüşsüz durumu.

Dönüşün bir eksen açısı gösterimini (veya kuaterniyon gösterimini) bulmak ve ardından bunun için bir matris oluşturmak isteyeceksiniz. Çoğu algoritma sıfır vektör üretir ve bu durumda sıfır bölümle karşılaşır. Bu tür durumlarda, bu tür durumlardan "0 ise o zaman ..." tipi çözümlerle kaçınmaya çalışmak genellikle kötü bir fikirdir, çünkü a) çatallar yavaştır ve b) makinenin epsilon'unu yine de tekillik ve korkunç hatalarla sonuçlanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.