类函数问题.C++

Class function issue. C++

本文关键字:C++ 问题 类函数      更新时间:2023-10-16

我目前正在编写模拟理想气体碰撞的代码。这种情况下的碰撞是弹性的(没有能量损失)。我已经编写了代码来计算我所需要的一切,包括他们会面的时间和地点。在我的类函数中,我定义:

Particle.cpp

    void Particle::collideParticles(Particle particle){
    double tCollision;
    tCollision=timeToCollision(particle);

    if(tCollision >= 0 && (!testFloat(tCollision,FLT_MAX, 0.1))){
        move(tCollision);
        particle.move(tCollision);
        Vector r2=particle.getPosition();
        Vector r1=p;
        Vector r0=r2-r1;
        Vector n=r0.unit();
        Vector v1=n;
        Vector v2=n;
        v1.Scale(v.dot(n));
        v2.Scale(particle.getVelocity().dot(n));
        Vector deltaV=v2-v1;
        setVelocity(v+deltaV);
        particle.setVelocity(particle.getVelocity()-deltaV);
    }
}

很抱歉混淆了术语。

  • Vector指的是具有分量x,y,z的类。

  • Scale,缩放矢量(x,y,z)

  • CCD_ 4取一个单位向量。

  • timeToCollision是较早的类函数,用于计算并返回两个粒子碰撞的时间。

  • FLT_MAX<cfloat>中的一个值,它在我的问题中不起作用,因为示例在0和FLT_MAX中。列表项

通过使用定制值,我已经建立了这个代码的工作;但是,当我在中调用这个函数时

Main.cpp

    Vector p1p(0,0,0);
    Vector p1v(1,0,0);
    Vector p2p(5,0,0);
    Vector p2v(0,0,0);
    Particle p1(1, p1p, p1v);
    Particle p2(1, p2p, p2v);
    cout << "Velocity of p1 before collide should be 1 on X, value is: " << p11.getVelocity().GetX() << endl;
    cout << "Velocity of p2 before collide should be 0 on X, value is: " << p2.getVelocity().GetX() << endl;
    p1.collideParticles(p2);
    cout << "Velocity of p1 should be 0 on X, value is: " << p11.getVelocity().GetX() << endl;
    cout << "Velocity of p2 should be 1 on X, value is: " << p2.getVelocity().GetX() << endl;

我得到,粒子1的速度,从x开始是1,到结束是0,这是正确的。虽然它给出了粒子2的速度,x,开始时为0,碰撞后再次为0。

我觉得这可能是我犯的一个简单的错误,或者是我忘记了什么,我只是把自己的压力压到了无法察觉的地步。非常感谢任何帮助。请务必要求进一步澄清或解释任何内容。

丹。

您需要将粒子作为引用传递,现在您只传递粒子对象的副本,当函数结束时,它将被销毁。将功能定义从:更改

void Particle::collideParticles(Particle particle){
}

void Particle::collideParticles(Particle &particle){
}

我不确定这是否解决了你的问题,但你设计方法collideParticles(Particle particle)的方式不是操纵Particle p2的速度,而是操纵该对象副本的速度。您可以尝试将方法更改为collideParticles(Particle& particle)。通过使用引用Particle&,您实际上可以更改对象p2