Quaternion ile Euler açıları arasındaki fark nedir? Gimbal lock nedir?
Cevap
Euler açıları, rotasyonu üç eksen etrafındaki ardışık dönüşler olarak tutar (Unity'de Inspector'daki X, Y, Z). İnsan için okunabilir ama iki ciddi sorunu vardır:
Gimbal lock
Eksenler sırayla uygulandığı için, ortadaki eksen 90 derece dönünce diğer iki eksen aynı düzleme hizalanır. Bu durumda bir serbestlik derecesi kaybedilir: iki farklı açıyı değiştirmek aynı dönüşü üretir ve bazı yönlere doğrudan dönmek imkânsız hâle gelir. Ör. uçak burnunu tam yukarı (pitch 90) kaldırınca yaw ve roll aynı etkiyi verir.
Interpolasyon sorunu
Euler değerleri arasında Lerp yapmak tuhaf yollar çizer ve 350'den 10 dereceye geçerken uzun yolu dolaşabilir.
Quaternion
Quaternion, rotasyonu bir eksen ve o eksen etrafındaki açı olarak 4 bileşenle (x, y, z, w) temsil eder. Bileşenler doğrudan açı değildir, elle düzenlenmez.
| Özellik | Euler | Quaternion |
|---|---|---|
| Okunabilirlik | Yüksek | Düşük |
| Gimbal lock | Var | Yok |
| Yumuşak interpolasyon | Zor | Slerp ile kolay |
| Rotasyon birleştirme | Karmaşık | Çarpma ile (q1 * q2) |
| Bellek | 3 float | 4 float |
// Hedefe doğru bak
Quaternion look = Quaternion.LookRotation(target.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, look, 5f * Time.deltaTime);
// Rotasyonları birleştir: sıra önemlidir, çarpma değişmeli değildir
transform.rotation = transform.rotation * Quaternion.Euler(0, 90, 0); // yerel Y etrafında
transform.rotation = Quaternion.AngleAxis(45, Vector3.up) * transform.rotation; // dünya Y etrafında
// Quaternion ile vektör döndürme
Vector3 rotated = Quaternion.Euler(0, 30, 0) * Vector3.forward;Pratik kural: Tasarımcı girişi ve gösterim için Euler, çalışma zamanındaki hesaplamalar için Quaternion kullanılır. transform.eulerAngles okunan değer her zaman yazılanla aynı olmayabilir (aynı rotasyonun birden fazla Euler karşılığı vardır), bu yüzden okuyup artırarak döndürmek hatalara yol açar.
İlgili Oyun Matematiği soruları
- Vektörlerde dot product ve cross product oyunlarda ne için kullanılır?
- AABB ve sphere çarpışma testleri matematiksel olarak nasıl yapılır? Hangisi ne zaman tercih edilir?
- Transform matrisleri nedir? Local space ile world space arasında nasıl dönüşüm yapılır?
- Lerp ve Slerp nedir? Lerp'ü Update içinde yanlış kullanmak neden sorun yaratır?
- Vektör normalize etmek ne demektir? Çapraz harekette neden gereklidir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.