Advertisement
Aurox_

compitoCerchiIncompleto.c

Dec 8th, 2023
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.46 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. #define DIRECTORY "./filetxt/cerchi.txt"
  6. #define N_MAX_PUNTI 1000000
  7. #define STRLEN 1024
  8.  
  9. #define MIN(A,B) (((A)<(B))?(A):(B)) /*MAI METTERE PUNTI E VIRGOLA QUA!!! STUNATUUUU!!!!!!*/
  10. #define MAX(A,B) (((A)>(B))?(A):(B))
  11. #define ABS(A) (((A)<0)?(-A):(A))
  12.  
  13. typedef struct _cerchio
  14.   {
  15.     float x_c;
  16.     float y_c;
  17.     float raggio;
  18.   } cerchio;
  19.  
  20. typedef struct _copoia
  21.   {
  22.     float x;
  23.     float y;
  24.   } coppia;
  25.  
  26. typedef cerchio* pcerchio;
  27. typedef FILE* pfile;
  28.  
  29. float fmaxs(float a, float b)
  30.   {
  31.     return (a>b)?a:b;
  32.   }
  33.  
  34. float fmins(float a, float b)
  35.   {
  36.     return (a<b)?a:b;
  37.   }
  38.  
  39. float randminmax(float min, float max)
  40.   {
  41.     return ((((float)rand())/RAND_MAX)*(max-min))+min;
  42.   }
  43.  
  44. int main(void)
  45.   {
  46.     unsigned numero_cerchi,i,n_hit,check,i_mc;
  47.     pcerchio parray,p,pmax;
  48.     coppia dot,sinistra,destra;
  49.     pfile pf;
  50.     float x_max,x_min,y_max,y_min,x_gn,y_gn,x_g,y_g,raggio,rq1,rq2,a,b,c,d;
  51.     char s[STRLEN];
  52.  
  53.     if((pf=fopen(DIRECTORY,"r"))==NULL) goto err_file;
  54.     fscanf(pf,"%s",s);
  55.     numero_cerchi=atoi(s);
  56.  
  57.     if((parray=(pcerchio)malloc(sizeof(cerchio)*numero_cerchi))==NULL) goto err_mem;
  58.  
  59.     for (i=0,x_gn=y_gn=0;i<numero_cerchi;i++)
  60.       {
  61.         fscanf(pf,"%s",s);
  62.         x_gn+=(parray[i].x_c=atof(s));
  63.         fscanf(pf,"%s",s);
  64.         y_gn+=(parray[i].y_c=atof(s));
  65.         fscanf(pf,"%s",s);
  66.         parray[i].raggio=atof(s);
  67.  
  68.         if (i>0)
  69.           {
  70.             x_min=fmins(x_min,(parray[i].x_c - parray[i].raggio));
  71.             x_max=fmaxs(x_max,(parray[i].x_c + parray[i].raggio));
  72.             y_min=fmins(y_min,(parray[i].y_c - parray[i].raggio));
  73.             y_max=fmaxs(y_max,(parray[i].y_c + parray[i].raggio));
  74.           }
  75.  
  76.         else
  77.           {
  78.             x_min=parray[i].x_c - parray[i].raggio;
  79.             x_max=parray[i].x_c + parray[i].raggio;
  80.             y_min=parray[i].y_c - parray[i].raggio;
  81.             y_max=parray[i].y_c + parray[i].raggio;
  82.           }
  83.       }
  84.     fclose(pf);
  85.  
  86.     x_g=x_gn/numero_cerchi;
  87.     y_g=y_gn/numero_cerchi;
  88.     /*max1=MAX(abs(x_max - x_g),abs(x_min - x_g));
  89.     max2=MAX(abs(y_max - y_g),abs(y_min - y_g));*/
  90.  
  91.  
  92.    
  93.     raggio=fmaxs(fmaxs(ABS(x_max - x_g),ABS(x_min - x_g)),fmaxs(ABS(y_max - y_g),ABS(y_min - y_g)));
  94.  
  95.     printf("baricentro: (%.3f, %.3f)\nxmin=%.3f\nxmax=%.3f\nymin=%.3f\nymax=%.3f\nraggio quadrato (R)=%.3f\n",x_g,y_g,x_min,x_max,y_min,y_max,raggio);
  96.    
  97.     sinistra.x=x_g - raggio;
  98.     sinistra.y=y_g - raggio;
  99.     destra.x=x_g + raggio;
  100.     destra.y=y_g + raggio;
  101.     rq=raggio*raggio;
  102.  
  103.     for(i_mc=0;i_mc<N_MAX_PUNTI;i_mc++)
  104.       {
  105.         dot.x=randminmax(sinistra.x,destra.x)-x_g;
  106.         dot.y=randminmax(sinistra.y,destra.y)-y_g;
  107.         if (((dot.x)*(dot.x))+((dot.y)*(dot.y))<rq1)
  108.           {
  109.             i=0;
  110.             check=1;
  111.             p=parray;
  112.             pmax=p+numero_cerchi;
  113.            
  114.             do
  115.               {
  116.                 a=dot.x-p->x_c;
  117.                 b=dot.y-p->y_c;
  118.                 rq2=(p->raggio)*(p->raggio);
  119.                 if (((dot.x-p->x_c)*(dot.x-p->x_c)+(dot.y-p->y_c)*(dot.y-p->y_c))<rq2)
  120.                   {
  121.                     n_hit++;
  122.                     check=0;
  123.                   }
  124.                 p++;
  125.               }
  126.             while ((p<pmax)&&(check));
  127.           }
  128.       }
  129.  
  130.  
  131.  
  132.     free(parray);
  133.  
  134.     return 0;
  135.     err_file:
  136.         return 1;
  137.     err_mem:
  138.       return 1;
  139.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement