2D Fizik: önceki pozisyonu depolama ve depolama hızı


9

Bir nesnenin önceki konumunun hız vektörü yerine devlette saklandığı bir dizi 2d oyun öğreticisi ve kitabı gördüm. Daha sonra hız, her kareyi konumlar arasındaki fark olarak hesaplanır.

Bu yöntemin avantajları nelerdir?


2
Bağlam için söz konusu eğiticilere bağlantı verebilir misiniz?
Anko


Bu eğitimde buna Verlet entegrasyonu denir. Verlet'in avantajlarının açıklandığı bu makaleyi buldum . Temel olarak, çarpışmaların ve karmaşık kısıtlamaların üstesinden gelmek daha kolaydır.
Terzalo

@Terzalo Eldeki özel davanın arkasındaki genel mantığı anlamaya yardımcı olup olmadığını görmek için cevabımın güncellenmiş versiyonuna bakın
MAnd

Yanıtlar:


1

Okuduğunuz öğreticileri veya kitapları tam olarak bilmeden, size anlatabileceklerim burada.

Fizik tanımı açısından daha kesin olmak gerekirse: vektör yönü, mevcut konum ile son konum arasındaki fark olarak hesaplanır. Vektör hızı, bir konumdan diğerine geçerken geçen süreye bölünür. Bkz. Http://www.physicsclassroom.com/class/1DKin/Lesson-1/Speed-and-Velocity

Bununla birlikte, geçen zaman jenerik "1 kare" olarak kabul edildiğinde, yani son çerçeveden akıma, vektör hızı ve vektör yönü aynı olur. Sözde kodda:

direction = current_position - past_position
elapsed_time = 1 frame
velocity = direction / elapsed_time

Bu nedenle, genel olarak, pozisyonu son karede saklamanın ve mevcut karede pozisyon almanın temel nedeni, güncellenmiş yönü (ve dolayısıyla güncellenen hızı) bilmenin tek yolu veya en ucuz yolu olabilmesidir, yani mevcut karedeki hareket yönü.

Yönü (veya hızı) belirli bir çerçevede sakladığınızı varsayalım. Bir sonraki çerçevede, yönün (hatta hızın) değişip değişmediğini bilmenin tek yolu, tekrar hesaplamanızdır. Bunun nedeni, önceki yönün veya önceki hızın, hareketin bir çerçeveden diğerine değişmesi durumunda geçerli yönü veya akım hızını bilmemenizdir.

Şimdi, kendi sorunuza yorumda bahsettiğiniz öğreticiler dikkate alındığında, daha da netleşiyor. Öğreticilerden birinde yazarlar şunları söylüyor:

Şimdi parçacığımıza Verlet entegrasyonu ile nasıl hareket edileceğini öğretelim. Bu, parçacığımızın konumunu bu çerçeveyi son çerçevesiyle karşılaştırarak ne kadar hızlı hareket ettiğini bulacağımızı söylemenin süslü bir yolu. Neden? Bu bize örtük hız verdiğinden - parçacığın mevcut pozisyonundaki herhangi bir değişiklik hızını otomatik olarak güncelleyecektir

Gördüğünüz gibi, son karenin konumunu depolamak, yukarıda söylediğim gibi, nesne (öğreticide bir parçacık) konumu değiştirdiğinde geçerli karedeki hızın güncellenmiş hesaplamasına izin verir. Son karede yalnızca yönü veya hızı kaydettiyseniz , konum geçmişten geçerli kareye değiştiğinde bunu kolayca güncelleyemezsiniz. Bu nedenle, bağlandığınız diğer öğreticide de işaret edildiği gibi, önceki konumu kaydetmek, konumlar değiştiğinde hızın otomatik olarak güncellenmesini sağlar.

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.