home *** CD-ROM | disk | FTP | other *** search
- {
- TRIGLIB.PAS CONTAINS THE FOLLOWING FUNCTIONS
- (AS OF 1:13:82 ) :
-
- TAN
- SIGN
- ANTITAN
- ARCSINE
- ARCOSINE
- RAD2DEGREES
- DEG2RADIANS
-
- THE CONSTANT PI AND THE BOOLEAN FAILURE ARE ASSUMED TO BE GLOBAL
- }
- FUNCTION TAN(X:REAL):REAL;
- BEGIN
- TAN:=SIN(X)/COS(X)
- END;
-
- FUNCTION SIGN(X:REAL):INTEGER;
- BEGIN
- IF X<0 THEN SIGN:=-1 ELSE SIGN:=1
- END;{OF FUNCTION SIGN}
-
- FUNCTION ANTITAN(RADIANS : REAL):REAL;
-
- { WRITTEN BY G.M.ACLAND
- REQUIRES DECLARATION OF
- CONST PI = ...
- FUNCTION SIGN(X:REAL):INTEGER
- ACCEPTS ANY REAL NUMBER AS A TAN AND RETURNS THE ARCTAN
- IN RADIANS.ONLY GIVES ANGLES IN 1ST AND 2ND QUADRANTS
- (I.E. FROM 0 TO PI RADIANS = 0 TO 180 DEGREES).
- THUS THE RESULT MAY NOT ALWAYS BE THAT EXPECTED.WHERE
- NECESSARY YOU SHOULD CONSIDER WHETHER THE ANGLE IS
- REALLY (PI + ANTITAN) I.E IN 3RD OR 4TH QUADRANT.
- AVOIDS THE PROBLEMS PASCAL/Z HAS WITH VERY LARGE OR
- NEGATIVE INPUTS TO ITS ARCTAN FUNCTION. }
-
- CONST
- MAXTAN = 8388609.0;
-
- BEGIN
- IF ABS(RADIANS)>MAXTAN THEN RADIANS:=MAXTAN*SIGN(RADIANS);
- IF RADIANS<0 THEN ANTITAN := PI-ARCTAN(ABS(RADIANS))
- ELSE ANTITAN := ARCTAN(RADIANS)
- END;{FUNCTION ANTITAN}
-
- FUNCTION ARCSINE(SINE:REAL):REAL;
-
- {WRITTEN BY G.M.ACLAND
- REQUIRES :
- CONST PI
- VARIABLE FAILURE (A GLOBAL BOOLEAN)
- FUNCTIONS ANTITAN AND SIGN
- ACCEPTS ANY REAL NUMBER AS INPUT
- CHECKS FOR OUT OF BOUNDS ( FAILURE WILL BE TRUE IF INPUT > 1)
- RETURNS AN ANGLE BETWEEN -(PI/2) AND +(PI/2) RADIANS
- (I.E. -90 TO +90 DEGREES)
- THUS THE RESULT MAY NOT ALWAYS BE THAT EXPECTED : IN THAT
- CASE CONSIDER WHETHER ANGLE IS REALLY ( PI-ARCSINE ) }
-
- BEGIN
- IF SINE > 1.0 THEN FAILURE := TRUE
- ELSE
- IF SINE = 0.0 THEN ARCSINE := 0.0
- ELSE
- IF ABS(SINE)=1.0 THEN ARCSINE := (PI/2.0)*SIGN(SINE)
- ELSE ARCSINE := (ANTITAN(ABS(SINE)/SQRT(1.0-SINE*SINE)))*SIGN(SINE)
- END;{OF FUNCTION ARCSINE}
-
-
- FUNCTION ARCOSINE(COSINE : REAL):REAL;
-
- {WRITTEN BY G.M.ACLAND
- ACCEPTS ANY REAL INPUT
- CHECKS FOR OUT OF BOUNDS
- RETURNS ANGLE BETWEEN 0 AND PI RADIANS (0 TO 180 DEGREES)
- THUS "TRUE" ANGLE MAY BE ( PI + ARCOSINE )
-
- REQUIRES
- PI ( CONST = 3.1415927 )
- ANTITAN ( FUNCTION : GMA )
- FAILURE ( GLOBAL BOOLEAN ) }
-
- BEGIN
- IF COSINE > 1.0 THEN FAILURE := TRUE
- ELSE
- IF COSINE = 0.0 THEN ARCOSINE := (PI/2.0)
- ELSE
- IF COSINE = 1.0 THEN ARCOSINE := 0.0
- ELSE
- IF COSINE = -1.0 THEN ARCOSINE := PI
- ELSE ARCOSINE := ANTITAN((SQRT(1.0-COSINE*COSINE))/COSINE)
- END;{OF FUNCTION ARCOSINE}
-
- FUNCTION RAD2DEGREES(ANGLE:REAL):REAL;
- BEGIN
- RAD2DEGREES:=(ANGLE*360.0)/(2.0*PI)
- END;{OF FUNCTION RAD2DEGREES}
-
- FUNCTION DEG2RADIANS(ANGLE:REAL):REAL;
- BEGIN
- DEG2RADIANS:=(ANGLE*2.0*PI)/360.0
- END;{OF FUNCTION DEG2RADIANS}
-