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?
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?
Yanıtlar:
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:
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.
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: