#include "math.h" void VECT( float *X, float *Y, float *Z); void attid( float TS, float U1, float U2, float *X, float *Z, float *DIR) { float UX, UY, S[3], E[3], P2[3], PA[3][3], DRA[3], ALF, BET, TGA, TGB, G; float CG, SG, AX, UU, SX1, CX1, SX2, CX2; register int i, j; UU = (float) atan((double) 1.) / 45.; UX = UU * U1; UY = UU * U2; DRA[0] = (float) cos((double) UX); DRA[1] = (float) ( sin((double) UX) * cos((double) UY) ); DRA[2] = (float) ( sin((double) UX) * sin((double) UY) ); SX1 = (float) sin( (double) ( X[10] * TS ) ); CX1 = (float) cos( (double) ( X[10] * TS ) ); SX2 = (float) sin( (double) ( X[11] * TS ) ); CX2 = (float) cos( (double) ( X[11] * TS ) ); ALF = X[0] + X[1] * SX1 + X[2] * CX1 + X[3] * SX2 + X[4] * CX2; BET = X[5] + X[6] * SX1 + X[7] * CX1 + X[8] * SX2 + X[9] * CX2; ALF = ALF * UU; BET = BET * UU; TGA= (float) ( tan((double)ALF) ); TGB= (float) ( tan((double)BET) ); S[0] = 1./ (float) sqrt( (double) (1. + TGA*TGA + TGB*TGB ) ); S[1] = TGA * S[0]; S[2] = TGB * S[0]; G= Z[0] + Z[1] * TS; CG = (float) cos( (double) G ); SG = (float) sin( (double) G ); AX= S[1] * CG + S[2] * SG; E[0] = - AX / (float) sqrt( (double) ( AX * AX + S[0] * S[0]) ); E[1] = (float) sqrt( (double) (1. - E[0] * E[0] ) ) * CG; E[2] = (float) sqrt( (double) (1.- E[0] * E[0] ) ) * SG; VECT( E, S, P2 ); for(i=0; i<3; i++) { PA[0][i] = S[i]; PA[1][i] = P2[i]; PA[2][i] = E[i]; } for(i=0; i<3; i++) DIR[i] = 0.0; for(i=0; i<3; i++) for( j=0; j<3; j++ ) DIR[i] = DIR[i] + PA[i][j] * DRA[j]; } void VECT( float *X, float *Y, float *Z) { register int i; float ZZ; Z[0] = X[1] * Y[2] - Y[1] * X[2]; Z[1] = X[2] * Y[0] - X[0] * Y[2]; Z[2] = X[0] * Y[1] - X[1] * Y[0]; ZZ = (float) sqrt( (double) (Z[0]*Z[0]+Z[1]*Z[1]+Z[2]*Z[2]) ); for ( i=0; i<3; i++ ) Z[i] = Z[i] / ZZ; }