我必須模擬粒子分裂成粒子。 我的模擬功能決定從分割中有多少粒子脫落。 然後調用它自己來模擬它取決於它決定分割成多少粒子。在繼續下一級循環之前,如何讓遞歸函數讀取每個新實例?
下面的代碼:
void Reaction::Simulate(double energy, TwoVector position)
{
int RandomNumber= qrand() %3+1;//starting particle
energy = energy/RandomNumber; // change energy for each reaction
double time=1.0;
std::cout<<RandomNumber<<std::endl;
if (RandomNumber==1){
LightParticle* i=new LightParticle(energy, position);
int speed = 3;
i->SimulatePath(time, speed, i->GetPosition());
i->GetPosition().Print();
energy--;
Simulate(energy, i->GetPosition());
}
else if (RandomNumber==2){
MediumParticle* j=new MediumParticle(energy, position);
MediumParticle* k=new MediumParticle(energy, position);
int speed = 2;
j->SimulatePath(time,speed, position);
k->SimulatePath(time,speed, position);
j->GetPosition().Print();
k->GetPosition().Print();
Simulate(energy, j->GetPosition());
Simulate(energy, k->GetPosition());
}
else if (RandomNumber==3) {
HeavyParticle* l = new HeavyParticle(energy, position);
HeavyParticle* m = new HeavyParticle(energy, position);
HeavyParticle* n = new HeavyParticle(energy, position);
int speed = 1;
l->SimulatePath(time,speed, position);
l->GetPosition().Print();
m->SimulatePath(time,speed, position);
m->GetPosition().Print();
n->SimulatePath(time,speed, position);
n->GetPosition().Print();
Simulate(energy, l->GetPosition());
Simulate(energy, m->GetPosition());
Simulate(energy, n->GetPosition());
}
else return;
}
正如你可以從代碼中看到,那就只一個路徑的最深層次移動到下一個前。我怎樣才能使它沿着每條路徑同時進行?
對於將來的問題,請確保您的代碼格式正確。格式不正確的代碼非常難以分析,因此極難調試。 – Xirema
哇,看上去好多了,謝謝 –
也許最好是代表一個結構中的所有粒子,比如'std :: vector',然後在一次迭代中運行'Simulate',然後重複多次因爲你認爲有必要。避免'新'。使用vector可以使用'push_back'來添加每個新粒子。 – wally