物理与Java的球,能源不工作

时间:2013-09-22 13:43:44

标签: java physics

当球弹性弹跳而没有阻力时,球的总能量(动能+潜力)应始终保持不变。 我创建了一个图表,以确定它是否正常工作,但没有。相反,它看起来像这样。 graph

应忽略最后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

2 个答案:

答案 0 :(得分:0)

只是从图中看,我可以说你正在使用不同的尺度来获得潜力和动能。它们应该是彼此的镜像。

答案 1 :(得分:0)

您正在使用forward euler来插入新位置,这是最不准确的插值方式,错误只是随着时间的推移而传播。您可以考虑Runge Kutta之类的内容。我看到你向我们展示的代码没有其他任何问题。