Guest User

Untitled

a guest
Jul 1st, 2015
544
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.01 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.     int i,j,k,s,N, P=100, stolknovenie=0;
  10.     cout<<"Kolichestvo tel ";
  11.     cin>>N;
  12.     double X[N],Y[N],Z[N],Vx[N],Vy[N],Vz[N],ax[N],ay[N],az[N],R[N],M[N],G=6.67191E-11, t, delta_t, eps0=0.01, eps, RV1[N], RV2[N];
  13.     double Xn[N],Yn[N],Zn[N],Vxn[N],Vyn[N],Vzn[N];
  14.     for(i=0;i<N;i++)
  15.     {
  16.         cout<<i<<" massa, kg";
  17.         cin>>M[i];
  18.         cout<<" Radiys, metr";
  19.         cin>>R[i];
  20.         cout<<"x, y, z, metr";
  21.         cin>>Xn[i]>>Yn[i]>>Zn[i];
  22.         cout<<"Vx, Vy, Vz, metr/sek";
  23.         cin>>Vxn[i]>>Vyn[i]>>Vzn[i];
  24.         cout<<"vremia dvijeniia, sek";
  25.         cin>>t;
  26.         ax[i]=ay[i]=az[i]=0;
  27.     }
  28.     do
  29.     {
  30.         for(i=0;i<N;i++)
  31.         {
  32.             X[i]=Xn[i];
  33.             Y[i]=Yn[i];
  34.             Z[i]=Zn[i];
  35.             Vx[i]=Vxn[i];
  36.             Vy[i]=Vyn[i];
  37.             Vz[i]=Vzn[i];
  38.             ax[i]=ay[i]=az[i]=0;
  39.         }
  40.         eps=0;
  41.         delta_t=t/P;
  42.         for(k=0;k<P;k++)
  43.         {
  44.             for(i=0;i<N;i++)
  45.             {
  46.                 for(j=0;j<N;j++)
  47.                 {
  48.                     if(i!=j)
  49.                     {
  50.                         ax[i]+=G*M*(X[j]-X[i])/pow(sqrt((X[j]-X[i])*(X[j]-X[i])+(Y[j]-Y[i])*(Y[j]-Y[i])+(Z[j]-Z[i])*(Z[j]-Z[i])),3);
  51.                         ay[i]+=G*M*(Y[j]-Y[i])/pow(sqrt((X[j]-X[i])*(X[j]-X[i])+(Y[j]-Y[i])*(Y[j]-Y[i])+(Z[j]-Z[i])*(Z[j]-Z[i])),3);
  52.                         az[i]+=G*M*(Z[j]-Z[i])/pow(sqrt((X[j]-X[i])*(X[j]-X[i])+(Y[j]-Y[i])*(Y[j]-Y[i])+(Z[j]-Z[i])*(Z[j]-Z[i])),3);
  53.                     }
  54.                 }
  55.                 Vx[i]+=ax[i]*delta_t;
  56.                 Vy[i]+=ay[i]*delta_t;
  57.                 Vz[i]+=az[i]*delta_t;
  58.  
  59.                 X[i]+=Vx[i]*delta_t+ax[i]*delta_t*delta_t/2;
  60.                 Y[i]+=Vy[i]*delta_t+ay[i]*delta_t*delta_t/2;
  61.                 Z[i]+=Vz[i]*delta_t+az[i]*delta_t*delta_t/2;
  62.             }
  63.         }
  64.         for(i=0;i<N;i++)
  65.         {
  66.             RV1[i]=sqrt(X[i]*X[i]+Y[i]*Y[i]+Z[i]*Z[i]);
  67.         }
  68.         P=P*2;
  69.         delta_t=t/P;
  70.         for(i=0;i<N;i++)
  71.         {
  72.             X[i]=Xn[i];
  73.             Y[i]=Yn[i];
  74.             Z[i]=Zn[i];
  75.             Vx[i]=Vxn[i];
  76.             Vy[i]=Vyn[i];
  77.             Vz[i]=Vzn[i];
  78.             ax[i]=ay[i]=az[i]=0;
  79.         }
  80.         for(k=0;k<P;k++)
  81.         {
  82.             for(i=0;i<N;i++)
  83.             {
  84.                 for(j=0;j<N;j++)
  85.                 {
  86.                     if(i!=j)
  87.                     {
  88.                         ax[i]+=G*M*(X[j]-X[i])/pow(sqrt((X[j]-X[i])*(X[j]-X[i])+(Y[j]-Y[i])*(Y[j]-Y[i])+(Z[j]-Z[i])*(Z[j]-Z[i])),3);
  89.                         ay[i]+=G*M*(Y[j]-Y[i])/pow(sqrt((X[j]-X[i])*(X[j]-X[i])+(Y[j]-Y[i])*(Y[j]-Y[i])+(Z[j]-Z[i])*(Z[j]-Z[i])),3);
  90.                         az[i]+=G*M*(Z[j]-Z[i])/pow(sqrt((X[j]-X[i])*(X[j]-X[i])+(Y[j]-Y[i])*(Y[j]-Y[i])+(Z[j]-Z[i])*(Z[j]-Z[i])),3);
  91.                     }
  92.                 }
  93.                 Vx[i]+=ax[i]*delta_t;
  94.                 Vy[i]+=ay[i]*delta_t;
  95.                 Vz[i]+=az[i]*delta_t;
  96.  
  97.                 X[i]+=Vx[i]*delta_t+ax[i]*delta_t*delta_t/2;
  98.                 Y[i]+=Vy[i]*delta_t+ay[i]*delta_t*delta_t/2;
  99.                 Z[i]+=Vz[i]*delta_t+az[i]*delta_t*delta_t/2;
  100.  
  101.                 for(j=0;j<N;j++)
  102.                 {
  103.                     for(s=i;s<N;s++)
  104.                     {
  105.                         if(s!=j)
  106.                         {
  107.                             if(sqrt((X[j]-X[i])*(X[j]-X[i])+(Y[j]-Y[i])*(Y[j]-Y[i])+(Z[j]-Z[i])*(Z[j]-Z[i]))<(R[i]+R[j]))
  108.                             {
  109.                                 stolknovenie++;
  110.                                 k=P;
  111.                             }
  112.                         }
  113.                     }
  114.                 }
  115.             }
  116.         }
  117.         for(i=0;i<N;i++)
  118.         {
  119.             RV2[i]=sqrt(X[i]*X[i]+Y[i]*Y[i]+Z[i]*Z[i]);
  120.             eps+=fabs((RV1[i]-RV2[i])/RV2[i]);
  121.         }
  122.         if(stolknovenie>50)
  123.             eps=-1;
  124.     }while(eps>eps0);
  125.  
  126.     return 0;
  127. }
Advertisement
Add Comment
Please, Sign In to add comment