Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <fstream>
- using namespace std;
- int main()
- {
- int i,j,k,s,N, P=100, stolknovenie=0;
- cout<<"Kolichestvo tel ";
- cin>>N;
- 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];
- double Xn[N],Yn[N],Zn[N],Vxn[N],Vyn[N],Vzn[N];
- for(i=0;i<N;i++)
- {
- cout<<i<<" massa, kg";
- cin>>M[i];
- cout<<" Radiys, metr";
- cin>>R[i];
- cout<<"x, y, z, metr";
- cin>>Xn[i]>>Yn[i]>>Zn[i];
- cout<<"Vx, Vy, Vz, metr/sek";
- cin>>Vxn[i]>>Vyn[i]>>Vzn[i];
- cout<<"vremia dvijeniia, sek";
- cin>>t;
- ax[i]=ay[i]=az[i]=0;
- }
- do
- {
- for(i=0;i<N;i++)
- {
- X[i]=Xn[i];
- Y[i]=Yn[i];
- Z[i]=Zn[i];
- Vx[i]=Vxn[i];
- Vy[i]=Vyn[i];
- Vz[i]=Vzn[i];
- ax[i]=ay[i]=az[i]=0;
- }
- eps=0;
- delta_t=t/P;
- for(k=0;k<P;k++)
- {
- for(i=0;i<N;i++)
- {
- for(j=0;j<N;j++)
- {
- if(i!=j)
- {
- 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);
- 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);
- 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);
- }
- }
- Vx[i]+=ax[i]*delta_t;
- Vy[i]+=ay[i]*delta_t;
- Vz[i]+=az[i]*delta_t;
- X[i]+=Vx[i]*delta_t+ax[i]*delta_t*delta_t/2;
- Y[i]+=Vy[i]*delta_t+ay[i]*delta_t*delta_t/2;
- Z[i]+=Vz[i]*delta_t+az[i]*delta_t*delta_t/2;
- }
- }
- for(i=0;i<N;i++)
- {
- RV1[i]=sqrt(X[i]*X[i]+Y[i]*Y[i]+Z[i]*Z[i]);
- }
- P=P*2;
- delta_t=t/P;
- for(i=0;i<N;i++)
- {
- X[i]=Xn[i];
- Y[i]=Yn[i];
- Z[i]=Zn[i];
- Vx[i]=Vxn[i];
- Vy[i]=Vyn[i];
- Vz[i]=Vzn[i];
- ax[i]=ay[i]=az[i]=0;
- }
- for(k=0;k<P;k++)
- {
- for(i=0;i<N;i++)
- {
- for(j=0;j<N;j++)
- {
- if(i!=j)
- {
- 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);
- 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);
- 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);
- }
- }
- Vx[i]+=ax[i]*delta_t;
- Vy[i]+=ay[i]*delta_t;
- Vz[i]+=az[i]*delta_t;
- X[i]+=Vx[i]*delta_t+ax[i]*delta_t*delta_t/2;
- Y[i]+=Vy[i]*delta_t+ay[i]*delta_t*delta_t/2;
- Z[i]+=Vz[i]*delta_t+az[i]*delta_t*delta_t/2;
- for(j=0;j<N;j++)
- {
- for(s=i;s<N;s++)
- {
- if(s!=j)
- {
- 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]))
- {
- stolknovenie++;
- k=P;
- }
- }
- }
- }
- }
- }
- for(i=0;i<N;i++)
- {
- RV2[i]=sqrt(X[i]*X[i]+Y[i]*Y[i]+Z[i]*Z[i]);
- eps+=fabs((RV1[i]-RV2[i])/RV2[i]);
- }
- if(stolknovenie>50)
- eps=-1;
- }while(eps>eps0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment