当球弹性弹跳而没有阻力时,球的总能量(动能+潜力)应始终保持不变。 我创建了一个图表,以确定它是否正常工作,但没有。相反,它看起来像这样。
应忽略最后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
我试图找出问题所在,但我不知道为什么它不起作用。有人有想法吗?
答案 0 :(得分:0)
只是从图中看,我可以说你正在使用不同的尺度来获得潜力和动能。它们应该是彼此的镜像。
答案 1 :(得分:0)
您正在使用forward euler来插入新位置,这是最不准确的插值方式,错误只是随着时间的推移而传播。您可以考虑Runge Kutta之类的内容。我看到你向我们展示的代码没有其他任何问题。