問題タブ [verlet-integration]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
11633 参照

physics - Verlet 積分が Euler 積分より優れているのはなぜですか?

Verlet 積分が Euler 積分より優れている理由を誰か説明してもらえますか? そして、なぜ RK4 は Verlet よりも優れているのでしょうか? なぜそれがより良い方法なのか理解できません。

0 投票する
1 に答える
1995 参照

game-physics - verlet 統合による非常に基本的な衝突解決

私は自分の娯楽のためにいくつかの非常に基本的な物理学を行う方法を学んでいますが、奇妙な問題に遭遇しています.

http://www.lonesock.net/article/verlet.htmlで説明されているように、時間補正されたベルレット統合方法を使用していますが、これまでのところ、かなりうまく機能しています。動きも物も全部いい感じです。

私の問題は、衝突の解決に関して発生します。地形は動かないので、地形に対して解決できます (かなりうまくいくようです)。プレイヤーの現在位置を安全な場所に設定したところ、問題はないようです。しかし、別のスプライト (物理的なアクターなど) に対して解決しようとすると、物事があちこちで発砲するように見えます。

私の解決コードは次のようになります。

ご覧のとおり、衝突したスプライトが物理的なものかどうかによって、3 つのケースがあります。

おそらく、この問題が発生した最初のケ​​ースです。そして、同じ関数を使用して、(一見動作している) 地形衝突にある貫通深度を取得しています。

衝突したスプライトがあちこちに飛んでいくのはなぜですか? 私はこの問題にかなり困惑しています。どんな助けでも素晴らしいでしょう。

0 投票する
2 に答える
1883 参照

time - Time Corrected Verlet Integration と大きすぎるタイムステップ

私はここにある時間補正Verlet統合を使用しています: http://www.gamedev.net/page/resources/_/technical/math-and-physics/a-simple-time-corrected-verlet-integration-method-r2200

しかし、しばらくの間、ボールが壁 (水平の壁、その上にボールがあり、加速度が下向き) の上にあると、ゲームが正しい方法で衝突を認識できず、ボールが下に落ちます。1/60 のように deltatime に固定キャップを設定すると、うまくいくようです。

問題はタイムステップが大きすぎると思います。しかし、時間補正されたベルレットの統合は、タイムステップが大きすぎるのを避けるために行われますね。はいの場合、タイム キャップが必要な理由を教えてください。

0 投票する
2 に答える
2612 参照

physics - ベルレ インテグレータ + フリクション

私はGamedev.net の「2D ゲーム物理に対する Verlet ベースのアプローチ」に従っており、似たようなことを書いています。

私が抱えている問題は、ボックスが地面に沿って滑りすぎていることです. ボックスがより多くの摩擦を持ち、ほんの少しだけスライドする単純な静止状態を追加するにはどうすればよいですか?

0 投票する
1 に答える
977 参照

java - 周期的分子動力学シミュレーションで Velocity Verlet アルゴリズムを実装した場合の暴走速度

周期的境界条件または反射境界条件のいずれかを使用して、レナード・ジョーンズ流体の分子動力学シミュレーションを 2d ボックスに記述しようとしています。シミュレーションは反射境界でうまく動作しているように見えますが、何らかの理由で周期ボックス内の粒子は、数百回の積分ステップの後、余分な速度を得始め、最終的には粒子がボックス内に残りません。

時間ステップの設定が小さすぎると暴走速度が発生する可能性があることを理解しています。ただし、同じ速度-ベルレット アルゴリズムを使用してシミュレーションを実行すると、特に反射境界が非常にうまく機能するため、これが暴走速度の理由になる可能性があることがわかりません。この 2 つのケースでは、粒子にかかる力または粒子の分離を評価するために使用される方法に誤りがある可能性があると思いますが、自分で見つけることはできません。

力を評価するために使用しているコードは次のようになります。

これは、各粒子に作用するレナード・ジョーンズ力を与えると考えられています。粒子の分離は、境界条件によって決まります。反射の場合は次のとおりです。

と組み合わせて使用​​ されます

ボックス内に粒子を保持します。一方、定期的に...

粒子分離を与え、

境界をチェックします。どちらの分離方法も呼び出します

これは、デカルト空間における 2 つの粒子のベクトル分離です。周期的な境界条件でシミュレーションが失敗するのは、コーディングに誤りがあるか、またはその他の理由がありますか?

ありがとう

0 投票する
4 に答える
13169 参照

python - より高速な Python 物理シミュレーターの作成

私は、物理とプログラミングの演習として、Python で独自の物理エンジンを作成して遊んでいます。ここにあるチュートリアルに従うことから始めました。それはうまくいきましたが、その後、Thomas jakobsen による「Advanced character physics」という記事を見つけました。この記事では、シミュレーションに Verlet 統合を使用する方法が取り上げられており、興味深いものでした。

verlet 統合を使用して、独自の基本的な物理シミュレーターを作成しようとしていますが、最初に予想したよりも少し難しいことがわかりました。私はサンプルプログラムを読んで外に出ていて、Python で書かれたこのプログラムに出くわし、Processing を使用するこのチュートリアルも見つけました。

Processing バージョンで印象に残っているのは、実行速度の速さです。布だけでも 2400 の異なるポイントがシミュレートされていますが、これにはボディは含まれていません。

Python の例では、クロスに 256 個のパーティクルのみを使用しており、毎秒約 30 フレームで実行されます。パーティクルの数を 2401 に増やしてみました (そのプログラムが機能するには正方形である必要があります)、約 3 fps で実行されました。


これらはどちらも、パーティクル オブジェクトのインスタンスをリストに格納し、リストを反復処理して、各パーティクルの「位置の更新」メソッドを呼び出すことによって機能します。例として、これは各パーティクルの新しい位置を計算する処理スケッチのコードの一部です。

編集:以前にリンクしたpythonバージョンのコードは次のとおりです。


両方のプログラムはほぼ同じように動作しますが、Python バージョンは非常に遅いため、次のように考えさせられます。

  • このパフォーマンスの違いは Python の性質の一部ですか?
  • 独自の Python プログラムのパフォーマンスを向上させたい場合、上記とは別の方法で何を行う必要がありますか? たとえば、個々のオブジェクトなどを使用する代わりに、すべてのパーティクルのプロパティを配列内に格納します。

編集:答えた!!

コメントで@Mr EのリンクされたPyConトーク、および@A. リンクされたリソースを使用した Rosa の回答はすべて、優れた高速の Python コードを作成する方法をよりよく理解するのに非常に役立ちました。今後の参考のために、このページをブックマークしています:D

0 投票する
3 に答える
6988 参照

python - Runge–Kutta RK4 は Verlet よりも優れていませんか?

ゲームの軌道ダイナミクスのいくつかの統合スキームをテストしているところです。ここで一定の適応ステップでRK4を取りました http://www.physics.buffalo.edu/phy410-505/2011/topic2/app1/index.html

そして、それを単純なベルレット統合(およびオイラーですが、パフォーマンスが非常に悪い)と比較しました。一定のステップを備えたRK4がベルレよりも優れているとは思えません。アダプティブステップを備えたRK4の方が優れていますが、それほどではありません。私は何か間違ったことをしているのだろうか?それとも、どのような意味で RK4 がベルレよりもはるかに優れていると言われていますか?

Force は RK4 ステップごとに 4 回評価されますが、verlet ステップごとに 1 回だけ評価されると考えられます。したがって、同じパフォーマンスを得るために、verlet の time_step を 4 倍小さく設定できます。時間ステップが 4 倍小さい場合、verlet は一定ステップの RK4 よりも正確であり、アダプティブ ステップの RK4 とほぼ同等です。

画像を参照してください: https://lh4.googleusercontent.com/-I4wWQYV6o4g/UW5pK93WPVI/AAAAAAAAA7I/PHSsp2nEjx0/s800/kepler.png

10T は 10 軌道周期を意味し、次の数字 48968,7920,48966 は必要な力の評価の数です。

Python コード (pylab を使用) は次のとおりです。

0 投票する
1 に答える
918 参照

c# - ラグドール ジョイント角度の制約

Thomas Jakobsen の記事http://www.gpgstudy.com/gpgiki/GDC%202001%3A%20Advanced%20Character%20Physicsに基づいて、ラグドールに関する C# プロジェクトを行っています。

ロジックを 2D に変換しましたが、すべてが機能しているように見えますが、角度制約の実装に問題があります。

これは私が現在使用しているコードです:

パーティクル p1 と p はジョイントで、getFixPoint() は親ジョイントの位置を返します。RotatePoint(point, centerPoint, angleRad) は、centerPoint を中心に angleRad ラジアンだけ回転したポイントの位置を返します。

このコードは深刻なジッターを引き起こします。私は Verlet 統合を使用しているため、変換を古い位置にも追加することでこれを補正しようとしましたが、これで問題の一部は解決したようですが、それでも深刻なジッターが発生し、私の数学が悪いと私に信じさせるランダムな力の適用。

親ジョイントを中心に回転している場合、ジョイント間の距離は一定でなければならないため、距離拘束の後にこの拘束を適用しています。

これは私の最初のスタックオーバーフローの質問です。私のフォームが悪いかどうか教えてください。

0 投票する
3 に答える
382 参照

haskell - Haskell での Verlet の統合

私は Haskell を初めて使用し、演習として、Joel Franklin の著書Computational Methods in Physicsから (Mathematica で記述された) コードの一部を実装しようとしました。最初の引数としてラムダ式 (加速度) を受け取る次のコードを作成しました。一般に、加速度は x'' = f(x',x,t) の形式ですが、常に 3 つの変数すべてであるとは限りません。

ghci では、次のコマンドでこのコードを実行します (加速関数 a = -(2pi) 2 x は本の練習問題から来ています)。

私の問題は、これが実際には Verlet 法ではないことです。ここでは x n+1 = x n + dt*v n +1/2*a(x n ,v n ,n) ですが、Verlet 法はウィキペディアで説明されています。 x n+1 = 2*x n - x n-1 +a(x n ,v n ,n) になります。Verlet 積分法をより忠実に表現するには、この関数をどのように書き直せばよいでしょうか?

接線的に、これをよりエレガントかつ簡潔に書く方法はありますか? これを容易にする線形代数ライブラリはありますか? アドバイスありがとうございます。

0 投票する
2 に答える
4904 参照

c++ - 太陽系シミュレーション プロジェクト (Velocity verlet ヘルプ)

モデリングとシミュレーション クラスのプロジェクトで、太陽系をシミュレートしたいと考えています。私は星 (太陽) と惑星 (地球) から始めていますが、すでにいくつかの問題に直面しています。私は今、惑星の軌道が星と周囲の物体によってどのように影響を受けるかをシミュレートするためのさまざまな式と方法について確認し、学習することに時間を費やしました. 速度ベルレットを使用して、最終的に n 体の問題を調べたいと考えています。Velocity verlet 関数に多くの問題があります。時々、あたかもそれが地球の軌道を正常に周回しているかのように振る舞い、その後、地球をランダムな場所に「ワープ ドライブ」します。また、「負の」加速度が得られないことにも気付いたので、x と y の座標です。常に増加しているので、地球が太陽の周りをどのように包み込むのかわかりません. どんな助けでも大歓迎です。私が持っている AGK::Prints は、さまざまな変数がどのように変化しているかを確認するためのものです。