移植C++;Java代码

移植C++;Java代码,java,c++,Java,C++,我在C++中有以下方法: void sphereCollisionResponse(Sphere *a, Sphere *b) { Vector3 U1x,U1y,U2x,U2y,V1x,V1y,V2x,V2y; float m1, m2, x1, x2; Vector3 v1temp, v1, v2, v1x, v2x, v1y, v2y, x(a->pos - b->pos); x.normalize(); v1 = a->ve

我在C++中有以下方法:

void sphereCollisionResponse(Sphere *a, Sphere *b)
{
    Vector3 U1x,U1y,U2x,U2y,V1x,V1y,V2x,V2y;


    float m1, m2, x1, x2;
    Vector3 v1temp, v1, v2, v1x, v2x, v1y, v2y, x(a->pos - b->pos);

    x.normalize();
    v1 = a->vel;
    x1 = x.dot(v1);
    v1x = x * x1;
    v1y = v1 - v1x;
    m1 = a->mass;

    x = x*-1;
    v2 = b->vel;
    x2 = x.dot(v2);
    v2x = x * x2;
    v2y = v2 - v2x;
    m2 = b->mass;

    a->vel = Vector3( v1x*(m1-m2)/(m1+m2) + v2x*(2*m2)/(m1+m2) + v1y );
}
这是关于球体对象的碰撞响应。 我想把它移植到Java,所以我在这里使用Vector2D类:并将代码放在Java中:

private void sphereCollisionResponse(Sphere a, Sphere b) {

        double m1, m2, x1, x2;
        Vector2D v1, v2, v1x, v2x, v1y, v2y;
        Vector2D x = new Vector2D(a.getPos().subtract(b.getPos()));

        x.normalize();
        v1 = a.getVelocity();
        x1 = x.dot(v1);
        v1x = x.multiply(x1);
        v1y = v1.subtract(v1x);
        m1 = a.getMass();

        x = x.multiply(-1);
        v2 = b.getVelocity();
        x2 = x.dot(v2);
        v2x = x.multiply(x2);
        v2y = v2.subtract(v2x);
        m2 = b.getMass();

        Vector2D av = ((v1x.multiply(m1-m2)).divide(m1+m2).add((v2x.multiply(2*m2)).divide(m1+m2))).add(v1y);
        a.setVelocity(av);
    } 
但事实证明,当球体碰撞时,我改变速度的球体会从屏幕上消失。因此,我可能在代码的移植方面遇到问题。有没有哪位对这两种语言都比较有经验的人可以检查移植的代码并告诉我是否有问题


谢谢

我对java不是很在行,但从我对java的基本知识来看,你引用的代码似乎还可以

问题可能在于最后一项作业:

Vector2D av = ((v1x.multiply(m1-m2)).divide(m1+m2).add((v2x.multiply(2*m2)).divide(m1+m2))).add(v1y);

也许由此产生的速度矢量av太大了?这也许可以解释为什么球体会从屏幕上消失。你能调试它并检查av的值吗?或者在某个地方打印它吗?

也许绘图坐标不一样。我想,在java中,(0,0)是左上角。你试过在调试器中单步执行它吗?同意@molbdnilo的说法:只需在调试器中单步执行这两个命令,或者打印出中间值。在某种程度上,这种行为必然会有所不同。是的,它太大了x:-2283.873017402746,y:539.247您确定这两个对象的质量有效吗?也许m1和m2是关闭的。