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