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

您正在使用正向欧拉来插值新位置,这是最不准确的插值方式,误差只会随着时间的推移而传播。您可能会考虑像Runge Kutta 之类的东西。我认为您向我们展示的代码没有其他问题。

于 2013-09-22T17:31:52.960 回答
0

仅通过查看图表,我就可以看出您正在使用不同的标度来表示势能和动能。它们应该是彼此的镜像。

于 2013-09-22T13:52:41.873 回答