home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol134 / triglib.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1984-04-29  |  3.0 KB  |  106 lines

  1. {
  2.       TRIGLIB.PAS CONTAINS THE FOLLOWING FUNCTIONS 
  3.       (AS OF 1:13:82 ) :
  4.  
  5.                         TAN
  6.                         SIGN
  7.                         ANTITAN
  8.                         ARCSINE
  9.                         ARCOSINE
  10.                         RAD2DEGREES
  11.                         DEG2RADIANS
  12.        
  13. THE CONSTANT PI AND THE BOOLEAN FAILURE ARE ASSUMED TO BE GLOBAL
  14.                                                                     }
  15. FUNCTION TAN(X:REAL):REAL;
  16. BEGIN
  17.  TAN:=SIN(X)/COS(X)
  18. END;
  19.  
  20. FUNCTION SIGN(X:REAL):INTEGER;
  21. BEGIN
  22.  IF X<0 THEN SIGN:=-1 ELSE SIGN:=1
  23. END;{OF FUNCTION SIGN}
  24.  
  25. FUNCTION ANTITAN(RADIANS : REAL):REAL;
  26.  
  27. { WRITTEN BY G.M.ACLAND
  28.   REQUIRES DECLARATION OF 
  29.           CONST PI = ...
  30.           FUNCTION SIGN(X:REAL):INTEGER   
  31.   ACCEPTS ANY REAL NUMBER AS A TAN AND RETURNS THE ARCTAN
  32.   IN RADIANS.ONLY GIVES ANGLES IN 1ST AND 2ND QUADRANTS
  33.      (I.E. FROM 0 TO PI RADIANS = 0 TO 180 DEGREES).
  34.   THUS THE RESULT MAY NOT ALWAYS BE THAT EXPECTED.WHERE
  35.   NECESSARY YOU SHOULD CONSIDER WHETHER THE ANGLE IS
  36.   REALLY (PI + ANTITAN) I.E IN 3RD OR 4TH QUADRANT.
  37.   AVOIDS THE PROBLEMS PASCAL/Z HAS WITH VERY LARGE OR
  38.   NEGATIVE INPUTS TO ITS ARCTAN FUNCTION.                    }
  39.  
  40. CONST
  41.   MAXTAN = 8388609.0;
  42.  
  43. BEGIN
  44.   IF ABS(RADIANS)>MAXTAN THEN RADIANS:=MAXTAN*SIGN(RADIANS);
  45.   IF RADIANS<0 THEN ANTITAN := PI-ARCTAN(ABS(RADIANS))
  46.                ELSE ANTITAN := ARCTAN(RADIANS)
  47. END;{FUNCTION ANTITAN}
  48.  
  49. FUNCTION ARCSINE(SINE:REAL):REAL;
  50.  
  51. {WRITTEN BY G.M.ACLAND
  52.  REQUIRES :
  53.            CONST PI
  54.            VARIABLE FAILURE (A GLOBAL BOOLEAN)
  55.            FUNCTIONS ANTITAN AND SIGN
  56.  ACCEPTS ANY REAL NUMBER AS INPUT 
  57.  CHECKS FOR OUT OF BOUNDS ( FAILURE WILL BE TRUE IF INPUT > 1)
  58.  RETURNS AN ANGLE BETWEEN -(PI/2) AND +(PI/2) RADIANS 
  59.           (I.E. -90 TO +90 DEGREES)
  60.  THUS THE RESULT MAY NOT ALWAYS BE THAT EXPECTED : IN THAT
  61.  CASE CONSIDER WHETHER ANGLE IS REALLY ( PI-ARCSINE )          }
  62.  
  63. BEGIN
  64.  IF SINE > 1.0 THEN FAILURE := TRUE
  65.  ELSE
  66.   IF SINE = 0.0 THEN ARCSINE := 0.0
  67.   ELSE
  68.     IF ABS(SINE)=1.0 THEN ARCSINE := (PI/2.0)*SIGN(SINE)
  69.     ELSE ARCSINE := (ANTITAN(ABS(SINE)/SQRT(1.0-SINE*SINE)))*SIGN(SINE)
  70. END;{OF FUNCTION ARCSINE}
  71.  
  72.  
  73. FUNCTION ARCOSINE(COSINE : REAL):REAL;
  74.  
  75. {WRITTEN BY G.M.ACLAND
  76.  ACCEPTS ANY REAL INPUT
  77.  CHECKS FOR OUT OF BOUNDS
  78.  RETURNS ANGLE BETWEEN 0 AND PI RADIANS (0 TO 180 DEGREES)
  79.  THUS "TRUE" ANGLE MAY BE ( PI + ARCOSINE )
  80.  
  81.  REQUIRES 
  82.         PI       ( CONST = 3.1415927 )
  83.         ANTITAN  ( FUNCTION : GMA    )
  84.         FAILURE  ( GLOBAL BOOLEAN    )                        }
  85.         
  86. BEGIN
  87.  IF COSINE > 1.0 THEN FAILURE := TRUE
  88.  ELSE
  89.   IF COSINE = 0.0 THEN ARCOSINE := (PI/2.0)
  90.   ELSE 
  91.    IF COSINE = 1.0 THEN ARCOSINE := 0.0
  92.    ELSE 
  93.     IF COSINE = -1.0 THEN ARCOSINE := PI
  94.       ELSE ARCOSINE := ANTITAN((SQRT(1.0-COSINE*COSINE))/COSINE)
  95.  END;{OF FUNCTION ARCOSINE}
  96.  
  97. FUNCTION RAD2DEGREES(ANGLE:REAL):REAL;
  98.  BEGIN
  99.    RAD2DEGREES:=(ANGLE*360.0)/(2.0*PI)
  100.  END;{OF FUNCTION RAD2DEGREES}
  101.  
  102. FUNCTION DEG2RADIANS(ANGLE:REAL):REAL;
  103.  BEGIN
  104.    DEG2RADIANS:=(ANGLE*2.0*PI)/360.0
  105.  END;{OF FUNCTION DEG2RADIANS}
  106.