/* C Sociedad Protectora de Diplodocus soft. nov. 1991 */ #include #include #include "points.h" #include "fmath.h" #define _X 0 #define _Y 1 #define _Z 2 #ifndef M_PI # define M_PI 3.14159265358979323846 #endif #define SQR3 1.732050807568877293527446341505872366942805 #define OPS(a,b) (a>=0? (a>=b ? ( b>=0? b:a):a):b) /* minimo positivo */ #define FEQ(a,b) (fabs((a)-(b))0 */ short int falfa( double delta , double *alfa ) { double a,b,a1,a2; if (( -M_PI/4.0 <= delta ) && ( delta <= M_PI/4.0 )) *alfa = 0.0; else if ( FEQ(delta, M_PI/2.0) ) *alfa = asin( 1.0/SQR3 ); else { a = sqrt(3.0)/sin(fabs(delta)); b = - cos(delta)/sin(fabs(delta)); if ( ffsen(a,b,&a1,&a2)!=NO_ERR) return(NO_ALFA); else { *alfa = OPS(a1,a2); if ( *alfa < 0 ) return ( ALFA_NEG ); } } return ( NO_ERR ); } /*___________________________________________________________________ */ void MakeAlfa( void ) { double dd,aa,ay4_pos,ay5eq2max,ay5eq2min,aexp; FILE *archivo,*a2; if((archivo=fopen("alfa.in","r"))==NULL) { fprintf(stderr,"alfa.in not found\n"); exit(-1); } if((a2=fopen("alfa.dat","w"))==NULL) { fprintf(stderr,"alfa.out not created\n"); exit(-1); } while(2==fscanf(archivo,"%lf%lf",&dd,&aa)) { if ((dd>=55.0) && (dd<=120.0)) { double s; s = cos((dd-55.0)/(120.0-55.0)*2.0*M_PI); aa -= DEGS(0.03)*(1.00-s)/2.0; } fprintf(a2,"%lf\t%lf\n",dd,aa); } fclose(archivo); fclose(a2); } /*___________________________________________________________________ */ /* GetAlfa devuelve el valor de alfa para delta */ double GetAlfa( double delta ) { static double d[256],a[256]; static char init=0; int index; if (!init) { FILE *archivo; if((archivo=fopen("alfa.dat","r"))==NULL) { fprintf(stderr,"alfa.dat not found\n"); exit(-1); } index=0; while(2==fscanf(archivo,"%lf%lf",&d[index],&a[index])) { d[index]=RADS(d[index]); a[index]=RADS(a[index]); index++; } fclose(archivo); init=1; } delta=fabs(delta); index=0; while( delta >= d[index] ) index++; return( (delta-d[index-1])/(d[index]-d[index-1])*(a[index]-a[index-1])+a[index-1]); }