2D Physics:以前の位置の保存と速度の保存


9

オブジェクトの以前の位置が速度ベクトルではなく状態で保存されている2Dゲームチュートリアルや本をいくつか見ました。次に、速度がフレーム間の位置の差として計算されます。

その方法の利点は何ですか?


2
問題のチュートリアルにリンクしていただけますか?
Anko、

私は
Anko

このチュートリアルでは、これを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

したがって、一般に、最後のフレームの位置を保存して現在のフレームの位置を取得する主な理由は、それが更新された方向(したがって更新された速度)を知る唯一の方法または最も安価な方法である可能性があるためです。つまり、現在のフレームでの移動方向。

特定のフレームに方向(または速度)を格納するとします。次のフレームで、方向(または速度)が変化したかどうかを知る唯一の方法は、それを再計算することです。その理由は、あるフレームから次のフレームに移動が変化した場合、前の方向または前の速度では現在の方向または現在の速度を知らせないためです。

これで、自分の質問に対するコメントで言及したチュートリアルを考慮すると、さらに明確になります。チュートリアルの1つで、著者は次のように述べています。

それでは、Verlet統合で移動する方法をパーティクルに教えましょう。これは、このフレームの位置を最後のフレームの位置と比較することで、パーティクルがどれだけ速く移動しているかを知るための、空想的な方法です。どうして?暗黙的な速度が得られるため、パーティクルの現在位置を変更すると、速度が自動的に更新されます

ご覧のように、最後のフレームの位置を保存すると、前述のように、オブジェクト(チュートリアルではパーティクル)の位置が変化したときに、現在のフレームで速度の計算が更新されます。最後のフレームで方向または速度のみを保存した場合、位置が過去のフレームから現在のフレームに変更された場合に、それを簡単に更新することはできません。したがって、リンク先の他のチュートリアルでも指摘されているように、以前の位置を保存すると、位置が変化したときに速度を自動的に更新できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.