Nbody代码的近遇条件

时间:2014-10-08 03:32:00

标签: c++ collision-detection conditional-statements collision orbital-mechanics

我使用leapfrog算法编写了一个简单的N体代码。现在我要做的是创造一个近距离接触条件。我希望代码在两个粒子比一定距离更近时让我知道。这就是我想出来的,在我看来它应该有效,但事实并非如此。它是在c ++中: 在代码中:num是粒子数,r [num] [3]是一个全局2d数组,它保存每个粒子的三维位置(x,y,z坐标)。 我只是编写函数check_collisions,它在时间循环下的main函数中执行,这将演变系统。 我试图做的是存储任何给定粒子对之间的距离,并将它们与一些距离进行比较(在本例中为rad [i] + rad [j],其中rad [num]是半径的全局数组每个粒子)。如果2个粒子之间的距离小于rad [i] + rad [j],那么我希望变量dummy增加。然后我想做一些这些粒子的东西,让其他粒子完好无损。 问题是假人无论如何都是0。我独立检查我的一个试验中的2个粒子实际上彼此接近几个时间步,但虚拟变量保持为零。 这是功能

int check_collisions(int num, double dt) 
{ double rji[3]; double r2, dis; int dummy = 0;
   double rad_sum[num][num];  double coll_dis[num][num];
   for (int l = 0; l < num; l++)
    { for (int m = 0; m < num; m++)  
      { coll_dis[l][m] = 10000; rad_sum[l][m] = 0;} }

  for (int i = 0; i < num; i++)
   { for (int j = i+1; j < num; j++)  
     {  
      for (int k = 0; k < 3; k++)
        { rji[k] = r[j][k] - r[i][k]; }  
      for (int k = 0; k < 3; k++) 
        { r2 += rji[k] * rji[k];      }
      dis = sqrt(r2);
      coll_dis[i][j] = dis;
      rad_sum[i][j] = rad[i]+rad[j];
      }//end for j
   }//end for i

  for (int i = 0; i < num; i++)
  { for (int j = i+1; j < num; j++)
    {      
      if ( coll_dis[i][j] <= rad_sum[i][j] )
      {   dummy++;
      }

      if (dummy != 0)
       {    do {  some stuff involving dt
             }  while (coll_dis[i][j] <= rad_sum[i][j]);
       }

    }
   }

}

0 个答案:

没有答案