TL; DR; Sorununuz mesafe fonksiyonunu yerine getirmekten ibaret değil. Sorununuz mesafe fonksiyonunu birçok kez gerçekleştiriyor. Başka bir deyişle, matematiksel değil, algoritmik bir optimizasyona ihtiyacınız var.
[EDIT] Cevabımın ilk bölümünü siliyorum çünkü insanlar bundan nefret ediyor. Soru başlığı, düzenlemeden önce alternatif mesafe işlevlerini soruyordu.
Her zaman karekök hesapladığınız bir mesafe işlevi kullanıyorsunuz. Bununla birlikte, bunu sadece karekök kullanmadan değiştirebilir ve bunun yerine kare kareyi hesaplayabilirsiniz. Bu size çok değerli döngüleri kurtaracak.
Mesafe ^ 2 = x * x + y * y;
Bu aslında ortak bir hiledir. Ancak hesaplamalarınızı buna göre ayarlamanız gerekir. Gerçek mesafeyi hesaplamadan önce ilk kontrol olarak da kullanılabilir.
Örneğin, bir kesişim testi için iki nokta / küre arasındaki gerçek mesafeyi hesaplamak yerine, Mesafe Karesini hesaplayabilir ve yarıçap yerine yarıçap kare ile karşılaştırabiliriz.
Düzenleme, @ Byte56'dan hemen sonra soruyu okumadığımı ve kare mesafe optimizasyonunun farkında olduğunuzu belirtti.
Sizin durumunuzda, maalesef neredeyse sadece Öklid Uzayıyla uğraşan bilgisayar grafiğindeyiz ve mesafe tam olarak Sqrt of Vector dot itself
öklid uzayındaki gibi tanımlanıyor .
Mesafe karesi alacağınız en iyi yaklaşımdır (performans açısından), 2 çarpma, bir ekleme ve ödev veren hiçbir şey göremiyorum.
Yani mesafe fonksiyonunu optimize edemediğimi söylüyorsunuz ne yapmalıyım?
Sorununuz mesafe fonksiyonunu yerine getirmekten ibaret değil. Sorununuz mesafe fonksiyonunu birçok kez gerçekleştiriyor. Başka bir deyişle, matematiksel değil, algoritmik bir optimizasyona ihtiyacınız var.
Mesele, sahnedeki her nesneyle her karenin oyuncu kesişimini kontrol etmek yerine. Mekansal tutarlılığı kendi avantajınıza kolayca kullanabilirsiniz ve sadece oyuncunun yakınında bulunan nesneleri kontrol edebilirsiniz (en çok vurması / kesişmesi muhtemeldir).
Bu, bu uzamsal bilgiyi bir uzamsal bölümleme veri yapısında depolamak suretiyle kolaylıkla yapılabilir . Basit bir oyun için bir Izgara öneririm, çünkü temel olarak dinamik sahneyi güzelce uygulamak ve uygulamak kolaydır.
Her hücre / kutu, kılavuzun sınırlayıcı kutusunun içine aldığı nesnenin bir listesini içerir. Ve bu hücrelerdeki oyuncu pozisyonunu izlemek kolaydır. Mesafe hesaplamaları için, oyuncu mesafesini yalnızca sahnedeki her şey yerine, aynı veya komşu hücrelerin içindeki nesnelerle kontrol edin.
Daha karmaşık bir yaklaşım BSP veya Octrees kullanmaktır.