| TIP: Click on subject to list as thread! | ANSI |
| echo: | |
|---|---|
| to: | |
| from: | |
| date: | |
| subject: | sun position program |
Where is everyone?
I'm not sure if I've previously posted this here. I can't find it among
the messages that are still on Bayman, so if I have posted it, it must
have been long ago.
This is a little QBasic demo program of a function that calculates the
declination (latitude) of the sun and the equation of time on any date.
The equation of time is the difference between solar time, as shown by
a sundial, and mean time, as shown by a clock. It is essentially the
same as the longitude of the sun, relative to its mean position. So the
two quantities, solar declination and equation of time, essentially
describe the position of the sun, relative to a "mean" sun which is
always on the celestial equator and which appears to revolve around the
earth exactly once every 24 hours.
The FUNCTION ET.Dec does the calculations in just a few lines of BASIC.
I have never seen, anywhere else, anything that does the same things
anything like as simply.
The code should be easy to translate to other programming languages.
Does anyone feel like trying this?
Enjoy...
dow
---------------------------------------------
' ETimDec.BAS
' Demonstrates simple calculations of solar declination and
' equation of time.
' David Williams
' P.O. Box 48512
' Toronto, Canada
' M8W 4Y6
' Version dated 2007 Jun 09
DECLARE FUNCTION ET.Dec (D, F%)
DECLARE FUNCTION ROff$ (X)
CLS
PRINT "This program shows Equation of Time and Solar Declination"
PRINT "calculations, performed in the function ET.Dec."
PRINT
PRINT "These calculations can be used in the programs of computer-"
PRINT "controlled solar-energy equipment, such as sun trackers and"
PRINT "heliostats."
PRINT
PRINT "Equation of Time is difference between Solar Time and Mean"
PRINT "Time. Sundials show solar time. Clocks show mean time. The"
PRINT "Equation of Time is related to solar longitude, relative to"
PRINT "its mean value (the value it would have if the sun's apparent"
PRINT "motion were at uniform speed). One degree westward of solar"
PRINT "longitude corresponds to four minutes in positive direction in"
PRINT "the Equation of Time."
PRINT
PRINT "Solar Declination is latitude of sun in celestial coordinates."
PRINT
PRINT
PRINT "Program will calculate Equation of Time and"
PRINT "Solar Declination on date you will now input."
DO
PRINT
DO
INPUT "Date (M#,D#)"; Mth%, Day%
LOOP UNTIL Mth% > 0 AND Mth% 0 AND Day% < 32
PRINT
D = INT(30.6 * ((Mth% + 9) MOD 12) + 58.5 + Day%) MOD 365
PRINT "Day number"; D + 1; "of year."
ET = ET.Dec(D, 1) ' Equation of Time
DC = ET.Dec(D, 0) ' Declination
PRINT
PRINT "Equation of Time: "; ROff$(ET); " minutes"
PRINT "Solar Declination: "; ROff$(DC); " degrees"
PRINT
PRINT "Another calculation? (y/n) ";
WHILE INKEY$ "": WEND
DO
K$ = UCASE$(INKEY$)
LOOP UNTIL K$ = "Y" OR K$ = "N"
PRINT K$
LOOP UNTIL K$ = "N"
CLS
PRINT "These calculations of Equation of Time and Solar Declination"
PRINT "are simplified and approximate. However, they are quite good."
PRINT "All differences between calculated values and published ones"
PRINT "of the solar declination are small compared with the angular"
PRINT "diameter of the sun in the sky (0.5 degrees). Similarly,"
PRINT "differences between calculated and published values of the"
PRINT "equation of time are small compared with the time the sun"
PRINT "takes to traverse its own diameter as it moves across the sky"
PRINT "(2 minutes). The non-zero size of the sun, rather than any"
PRINT "inaccuracies of calculation, is the limiting factor on how"
PRINT "accurately the sun can be tracked in solar energy"
PRINT "applications, using this routine."
PRINT
PRINT
PRINT "Press any key to continue";
WHILE INKEY$ "": WEND
WHILE INKEY$ = "": WEND
CLS
PRINT "The Equation of Time is treated here as the correction to be"
PRINT "subtracted from a sundial reading to get local mean (clock)"
PRINT "time. It is therefore positive when sundial is ahead of clock."
PRINT "This is the usual sign convention, but the opposite usage is"
PRINT "sometimes found. Take care when comparing values of the"
PRINT "Equation of Time from different sources."
PRINT
PRINT "Note that atmospheric refraction of light affects the apparent"
PRINT "position of the sun in the sky when it is close to the"
PRINT "horizon. Sunlight is then too weak to be used for most"
PRINT "solar-energy applications, so refraction is not usually"
PRINT "included in calculations related to solar energy. This program"
PRINT "does not take account of refraction."
END
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
IF PI = 0 THEN ' first call, initialize constants
PI = 4 * ATN(1) ' ATN = arctangent
W = PI / 182.5'earth's mean orbital angular speed in radians per day
DR = 180 / PI ' degree/radian factor
C = -23.45 / DR ' reverse angle of earth's axial tilt
ST = SIN(C) ' sine of reverse tilt
CT = COS(C) ' cosine of reverse tilt
E2 = 2 * .0167 ' twice earth's orbital eccentricity
ZI = 12 * W ' 12 days from 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 - ZI)
D1 = D
END IF
IF F% THEN ' equation of time calculation
C = (A - ATN(TAN(B) / CT)) / PI
ET.Dec = 720 * (C - INT(C + .5))
' in 720 minutes, earth rotates PI radians
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
FUNCTION ROff$ (X)
' neatly rounds number to one place of decimals
S$ = LTRIM$(STR$(INT(10 * ABS(X) + .5)))
IF LEN(S$) = 1 THEN S$ = "0" + S$
IF VAL(S$) THEN S$ = MID$("-x+", SGN(X) + 2, 1) + S$
ROff$ = LEFT$(S$, LEN(S$) - 1) + "." + RIGHT$(S$, 1)
END FUNCTION
-------------------------------------------------
--- Platinum Xpress/Win/WINServer v3.0pr5
* Origin: The Bayman BBS,Toronto, (416)698-6573 - 1:250/514 (1:250/514)SEEN-BY: 633/267 @PATH: 250/514 123/500 379/1 633/267 |
|
| SOURCE: echomail via fidonet.ozzmosis.com | |
Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.