pietrod21

distribuzione distanza

Dec 4th, 2011
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.43 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5.  
  6.  
  7. typedef unsigned long long int RANDOM_TYPE;
  8. RANDOM_TYPE a, b, m, seed, randomNumber;
  9.  
  10. struct{
  11. double x,y,z;
  12. }p;
  13.  
  14. double distanza(double x1, double x2, double x3);
  15. double distribuzione(double fstoredistanzarandomnumber[], int fpassi, int fn_bin);
  16.  
  17. int main(){
  18. double r, xt2, arraybin[10], distanzatot, media, bin=10000;
  19. int position, i, c,g,passi=100,n_bin=70;
  20. double storedistanzarandomnumber[passi];
  21.  
  22. i=0; media=0;
  23. p.x=0; p.y=0; p.z=0;
  24. position=0;
  25. i=0;
  26. a=16807;
  27. m=2147483647;
  28. seed=222;
  29. randomNumber=seed;
  30. FILE *fp;
  31. fp=fopen("casuale_3D.dat","w+");
  32.     for(i=1; i<passi; i++){
  33.         fprintf(fp,"%d %lf %lf %lf %Lu \n", i,p.x,p.y,p.z,randomNumber);
  34.         randomNumber=(a*randomNumber)%m;
  35.         r=(double)randomNumber/(double)m;
  36.             if(r<(1/6.)){
  37.             p.z+=1;
  38.             }
  39.             else if (r<(2/6.)){
  40.             p.z-=1;
  41.             }
  42.             else if (r<(3/6.)){
  43.             p.x+=1;
  44.             }
  45.             else if (r<(4/6.)){
  46.             p.x-=1;
  47.             }
  48.             else if (r<(5/6.)){
  49.             p.y+=1;
  50.             }
  51.             else if (r<1){
  52.             p.y-=1;
  53.             }
  54.         storedistanzarandomnumber[i]=distanza(p.x,p.y,p.z);
  55.     }
  56. FILE *ff;
  57. ff=fopen("casuale_distanza.dat","w+");
  58.     for(i=1; i<passi; i++){
  59.         fprintf(ff,"%lf \n",*(storedistanzarandomnumber+i));
  60.     }
  61. distribuzione(storedistanzarandomnumber, passi, n_bin);
  62.  
  63. }
  64.  
  65.  
  66. double distanza(double x1,double x2,double x3){
  67.     double dist;
  68.     dist=sqrt(x1*x1+x2*x2+x3*x3);  
  69.     return dist;
  70. }
  71.  
  72. ////////////////////////////////////////////////////////////////////////////////////////////////
  73.  
  74.  
  75. double distribuzione(double fstoredistanzarandomnumber[], int fpassi, int fn_bin){
  76. FILE *fq;
  77. int i, determinobin;
  78. double max, arraybin[fn_bin], grandezzabin;
  79. //determino distanza max/////////
  80.     for(i=1; i<fpassi; i++){
  81.         if(max<fstoredistanzarandomnumber[i]){max=fstoredistanzarandomnumber[i];}
  82.     }
  83.     printf("il massimo รจ %lf",max);
  84.  
  85. grandezzabin=max/fn_bin;//determino grandezza bin
  86. //riempio bin/////////
  87. i=0;
  88.     for(i=1; i<fpassi; i++){
  89.             determinobin=fstoredistanzarandomnumber[i]/grandezzabin;
  90.             printf(" %d*bin = %d \n",i,determinobin);
  91.             arraybin[determinobin]+=1;
  92.     }
  93. //scrivo distribuzione///////////
  94. fq=fopen("casuale_distr_dista.dat","w+");
  95. i=0;
  96.     for(i=1; i<fpassi; i++){
  97.         if(arraybin[i]!=0){fprintf(fq,"%d %lf \n",i,arraybin[i]);}
  98.     }
  99. system("echo 'plot \"casuale_distr_dista.dat\" u 1:2 with lines'|gnuplot -persist");
  100. system("echo 'splot \"casuale_3D.dat\" u 2:3:4 with lines'|gnuplot -persist");
  101.  
  102. }
Advertisement
Add Comment
Please, Sign In to add comment