perm filename SUN.SAI[GEM,BGB] blob
sn#090824 filedate 1974-03-11 generic text, type T, neo UTF8
00100 BEGIN "SUN"
00200 DEFINE α = "COMMENT", π = "3.1415927";
00300 REQUIRE "SAITRG[SYS,BGB]" LOAD_MODULE;
00400 EXTERNAL REAL PROCEDURE SIN (REAL X);
00500 EXTERNAL REAL PROCEDURE COS (REAL X);
00600 EXTERNAL REAL PROCEDURE ACOS (REAL X);
00700 EXTERNAL REAL PROCEDURE ATAN2 (REAL X,Y);
00800 EXTERNAL REAL PROCEDURE SQRT (REAL X);
00900
01000 REAL SUNAZM,SUNALT,TIME;
01100 INTEGER DAY;
01200 REAL X,Y,Z,R;
01300 REAL EAST,NORTH,ZENITH;
01400 PROCEDURE PRINT;
01500 BEGIN
01600 SETFORMAT(0,3);
01700 OUTSTR("EAST = "&CVF(EAST));
01800 OUTSTR(9&"NORTH= "&CVF(NORTH));
01900 OUTSTR(9&"ZENITH="&CVF(ZENITH));
02000 R ← SQRT(EAST↑2 + NORTH↑2 + ZENITH↑2);
02100 OUTSTR(9&CVF(R)&13&10);
02200 END;
00100 PROCEDURE SUN;
00200 BEGIN "SUN"
00300 REAL RHO,PHI,TMP;
00350 DEFINE LAB = "(153*3.1415927/180)";
00400 DEFINE LAT = "((37+23/60)*3.1415927/180)";
00500 DEFINE ECLIPTIC = "((23+27/60)*3.1415927/180)";
00600 RHO ← 2*π*DAY/365.25;
00700 α POSITION OF THE SUN ON THE ECLIPTIC IN THE CELESTIAL SPHERE;
00800 EAST ← SIN(RHO)*COS(ECLIPTIC);
00900 NORTH ← SIN(RHO)*SIN(ECLIPTIC);
01000 ZENITH ← COS(RHO);
01100 α LOCAL MERIDIAN OF LONGITUDE IS APPARENT SOLAR TIME = (P.S.T. - 8:44);
01200 PHI ← π*(1-TIME/12) - ATAN2(EAST,ZENITH);
01300 TMP ← ZENITH*COS(PHI) - SIN(PHI)*EAST;
01400 EAST ← EAST*COS(PHI) + SIN(PHI)*ZENITH;
01500 ZENITH ← TMP;
01600 α ROTATE CW IN THE NORTH/ZENITH PLANE TO THE LOCAL LATITUDE;
01700 TMP ← COS(LAT)*ZENITH + SIN(LAT)*NORTH;
01800 NORTH ← COS(LAT)*NORTH - SIN(LAT)*ZENITH;
01900 ZENITH ← TMP;
01910 α ROTATE CW TO LAB COORDINATES;
01920 EAST ← COS(LAB)*EAST + SIN(LAB)*NORTH;
01930 NORTH ← COS(LAB)*NORTH - SIN(LAB)*EAST ;
02000 α CONVERT TO ANGULAR MEASURES;
02100 SUNAZM ← ATAN2 (NORTH,EAST);
02200 SUNALT ← π/2 - ACOS (ZENITH);
02300 END "SUN";
00100 WHILE TRUE DO
00200 BEGIN "TEST"
00300 LABEL L;
00400 INTEGER CHR,BRK;
00500 STRING S;
00600 SUN;
00700 OUTSTR(" DAY = "&CVS(DAY));
00800 OUTSTR(" TIME = "&CVF(TIME));
00900 OUTSTR(" AZIM = "&CVS(SUNAZM*180/π));
01000 OUTSTR(" ALT = "&CVS(SUNALT*180/π));
01100 OUTSTR(13&10);
01200 OUTSTR("*");
01300 S ← INCHWL;
01400 IF LENGTH(S)=0 THEN GO L;
01500 CHR ← LOP(S);
01600 IF CHR="D" THEN DAY ← INTSCAN(S,BRK) ELSE
01700 IF CHR="T" THEN TIME←REALSCAN(S,BRK) ;
01800 L:
01900 END "TEST";
02000 END "SUN";