Tillbaka till svenska Fidonet
English   Information   Debug  
R20_SPRAK.ENGLISH   0/1
R20_SQUISH   107
R20_TEST   2
R20_WORST_OF_FIDONET   12
RAR   0/9
RA_MULTI   106
RA_UTIL   0/162
REGCON.EUR   0/2056
REGCON   0/13
SCIENCE   533/1206
SF   0/239
SHAREWARE_SUPPORT   0/5146
SHAREWRE   0/14
SIMPSONS   0/169
STATS_OLD1   0/2539.065
STATS_OLD2   0/2530
STATS_OLD3   0/2395.095
STATS_OLD4   0/1692.25
SURVIVOR   0/495
SYSOPS_CORNER   0/3
SYSOP   0/84
TAGLINES   0/112
TEAMOS2   0/4530
TECH   0/2617
TEST.444   0/105
TRAPDOOR   0/19
TREK   0/755
TUB   0/290
UFO   0/40
UNIX   0/1316
USA_EURLINK   0/102
USR_MODEMS   0/1
VATICAN   0/2740
VIETNAM_VETS   0/14
VIRUS   0/378
VIRUS_INFO   0/201
VISUAL_BASIC   0/473
WHITEHOUSE   0/5187
WIN2000   0/101
WIN32   0/30
WIN95   0/4288
WIN95_OLD1   0/70272
WINDOWS   0/1517
WWB_SYSOP   0/419
WWB_TECH   0/810
ZCC-PUBLIC   0/1
ZEC   4

 
4DOS   0/134
ABORTION   0/7
ALASKA_CHAT   0/506
ALLFIX_FILE   0/1313
ALLFIX_FILE_OLD1   0/7997
ALT_DOS   0/152
AMATEUR_RADIO   0/1039
AMIGASALE   0/14
AMIGA   0/331
AMIGA_INT   0/1
AMIGA_PROG   0/20
AMIGA_SYSOP   0/26
ANIME   0/15
ARGUS   0/924
ASCII_ART   0/340
ASIAN_LINK   0/651
ASTRONOMY   0/417
AUDIO   0/92
AUTOMOBILE_RACING   0/105
BABYLON5   0/17862
BAG   135
BATPOWER   0/361
BBBS.ENGLISH   0/382
BBSLAW   0/109
BBS_ADS   0/5290
BBS_INTERNET   0/507
BIBLE   0/3563
BINKD   0/1119
BINKLEY   0/215
BLUEWAVE   0/2173
CABLE_MODEMS   0/25
CBM   0/46
CDRECORD   0/66
CDROM   0/20
CLASSIC_COMPUTER   0/378
COMICS   0/15
CONSPRCY   0/899
COOKING   32953
COOKING_OLD1   0/24719
COOKING_OLD2   0/40862
COOKING_OLD3   0/37489
COOKING_OLD4   0/35496
COOKING_OLD5   9370
C_ECHO   0/189
C_PLUSPLUS   0/31
DIRTY_DOZEN   0/201
DOORGAMES   0/2061
DOS_INTERNET   0/196
duplikat   6002
ECHOLIST   0/18295
EC_SUPPORT   0/318
ELECTRONICS   0/359
ELEKTRONIK.GER   1534
ENET.LINGUISTIC   0/13
ENET.POLITICS   0/4
ENET.SOFT   0/11701
ENET.SYSOP   33903
ENET.TALKS   0/32
ENGLISH_TUTOR   0/2000
EVOLUTION   0/1335
FDECHO   0/217
FDN_ANNOUNCE   0/7068
FIDONEWS   24128
FIDONEWS_OLD1   0/49742
FIDONEWS_OLD2   0/35949
FIDONEWS_OLD3   0/30874
FIDONEWS_OLD4   0/37224
FIDO_SYSOP   12852
FIDO_UTIL   0/180
FILEFIND   0/209
FILEGATE   0/212
FILM   0/18
FNEWS_PUBLISH   4408
FN_SYSOP   41679
FN_SYSOP_OLD1   71952
FTP_FIDO   0/2
FTSC_PUBLIC   0/13599
FUNNY   0/4886
GENEALOGY.EUR   0/71
GET_INFO   105
GOLDED   0/408
HAM   0/16070
HOLYSMOKE   0/6791
HOT_SITES   0/1
HTMLEDIT   0/71
HUB203   466
HUB_100   264
HUB_400   39
HUMOR   0/29
IC   0/2851
INTERNET   0/424
INTERUSER   0/3
IP_CONNECT   719
JAMNNTPD   0/233
JAMTLAND   0/47
KATTY_KORNER   0/41
LAN   0/16
LINUX-USER   0/19
LINUXHELP   0/1155
LINUX   0/22093
LINUX_BBS   0/957
mail   18.68
mail_fore_ok   249
MENSA   0/341
MODERATOR   0/102
MONTE   0/992
MOSCOW_OKLAHOMA   0/1245
MUFFIN   0/783
MUSIC   0/321
N203_STAT   926
N203_SYSCHAT   313
NET203   321
NET204   69
NET_DEV   0/10
NORD.ADMIN   0/101
NORD.CHAT   0/2572
NORD.FIDONET   189
NORD.HARDWARE   0/28
NORD.KULTUR   0/114
NORD.PROG   0/32
NORD.SOFTWARE   0/88
NORD.TEKNIK   0/58
NORD   0/453
OCCULT_CHAT   0/93
OS2BBS   0/787
OS2DOSBBS   0/580
OS2HW   0/42
OS2INET   0/37
OS2LAN   0/134
OS2PROG   0/36
OS2REXX   0/113
OS2USER-L   207
OS2   0/4786
OSDEBATE   0/18996
PASCAL   0/490
PERL   0/457
PHP   0/45
POINTS   0/405
POLITICS   0/29554
POL_INC   0/14731
PSION   103
R20_ADMIN   1121
R20_AMATORRADIO   0/2
R20_BEST_OF_FIDONET   13
R20_CHAT   0/893
R20_DEPP   0/3
R20_DEV   399
R20_ECHO2   1379
R20_ECHOPRES   0/35
R20_ESTAT   0/719
R20_FIDONETPROG...
...RAM.MYPOINT
  0/2
R20_FIDONETPROGRAM   0/22
R20_FIDONET   0/248
R20_FILEFIND   0/24
R20_FILEFOUND   0/22
R20_HIFI   0/3
R20_INFO2   3221
R20_INTERNET   0/12940
R20_INTRESSE   0/60
R20_INTR_KOM   0/99
R20_KANDIDAT.CHAT   42
R20_KANDIDAT   28
R20_KOM_DEV   112
R20_KONTROLL   0/13273
R20_KORSET   0/18
R20_LOKALTRAFIK   0/24
R20_MODERATOR   0/1852
R20_NC   76
R20_NET200   245
R20_NETWORK.OTH...
...ERNETS
  0/13
R20_OPERATIVSYS...
...TEM.LINUX
  0/44
R20_PROGRAMVAROR   0/1
R20_REC2NEC   534
R20_SFOSM   0/340
R20_SF   0/108
Möte SCIENCE, 1206 texter
 lista första sista föregående nästa
Text 1201, 282 rader
Skriven 2007-07-28 13:55:18 av DAVID WILLIAMS (1:250/514)
Ärende: heliostat code
======================
I don't seem to have posted this here, although I've done so in some 
Usenet newsgroups. 
  
I recently wrote some BASIC code that calculates the position of the 
sun in the sky, as azimuth and angle of elevation, as seen from 
anywhere on earth, at any time on any date. It also calculates the 
direction in which a mirror should be aimed if it is to reflect 
sunlight in any desired direction. A heliostat, of course, has a mirror 
that does that, and is turned so as to continue reflecting in the right 
direction as the sun moves across the sky. 
  
I'll append two versions of the program below. The first is in QBasic, 
but will also run in some other implementations. The second is in a 
very simple BASIC, and should run on almost any version of the 
language. However, it is necessarily messier than the first one. 
  
Enjoy. Let me know if you have any questions. 
  
                      dow 
  
------------------------------------------------ 
  
' SunAlign.BAS 
' Calculates position of sun in sky, as azimuth (true 
' compass bearing) and angle of elevation, as seen from 
' any place on earth, on any date and any time. 
' Also calculates alignment of a heliostat mirror. 
  
' David Williams 
' P.O. Box 48512 
' Toronto, Canada 
' M8W 4Y6 
  
' Initially dated 2007 Jul 07 
' This version 2007 Jul 22 
  
DECLARE FUNCTION ET.Dec (D, F%) 
DECLARE FUNCTION ROff$ (X) 
DECLARE SUB D2P (X, Y, Z, AZ, EL) 
DECLARE SUB P2D (AZ, EL, X, Y, Z) 
DECLARE FUNCTION Ang (X, Y) 
  
CONST PY = 3.1415926536# ' "PI" not assignable in some BASICs 
CONST DR = 180 / PY ' degree / radian factor 
  
CLS 
PRINT "Use negative numbers for directions opposite to those shown." 
INPUT "Observer's latitude (degrees North)"; LT 
INPUT "Observer's longitude (degrees West)"; LG 
INPUT "Date (M#,D#)"; Mth%, Day% 
INPUT "Time (HH,MM) (24-hr format)"; HR, MIN 
INPUT "Time Zone (+/- hours from GMT/UT)"; TZN 
  
D = INT(30.6 * ((Mth% + 9) MOD 12) + 58.5 + Day%) MOD 365 
ET = ET.Dec(D, 1) ' Equation of Time 
DC = ET.Dec(D, 0) ' Declination 
  
LD = 15 * (HR - TZN) + (MIN + ET) / 4 - LG  'longitude difference 
CALL P2D(LD, DC, sX, sY, sZ) 
CALL D2P(sY, sZ, sX, qAZ, qEL) 
CALL P2D(qAZ + LT - 90, qEL, sY, sZ, sX) 
CALL D2P(sX, sY, sZ, sAZ, sEL) 
  
PRINT 
IF sEL < 0 THEN PRINT "Sun Below Horizon": END 
PRINT "Sun's azimuth: "; ROff$(sAZ); " degrees" 
PRINT "Sun's elevation: "; ROff$(sEL); " degrees" 
  
PRINT 
PRINT "Calculate heliostat mirror alignment? (y/n) "; 
DO 
 K$ = UCASE$(INKEY$) 
LOOP UNTIL K$ = "Y" OR K$ = "N" 
PRINT K$ 
  
IF K$ = "Y" THEN 
   PRINT 
   INPUT "Azimuth of target direction (degrees)"; tAZ 
   INPUT "Elevation of target direction (degrees)"; tEL 
   CALL P2D(tAZ, tEL, tX, tY, tZ) 
   CALL D2P(sX + tX, sY + tY, sZ + tZ, mAZ, mEL) 
  
   PRINT 
   PRINT "Mirror aim direction (perpendicular to surface):" 
   PRINT "Azimuth: "; ROff$(mAZ); " degrees" 
   PRINT "Elevation: "; ROff$(mEL); " degrees" 
END IF 
  
END 
  
FUNCTION Ang (X, Y) 
 ' calculates angle between positive X axis and vector to (X,Y) 
  
  IF X = 0 THEN 
    A = SGN(Y) * PY / 2 
  ELSE 
    A = ATN(Y / X) 
    IF X < 0 THEN A = A + PY 
  END IF 
  Ang = A 
  
END FUNCTION 
  
SUB D2P (X, Y, Z, AZ, EL) 
  ' convert from X,Y,Z to AZ, EL 
  ' Outputs in degrees 
  
  EL = Ang(SQR(X * X + Y * Y), Z) * DR 
  A = Ang(Y, X) * DR 
  IF A < 180 THEN AZ = A + 180 ELSE AZ = A - 180 
  
END SUB 
  
FUNCTION ET.Dec (D, F%) STATIC 
  ' Calculates equation of time, in minutes, or solar declination, 
  ' in degrees, on day number D of year. (D = 0 on January 1.) 
  ' F% selects function: True (non-zero) for Equation of Time, 
  ' False (zero) for Declination. 
  ' STATIC means variables are preserved between calls of function 
  ' This version assumes PY (PI) and DR (180/PI) are initialized 
  
IF W = 0 THEN ' first call, initialize constants 
  
 W = 2 * PY / 365 ' earth's mean orbital angular speed in radians/day 
 C = -23.45 / DR ' reverse angle of earth's axial tilt in radians 
 ST = SIN(C) ' sine of reverse tilt 
 CT = COS(C) ' cosine of reverse tilt 
 E2 = 2 * .0167 ' twice earth's orbital eccentricity 
 SP = 12 * W ' 12 days from December solstice to perihelion 
 D1 = -1 ' holds last D. Saves time if D repeated for both functions 
  
END IF 
  
IF D <> D1 THEN ' new value of D 
  A = W * (D + 10) ' Solstice 10 days before Jan 1 
  B = A + E2 * SIN(A - SP) 
  D1 = D 
END IF 
  
IF F% THEN  ' equation of time calculation 
  C = (A - ATN(TAN(B) / CT)) / PY 
  ET.Dec = 720 * (C - INT(C + .5)) 
  ' in 720 minutes, earth rotates PI radians relative to sun 
  
ELSE ' declination calculation 
  C = ST * COS(B) 
  ET.Dec = ATN(C / SQR(1 - C * C)) * DR 
  ' arcsine of C in degrees. ASN not directly available in QBasic 
  
END IF 
  
END FUNCTION 
  
SUB P2D (AZ, EL, X, Y, Z) 
  ' convert from AZ,EL to X,Y,Z 
  ' Inputs in degrees 
  
  E = EL / DR 
  A = AZ / DR 
  Z = SIN(E) 
  C = -COS(E) 
  X = C * SIN(A) 
  Y = C * COS(A) 
  
END SUB 
  
FUNCTION ROff$ (X) 
 ' neatly rounds number to one place of decimals 
  
S$ = LTRIM$(STR$(INT(10 * ABS(X) + .5))) 
IF S$ = "3600" THEN S$ = "0" 
IF LEN(S$) = 1 THEN S$ = "0" + S$ 
IF X < 0 THEN IF VAL(S$) THEN S$ = "-" + S$ 
ROff$ = LEFT$(S$, LEN(S$) - 1) + "." + RIGHT$(S$, 1) 
  
END FUNCTION 
  
---------------------------------------------------- 
  
100 REM SunAlign.BAS 
  
110 REM Calculates position of sun in sky, as azimuth (true 
120 REM compass bearing) and angle of elevation, as seen from 
130 REM any place on earth, on any date and any time. 
140 REM Also calculates alignment of a heliostat mirror. 
  
150 REM David Williams 
160 REM P.O. Box 48512 
170 REM Toronto, Canada 
180 REM M8W 4Y6 
  
190 REM Initially dated 2007 Jul 07 
200 REM This version 2007 Jul 22 
  
210 REM Note: For brevity, no error checks on user inputs 
  
220 CLS 
230 PRINT "Use negative numbers for opposite directions." 
240 INPUT "Observer's latitude (degrees North)"; LT 
250 INPUT "Observer's longitude (degrees West)"; LG 
260 INPUT "Date (M#,D#)"; Mth, Day 
270 INPUT "Time (HH,MM) (24-hr format)"; HR, MIN 
280 INPUT "Time Zone (+/- hours from GMT/UT)"; TZN 
  
290 PY = 4 * ATN(1): REM "PI" not assignable in some BASICs 
300 DR = 180 / PY: REM degree/radian factor 
310 W = 2 * PY / 365: REM earth's mean orbital speed in radians/day 
320 C = -23.45 / DR: REM reverse angle of axial tilt in radians 
330 ST = SIN(C): REM sine of reverse tilt 
340 CT = COS(C): REM cosine of reverse tilt 
350 E2 = 2 * .0167: REM twice earth's orbital eccentricity 
360 SP = 12 * W: REM 12 days from December solstice to perihelion 
  
370 D = INT(30.6 * ((Mth + 9) MOD 12) + 58.5 + Day) MOD 365 
380 A = W * (D + 10): REM Solstice 10 days before Jan 1 
390 B = A + E2 * SIN(A - SP) 
  
400 C = (A - ATN(TAN(B) / CT)) / PY 
410 ET = 720 * (C - INT(C + .5)): REM equation of time 
420 REM in 720 minutes, earth rotates PI radians relative to sun 
  
430 C = ST * COS(B) 
440 EL = ATN(C / SQR(1 - C * C)) * DR: REM solar declination 
  
450 AZ = 15 * (HR - TZN) + (MIN + ET) / 4 - LG: REM longitude diff 
460 GOSUB 800 
470 R = SQR(Y * Y + Z * Z) 
480 AX = Y: AY = Z: GOSUB 710 
490 A = AA + (90 - LT) / DR 
500 Y = R * COS(A) 
510 Z = R * SIN(A) 
520 GOSUB 740 
  
530 PRINT : REM AZ & EL are now sun's azimuth & elevation in degrees 
540 IF EL < 0 THEN PRINT "Sun Below Horizon": END 
550 R = AZ: GOSUB 870: PRINT "Sun's azimuth: "; R; " degrees" 
560 R = EL: GOSUB 870: PRINT "Sun's elevation: "; R; " degrees" 
  
570 PRINT 
580 INPUT "Calculate heliostat mirror alignment (y/n)"; K$ 
590 IF K$ = "N" OR K$ = "n" THEN END 
  
600 SX = X: SY = Y: SZ = Z 
  
610 PRINT 
620 INPUT "Azimuth of target direction (degrees)"; AZ 
630 INPUT "Elevation of target direction (degrees)"; EL 
640 GOSUB 800 
650 X = X + SX: Y = Y + SY: Z = Z + SZ: GOSUB 740 
  
660 PRINT : REM AZ & EL are now aim azimuth & elevation in degrees 
670 PRINT "Mirror aim direction (perpendicular to surface):" 
680 R = AZ: GOSUB 870: PRINT "Azimuth: "; R; " degrees" 
690 R = EL: GOSUB 870: PRINT "Elevation: "; R; " degrees" 
  
700 END 
  
710 IF AX = 0 THEN AA = SGN(AY) * PY / 2: RETURN 
720 AA = ATN(AY / AX): IF AX < 0 THEN AA = AA + PY 
730 RETURN 
  
740 AX = SQR(X * X + Y * Y): AY = Z: GOSUB 710 
750 EL = AA * DR 
760 AX = Y: AY = X: GOSUB 710 
770 AZ = AA * DR 
780 IF AZ < 180 THEN AZ = AZ + 180 ELSE AZ = AZ - 180 
790 RETURN 
  
800 E = EL / DR 
810 A = AZ / DR 
820 Z = SIN(E) 
830 C = 0 - COS(E): REM Won't work without "0" in Liberty Basic 
840 X = C * SIN(A) 
850 Y = C * COS(A) 
860 RETURN 
  
870 R = INT(10 * R + .5) / 10: REM roundoff to 1 decimal place 
880 RETURN 
  
--------------------------------------------------- 
--- Platinum Xpress/Win/WINServer v3.0pr5
 * Origin: The Bayman BBS,Toronto, (416)698-6573 - 1:250/514 (1:250/514)