Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #define DIRECTORY "./filetxt/cerchi.txt"
- #define N_MAX_PUNTI 1000000
- #define STRLEN 1024
- #define MIN(A,B) (((A)<(B))?(A):(B)) /*MAI METTERE PUNTI E VIRGOLA QUA!!! STUNATUUUU!!!!!!*/
- #define MAX(A,B) (((A)>(B))?(A):(B))
- #define ABS(A) (((A)<0)?(-A):(A))
- typedef struct _cerchio
- {
- float x_c;
- float y_c;
- float raggio;
- } cerchio;
- typedef struct _copoia
- {
- float x;
- float y;
- } coppia;
- typedef cerchio* pcerchio;
- typedef FILE* pfile;
- float fmaxs(float a, float b)
- {
- return (a>b)?a:b;
- }
- float fmins(float a, float b)
- {
- return (a<b)?a:b;
- }
- float randminmax(float min, float max)
- {
- return ((((float)rand())/RAND_MAX)*(max-min))+min;
- }
- int main(void)
- {
- unsigned numero_cerchi,i,n_hit,check,i_mc;
- pcerchio parray,p,pmax;
- coppia dot,sinistra,destra;
- pfile pf;
- float x_max,x_min,y_max,y_min,x_gn,y_gn,x_g,y_g,raggio,rq1,rq2,a,b,c,d;
- char s[STRLEN];
- if((pf=fopen(DIRECTORY,"r"))==NULL) goto err_file;
- fscanf(pf,"%s",s);
- numero_cerchi=atoi(s);
- if((parray=(pcerchio)malloc(sizeof(cerchio)*numero_cerchi))==NULL) goto err_mem;
- for (i=0,x_gn=y_gn=0;i<numero_cerchi;i++)
- {
- fscanf(pf,"%s",s);
- x_gn+=(parray[i].x_c=atof(s));
- fscanf(pf,"%s",s);
- y_gn+=(parray[i].y_c=atof(s));
- fscanf(pf,"%s",s);
- parray[i].raggio=atof(s);
- if (i>0)
- {
- x_min=fmins(x_min,(parray[i].x_c - parray[i].raggio));
- x_max=fmaxs(x_max,(parray[i].x_c + parray[i].raggio));
- y_min=fmins(y_min,(parray[i].y_c - parray[i].raggio));
- y_max=fmaxs(y_max,(parray[i].y_c + parray[i].raggio));
- }
- else
- {
- x_min=parray[i].x_c - parray[i].raggio;
- x_max=parray[i].x_c + parray[i].raggio;
- y_min=parray[i].y_c - parray[i].raggio;
- y_max=parray[i].y_c + parray[i].raggio;
- }
- }
- fclose(pf);
- x_g=x_gn/numero_cerchi;
- y_g=y_gn/numero_cerchi;
- /*max1=MAX(abs(x_max - x_g),abs(x_min - x_g));
- max2=MAX(abs(y_max - y_g),abs(y_min - y_g));*/
- raggio=fmaxs(fmaxs(ABS(x_max - x_g),ABS(x_min - x_g)),fmaxs(ABS(y_max - y_g),ABS(y_min - y_g)));
- 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);
- sinistra.x=x_g - raggio;
- sinistra.y=y_g - raggio;
- destra.x=x_g + raggio;
- destra.y=y_g + raggio;
- rq=raggio*raggio;
- for(i_mc=0;i_mc<N_MAX_PUNTI;i_mc++)
- {
- dot.x=randminmax(sinistra.x,destra.x)-x_g;
- dot.y=randminmax(sinistra.y,destra.y)-y_g;
- if (((dot.x)*(dot.x))+((dot.y)*(dot.y))<rq1)
- {
- i=0;
- check=1;
- p=parray;
- pmax=p+numero_cerchi;
- do
- {
- a=dot.x-p->x_c;
- b=dot.y-p->y_c;
- rq2=(p->raggio)*(p->raggio);
- if (((dot.x-p->x_c)*(dot.x-p->x_c)+(dot.y-p->y_c)*(dot.y-p->y_c))<rq2)
- {
- n_hit++;
- check=0;
- }
- p++;
- }
- while ((p<pmax)&&(check));
- }
- }
- free(parray);
- return 0;
- err_file:
- return 1;
- err_mem:
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement