Fisika 2D: menyimpan posisi sebelumnya vs menyimpan kecepatan

9

Saya melihat sejumlah tutorial permainan 2d dan buku-buku di mana posisi sebelumnya dari suatu objek disimpan dalam keadaan bukan vektor kecepatan. Kecepatan kemudian dihitung setiap frame sebagai perbedaan antara posisi.

Apa kelebihan metode itu?

Terzalo
sumber
2
Bisakah Anda menautkan ke tutorial yang dimaksud, untuk konteks?
Anko
Saya berbagi rasa ingin tahu yang sama dari Anko
dnk drone.vs.drones
Tutorial ini menyebutkan bahwa ini disebut integrasi Verlet. Saya menemukan artikel ini , yang menjelaskan kelebihan Verlet. Pada dasarnya, lebih mudah untuk menangani tabrakan dan kendala kompleks.
Terzalo
@Terzalo Lihat versi terbaru dari jawaban saya untuk melihat apakah itu membantu memahami logika umum di balik kasus spesifik yang ada
Mei

Jawaban:

1

Tanpa tahu persis tutorial atau buku yang telah Anda baca, inilah yang dapat saya sampaikan.

Untuk lebih tepat dalam hal definisi fisika: arah vektor dihitung sebagai perbedaan antara posisi saat ini dan posisi terakhir. Kecepatan vektor sama dengan yang dibagi dengan waktu yang berlalu ketika berpindah dari satu posisi ke posisi lain. Lihat: http://www.physicsclassroom.com/class/1DKin/Lesson-1/Speed-and-Velocity

Namun, ketika waktu yang berlalu dianggap sebagai generik "1 frame", yaitu dari frame terakhir ke arus, maka kecepatan vektor dan arah vektor menjadi sama. Dalam pseudo-code:

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

Jadi, secara umum, alasan utama untuk menyimpan posisi di frame terakhir dan mendapatkan posisi di frame saat ini adalah bahwa itu bisa menjadi satu-satunya cara atau cara termurah untuk mengetahui arah yang diperbarui (dan karena itu kecepatan yang diperbarui), yaitu arah gerakan dalam bingkai saat ini.

Misalkan Anda menyimpan arah (atau bahkan kecepatan) dalam bingkai yang diberikan. Pada frame berikutnya, satu-satunya cara untuk mengetahui apakah arah (atau bahkan kecepatan) telah berubah adalah jika Anda menghitungnya lagi. Alasannya adalah bahwa arah sebelumnya atau kecepatan sebelumnya tidak memberi tahu Anda arah saat ini atau kecepatan saat ini jika gerakan berubah dari satu frame ke yang berikutnya.

Sekarang, dengan mempertimbangkan tutorial yang telah Anda sebutkan di komentar untuk pertanyaan Anda sendiri, itu menjadi lebih jelas. Dalam salah satu tutorial, penulis mengatakan bahwa:

Sekarang, mari ajari partikel kita bagaimana bergerak dengan integrasi Verlet. Itu hanya cara yang bagus untuk mengatakan bahwa kita akan mengetahui seberapa cepat partikel kita bergerak dengan membandingkan posisinya dengan bingkai ini dengan posisinya di frame terakhir. Mengapa? Karena itu memberi kita kecepatan implisit - setiap perubahan pada posisi partikel saat ini akan secara otomatis memperbarui kecepatannya

Jadi, seperti yang Anda lihat, menyimpan posisi frame terakhir memungkinkan, seperti yang saya katakan di atas, perhitungan kecepatan yang diperbarui dalam frame saat ini ketika objek (dalam tutorial itu adalah partikel) mengubah posisi. Jika Anda hanya menyimpan arah atau kecepatan di frame terakhir, Anda tidak akan dapat memperbaruinya dengan mudah jika posisi berubah dari masa lalu ke frame saat ini. Oleh karena itu, seperti juga ditunjukkan dalam tutorial lain yang Anda tautkan, menyimpan posisi sebelumnya memungkinkan pembaruan kecepatan secara otomatis ketika posisi berubah.

Dan
sumber