类函数问题.C++
Class function issue. C++
我目前正在编写模拟理想气体碰撞的代码。这种情况下的碰撞是弹性的(没有能量损失)。我已经编写了代码来计算我所需要的一切,包括他们会面的时间和地点。在我的类函数中,我定义:
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
。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题