Bir kuaterniyon nedir?


50

Bir kuaterniyon nedir ve nasıl çalışırlar? Ayrıca, 2B düzlemde üç nokta kullanarak ne gibi avantajlar elde ediyorsunuz? Son olarak, kuaterniyonları kullanmak ne zaman iyi bir uygulama olarak kabul edilir?



Tarihsel olarak, kuaterniyonların önce geldiğini ve sonra nokta ve çapraz ürünlerin kuaterniyonlardan geldiğini düşünüyorum.

2
Bu animasyonlu makaleyi çok bilgilendirici buldum: acko.net/blog/animate-your-way-to-glory-pt2/#quaternions
AShelly 10:15

Saf matematikte, kuaterniyonların i² = j² = k² = ijk gibi 3 karmaşık sayı olduğuna inanıyorum
Vinz243

Kuaterniyonlar, rotasyonları sorunsuz şekilde enterpolasyon etmenin en iyi yoludur. Sadece enterpolasyonlu döndürme matrisleri çalışmaz, çünkü sonuçta her zaman bir döndürme matrisi elde edemezsiniz. İnterpolasyon Euler açıları düzgün bir dönüşle sonuçlanmaz. Böylece, rotasyonları canlandırmak için, bilgisayar grafikleri veya robotlarda gerekli olduğu gibi, kuaterniyonlar gitmenin yoludur. Ve faydalı, ancak bir şekilde bu sık kullanılan uzantı değil, dönüşüm ve rotasyonu temsil etmenizi sağlayan çift kuaterniyonlar denir
Tobias B

Yanıtlar:


43

Matematiksel olarak bir kuaterniyon, 4 boyutlu karmaşık bir sayıdır. Ancak oyun geliştirmede Quaternions, sık sık kodlama yaparak 3B alanda bir dönüşü tanımlamak için kullanılır:

  1. dönme ekseni (3 boyutlu vektör şeklinde)
  2. bu eksenin etrafında ne kadar dönebileceği

Bu bilginin kuaterniyon içindeki sinüs ve kosinüslerle kodlandığına dikkat edin, bu nedenle genel olarak kuaterniyonun iç bileşenlerini (xyzw) ayrı ayrı ayarlamaya veya okumaya çalışmamalısınız. Bu şekilde bir hata yapmak ve anlamlı olmayan bir sonuç almak kolaydır. Bir kuaterniyon matematik kütüphanesi genellikle kuaterniyonlar üzerinde çalışacak fonksiyonlar sağlayacaktır (örneğin, onları Euler açıları veya eksen açısından dönüştürür);

Rotasyonları tarif etmenin alternatif bir yolu, 4 yerine sadece 3 sayı gerektiren ve genellikle kullanımı daha sezgisel olan 3 sabit eksen 'x, y ve z'nin (aka Euler açıları) ne kadar döneceğini tanımlamaktır. Ancak, euler açıları gimbal-lock denilen bir soruna maruz kalır : Bir eksen etrafında 90 ° döndürdüğünüzde, diğer iki eksen eşdeğer olur. Kuaterniyonlarda bu sorun oluşmaz.

3B uzayda dönüşleri ifade etmenin bir başka yolu 4x4 dönüşüm matrisiyledir . Ancak bir dönüşüm matrisi ile sadece döndürmekle kalmaz, aynı zamanda ölçekleyebilir, çevirebilir ve eğriltebilirsiniz. Sadece döndürme yapmak istediğinizde , bir matris fazladan ve bir kuaterniyon daha hızlı ve basit bir çözüm olacaktır.

Bu sorun sadece 3B alanda geçerlidir. 2d uzayda, yalnızca bir dönüş ekseniniz vardır. Herhangi bir döndürme, tek bir kayan noktalı sayı veya tek bir karmaşık sayı ile ifade edilebilir, bu nedenle bu sorununuz olmaz. 2d düzlemindeki bir dönüşü teorik olarak eksenin düzlem içine (veya dışından) işaret ettiği bir kuaterniyonla ifade edebilseniz de, genellikle aşırı yüklenmez.


6
gimbal kilidi dörtlü gruplardan başlayıp dörtlü noktalarla bitiyorsanız, dörtlü kilitlerde sorun olmaz, gulbal kilit, euler açılarına veya sırtına dönüşen bir basamağınız olduğunda devreye girer.
cırcır ucube

2
Kuaterniyonlar eksen + açı değildir , 3 karmaşık sayı ve ölçekdir.
transistor09

11
@ transistor09 ikinizin de haklı olduğuna inanır mısınız? Bir birim kuaterniyonun 3 bileşenli hayali kısmı, dönme açısının sinüsüyle ölçeklendirilen, dönme ekseni boyunca bir birim vektör olarak yorumlanabilir. Birim kuaterniyonun gerçek kısmı, dönme açısının yarısının kosinüsüdür. Yani haklısınız, tam olarak açı ekseni biçimi değil, ancak bir kuaterniyonun bileşenlerinin bir eksen olarak yorumlanabileceği ve bu eksenin etrafında ne kadar uzağa gidileceği (doğrusal olmayan) bir ölçü olduğu doğru.
DMGregory

2
Ayrıca kuaternyonların bir dönme matrisi üzerindeki avantajlarından da bahsedebilirsiniz: Birleşmeleri daha hızlıdır. Rotasyonları birleştirirken, iki kuaterniyonun çarpılması, matrislerin çoğaltılmasından daha az işlem gerektirir.
Monica

3
Aslında, 2B alanda, karmaşık sayılar tam analogdur. Bir 2B noktayı karmaşık bir sayıyla çarpın ve döndürdünüz - aslında, tam olarak normal günah / cos döndürmesiyle aynıdır (eğer karmaşık sayıları yeterince iyi anlıyorsanız açık olmalıdır). Bu biraz istismar edilebilir, ancak sonuçta 2D grafikler günümüzde bu kadar yoğun performans göstermiyor, bu yüzden karmaşık sayıları kullanmakta gerçekten rahat olmadığınız sürece (çoğu insanın kesinlikle karar vermediği) - Orada inanılmaz derecede düşük kuaterniyona dayalı kodun kanıtladığı gibi: D).
Luaan

13

Bu @ Philipp'in cevabını eklemek içindir.

Ayrıca, 2B düzlemde üç nokta kullanarak ne gibi avantajlar elde ediyorsunuz?

Eğer ilgilendiğiniz tüm dönen ise gerçekten kuaterniyonları gerekmez üzerinde yani düzlem hakkında z ekseninde. Bu durumda, ihtiyacınız olan tek şey yalpalama açısıdır ve z ekseni etrafında art arda gelen dönüşlerin gidip gelmesinden faydalanabilirsiniz. Böylece rotasyonlarınızı istediğiniz sırada uygulayabilirsiniz.

XY düzlemi olmayan bir düzlemde dönüyorsanız, durum farklıdır. Bu döndürme, rastgele bir 3B ekseni etrafında dönmeye eşdeğerdir. Şimdi, iki seçeneğiniz var:

  • XY düzlemiyle çakışacak ve sonra esneyecek ve geri dönüşecek şekilde düzleminizi 3B olarak döndürün veya

  • rotasyonunuzu başlangıçta 3B olarak düşünün.

İkinci seçenek kodlamak daha kolaydır. @Philipp'in söylediği gibi, kuaterniyonlar gimbal kilidi önler (eğer orta RPY veya eksen / açı dönüşümlerini önlerseniz).

Son olarak, kuaterniyonları kullanmak ne zaman iyi bir uygulama olarak kabul edilir?

Her ne zaman 3D rotasyonları vardır, bu kuaterniyonları kullanmak iyi bir uygulamadır.

Örneğin:

  • In Qt . Quatlar , slerp fonksiyonunda olduğu gibi, dönüşler arasında enterpolasyon yapmayı kolaylaştırır .

  • ROS bunları robot pozlarını dönüştürmek için kullanır.

  • Gelen Mermi dinamikleri motoru

  • Çok karmaşık bir uygulama için klasik 3B mekanikte kullanımları için buraya bakın .


" Her ne zaman 3D rotasyonlar vardır, bu kuaterniyonları kullanmak iyi bir uygulamadır." sadece biraz fazla güçlü. Neredeyse her zaman daha iyidir; Alternatiflerin uygun olduğu durumlar vardır. (Bir
kusurluluğa

1
Kuaterniyonlar, kullanılacak bir mal ve uygulamak için bir acıdır. Gimbal kilidinin farkındaysanız, onlarsız geçinebilirsiniz.
Hatoru Hansou
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.