ฟิสิกส์ 2D: การจัดเก็บตำแหน่งก่อนหน้านี้กับการจัดเก็บความเร็ว


9

ฉันเห็นบทช่วยสอนเกม 2d และหนังสือจำนวนหนึ่งซึ่งตำแหน่งก่อนหน้าของวัตถุถูกเก็บไว้ในสถานะแทนที่จะเป็นเวกเตอร์ความเร็ว ความเร็วจะถูกคำนวณในแต่ละเฟรมเป็นความแตกต่างระหว่างตำแหน่ง

ข้อดีของวิธีการนี้คืออะไร


2
คุณสามารถลิงค์ไปยังบทเรียนที่เป็นปัญหาสำหรับบริบทได้หรือไม่
Anko

ฉันแบ่งปันความอยากรู้แบบเดียวกันของ Anko
dnk drone.vs.drones

บทช่วยสอนนี้กล่าวถึงสิ่งนี้เรียกว่าการรวม Verlet ฉันพบบทความนี้ซึ่งมีการอธิบายถึงข้อดีของ Verlet โดยทั่วไปจะง่ายต่อการจัดการการชนและข้อ จำกัด ที่ซับซ้อน
Terzalo

@Terzalo ดูรุ่นที่ปรับปรุงคำตอบของฉันเพื่อดูว่ามันจะช่วยให้การทำความเข้าใจตรรกะทั่วไปที่อยู่เบื้องหลังกรณีเฉพาะที่มือ
mand

คำตอบ:


1

โดยไม่ทราบว่าบทเรียนหรือหนังสือที่คุณได้อ่านตรงนี้คือสิ่งที่ฉันสามารถบอกคุณได้

เพื่อให้แม่นยำยิ่งขึ้นในแง่ของคำจำกัดความของฟิสิกส์: ทิศทางเวกเตอร์ถูกคำนวณเป็นความแตกต่างระหว่างตำแหน่งปัจจุบันและตำแหน่งสุดท้าย ความเร็วเวคเตอร์เท่ากับที่หารด้วยเวลาที่ผ่านไปเมื่อไปจากตำแหน่งหนึ่งไปอีกตำแหน่งหนึ่ง ดู: http://www.physicsclassroom.com/class/1DKin/Lesson-1/Speed-and-Velocity

อย่างไรก็ตามเมื่อเวลาที่ผ่านไปได้รับการพิจารณาว่าเป็น "1 เฟรม" ทั่วไปเช่นจากเฟรมสุดท้ายไปจนถึงปัจจุบันความเร็วเวคเตอร์และทิศทางเวกเตอร์จะเท่ากัน ในรหัสปลอม:

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

โดยทั่วไปแล้วเหตุผลหลักในการจัดเก็บตำแหน่งในเฟรมสุดท้ายและการรับตำแหน่งในเฟรมปัจจุบันคืออาจเป็นวิธีเดียวหรือวิธีที่ถูกที่สุดในการรู้ทิศทางที่ถูกต้อง (และดังนั้นความเร็วที่อัปเดต) เช่นทิศทางการเคลื่อนไหวในเฟรมปัจจุบัน

สมมติว่าคุณเก็บทิศทาง (หรือแม้แต่ความเร็ว) ในเฟรมที่กำหนด ในเฟรมถัดไปวิธีเดียวที่จะรู้ว่าทิศทาง (หรือแม้แต่ความเร็ว) มีการเปลี่ยนแปลงคือถ้าคุณคำนวณมันอีกครั้ง เหตุผลที่ทิศทางก่อนหน้าหรือความเร็วก่อนหน้านี้ไม่อนุญาตให้คุณทราบทิศทางปัจจุบันหรือความเร็วปัจจุบันในกรณีที่การเคลื่อนไหวเปลี่ยนจากเฟรมหนึ่งเป็นเฟรมถัดไป

ตอนนี้โดยคำนึงถึงบทเรียนที่คุณได้กล่าวถึงในความคิดเห็นสำหรับคำถามของคุณเองมันยิ่งชัดเจนยิ่งขึ้น หนึ่งในบทเรียนที่ผู้เขียนบอกว่า:

ตอนนี้เรามาสอนวิธีการย้ายอนุภาคด้วยการรวม Verlet นั่นเป็นวิธีแฟนซีที่จะบอกว่าเรากำลังจะหาว่าอนุภาคของเราเคลื่อนที่เร็วแค่ไหนโดยการเปรียบเทียบตำแหน่งของเฟรมนี้กับตำแหน่งสุดท้ายของเฟรม ทำไม? เพราะนั่นทำให้เรามีความเร็วโดยปริยาย - การเปลี่ยนแปลงตำแหน่งปัจจุบันของอนุภาคใด ๆ จะอัปเดตความเร็วโดยอัตโนมัติ

ดังนั้นอย่างที่คุณเห็นการจัดเก็บตำแหน่งเฟรมสุดท้ายช่วยให้ดังที่ฉันได้กล่าวไว้ข้างต้นการคำนวณความเร็วที่ปรับปรุงแล้วในเฟรมปัจจุบันเมื่อวัตถุ (ในบทช่วยสอนเป็นอนุภาค) เปลี่ยนตำแหน่ง หากคุณบันทึกเฉพาะทิศทางหรือความเร็วในเฟรมสุดท้ายคุณจะไม่สามารถอัปเดตได้อย่างง่ายดายในกรณีที่ตำแหน่งเปลี่ยนจากอดีตเป็นเฟรมปัจจุบัน ดังนั้นตามที่ระบุไว้ในบทช่วยสอนอื่น ๆ ที่คุณเชื่อมโยงด้วยการบันทึกตำแหน่งก่อนหน้าช่วยให้สามารถอัปเดตความเร็วโดยอัตโนมัติเมื่อมีการเปลี่ยนตำแหน่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.