#include #include #include #include /*Définit les positions void Psitions(int N) { float Positions[2][N]; int i; for (i=0; i<=N-1; i++) { Positions[0][i]=rand()%100; } for (i=0; i<=N-1; i++) { Positions[1][i]=rand()%100; } } Définit les vitesses void Vtesses(int N) { float Vitesses[2][N]; int i; for (i=0; i<=N-1; i++) { Vitesses[0][i]=rand()%10; } for (i=0; i<=N-1; i++) { Vitesses[1][i]=rand()%10; } } */ int main() { /*Nombre de particules*/ int N; N=10; /*Diamètre de collision*/ float R; R=1.0; /*Coefficient élastique*/ float epsilon; epsilon=1.0; /*Pour changer de nombre aléatoire à chaque fois*/ srand(time(NULL)); /*Définit les compteurs*/ int i, j, k; /*Définit les positions au temps t0*/ float Positions[2][N]; for (i=0; i<=N-1; i++) { Positions[0][i]=rand()%100; } for (i=0; i<=N-1; i++) { Positions[1][i]=rand()%100; } /*Définit les vitesses au temps t0*/ float Vitesses[2][N]; for (i=0; i<=N-1; i++) { Vitesses[0][i]=rand()%10; } for (i=0; i<=N-1; i++) { Vitesses[1][i]=rand()%10; } for (k=0; k<=N-1; k++) { printf("%f ", Positions[0][k]); } printf("\n"); for (k=0; k<=N-1; k++) { printf("%f ", Positions[1][k]); } printf("\n ---------------- \n"); for (k=0; k<=N-1; k++) { printf("%f ", Vitesses[0][k]); } printf("\n"); for (k=0; k<=N-1; k++) { printf("%f ", Vitesses[1][k]); } printf("\n ---------------- \n"); float t; t=0.0; /*Résoudre l'équation de degré 2 pour les collisions et trouver le temps minimal*/ float a[N][N], b[N][N], c[N][N]; float Delta[N][N]; float temps[N][N][2]; float tmin=powf(10,8); int un, deux; for (i=0; i<=N-1; i++) { for (j=0; j<=i; j++) { a[i][j] = powf(Vitesses[0][i]-Vitesses[0][j],2)+powf(Vitesses[1][i]-Vitesses[1][j],2); b[i][j] = 2*((Positions[0][i]-Positions[0][j])*(Vitesses[0][i]-Vitesses[0][j])+(Positions[1][i]-Positions[1][j])*(Vitesses[1][i]-Vitesses[1][j])); c[i][j] = powf(Positions[0][i]-Positions[0][j],2)+powf(Positions[1][i]-Positions[1][j],2)-powf(R,2); Delta[i][j] = powf(b[i][j],2)-4*a[i][j]*c[i][j]; printf("%f |", Delta[i][j]); if (Delta[i][j] >= 0) { temps[i][j][0]=(-b[i][j]+sqrt(Delta[i][j]))/(2*a[i][j]); temps[i][j][1]=(-b[i][j]+sqrt(Delta[i][j]))/(2*a[i][j]); for (k=0; k<=1; k++) { if (temps[i][j][k]>0 && temps[i][j][k] <= tmin) { tmin=temps[i][j][k]; un=i; deux=j; } } } } printf("\n %f \n",tmin); } t=t+tmin; /*Définit les positions au temps t*/ float Positionst[2][N]; for (i=0; i<=N-1; i++) { Positionst[0][i]=Positions[0][i]+Vitesses[0][i]*t; } for (i=0; i<=N-1; i++) { Positionst[1][i]=Positions[1][i]+Vitesses[1][i]*t; } /*Vitesses après le choc*/ Vitesses[0][un]=Vitesses[0][un]+epsilon*((Vitesses[0][deux]-Vitesses[0][un])*(Positions[0][un]-Positions[0][deux])+(Vitesses[1][deux]-Vitesses[1][un])*(Positions[1][un]-Positions[1][deux]))/(powf(Positions[0][un]-Positions[0][deux],2)+powf(Positions[1][un]-Positions[1][deux],2))*(Positions[0][un]-Positions[0][deux]); Vitesses[1][un]=Vitesses[1][un]+epsilon*((Vitesses[0][deux]-Vitesses[0][un])*(Positions[0][un]-Positions[0][deux])+(Vitesses[1][deux]-Vitesses[1][un])*(Positions[1][un]-Positions[1][deux]))/(powf(Positions[0][un]-Positions[0][deux],2)+powf(Positions[1][un]-Positions[1][deux],2))*(Positions[1][un]-Positions[1][deux]); Vitesses[0][deux]=Vitesses[0][deux]+epsilon*((Vitesses[0][un]-Vitesses[0][deux])*(Positions[0][un]-Positions[0][deux])+(Vitesses[1][un]-Vitesses[1][deux])*(Positions[1][un]-Positions[1][deux]))/(powf(Positions[0][un]-Positions[0][deux],2)+powf(Positions[1][un]-Positions[1][deux],2))*(Positions[0][un]-Positions[0][deux]); Vitesses[1][deux]=Vitesses[1][deux]+epsilon*((Vitesses[0][un]-Vitesses[0][deux])*(Positions[0][un]-Positions[0][deux])+(Vitesses[1][un]-Vitesses[1][deux])*(Positions[1][un]-Positions[1][deux]))/(powf(Positions[0][un]-Positions[0][deux],2)+powf(Positions[1][un]-Positions[1][deux],2))*(Positions[0][un]-Positions[0][deux]); printf("\n ---------------- \n"); int y; for (y=0; y<=N-1; y++) { printf("%f ", Positionst[0][y]); } printf("\n"); for (y=0; y<=N-1; y++) { printf("%f ", Positionst[1][y]); } printf("\n ---------------- \n"); return (0); }