1

ボールが弾力的に跳ね返り、抗力がない場合、そのボールの総エネルギー (運動 + ポテンシャル) は常に同じに保たれます。正しく機能しているかどうかを確認するためのグラフを作成しました。代わりに、このように見えます。 グラフ

最後の 4 ~ 5 ドットは無視する必要があります。これらは古いデータ (8 秒前) です。グラフは奥に行くと手前から再開します。

白は総エネルギー、シアンは運動、緑はポテンシャルです。

エネルギーの計算式:

double tempv = Math.sqrt(Math.pow(vx, 2) + Math.pow(vy, 2));
double h = (600 + -y + 53 - (0.5 * size)) / 100;
eKin = 0.5 * m * Math.pow(tempv, 2);
ePot = m * g * h;
eTot = eKin + ePot;

力の公式など

    double Fzw = g * m;
    double Fb = rho * V * g;
    Fd = 0;//0.5 * rho * Math.pow(vy, 2) * Cd * A;

    if (vy > 0)
    {
        Fres = Fzw - Fd - Fb;
    }
    else
    {
        Fres = Fzw + Fd - Fb;
    }

    a = Fres / m;


    vy += a * Main.dt;

これに使用している数式とその他すべてのコードは、こちらにあります: https://github.com/wuppy29/PWS/tree/master/src/com/wuppy/pws/src

何が間違っているのかを調べようとしましたが、なぜうまくいかなかったのかわかりません。誰かアイデアがありますか?

プログラム: https://dl.dropboxusercontent.com/u/59067404/Balls.jar

4

2 に答える 2

0

グラフを見るだけで、位置エネルギーと運動エネルギーに異なるスケールを使用していることがわかります。それらは互いの鏡像である必要があります。

于 2013-09-22T13:52:41.873 に答える
0

フォワードオイラーを使用して新しい位置を補間しています。これは補間の最も正確でない方法であり、エラーは時間の経過とともに伝播します。Runge Kuttaのようなものを考えるかもしれません。あなたが私たちに示したコードには他に問題はありません。

于 2013-09-22T17:31:52.960 に答える