# Calculate sunrise and sunset times based on an algorithm that
# originally appeared in QST, June 84, page 56. Transcribed from
# a BASIC program by N4TL based on calculations originally done
# by WS4G and SM0CCN.
# Usage: sun [ month day [latitude longitude]]
# If latitude or longitude are omitted, this script will look for
# global variables named LATITUDE and LONGITUDE. If the month
# or day is omitted, today's date will be used.
proc declination(month, day)
# Approximation for sun declination
local dec
@ dec = day + 30.3*(month - 1)
@ dec = 10 + .988*dec
@ dec = -23.5*cos(dec*pi/180)
return dec
end
proc fnacs(x)
return pi/2 - atan(x/sqrt(1-x*x))
end
proc printtime(name, timeofday, suffix)
local hour, min
if (timeofday < 0) @ timeofday += 24
if (timeofday > 24) @ timeofday -= 24
@ hour = floor(timeofday)
@ min = round((timeofday - hour)*60)
if (min == 60) then
@ min = 0
@ hour++
end
calc printf("%s is %d:%02d%s", name, hour, min, suffix)
end
proc sunrise(month, day, latitude, longitude)
local i, x, y, sunrise, sunset, length, dec, Month
set Month = january february march april may june ^
july august september october november december
if (latitude == "" || latitude == "") then
if ($?LONGITUDE && $?LATITUDE) then
@ latitude = LATITUDE
@ longitude = LONGITUDE
else
echo Longitude and Latitude must be specified
return
end
end
if (month == "" || day == "") then
local dt
set dt = `dt`
set month = $dt:1
set day = $dt:2
end
if (month !~ '[0-9]*') then
local m
@ m = "$lower(month)*"
for i = 0 to 11 do
if (Month[i] =~ m) break;
end
@ month = i + 1
end
@ dec = declination(month, day)
@ x = longitude/15
@ y = tan(dec*pi/180)*tan(latitude*pi/180)
if (y > 1 || y < -1) then
echo No sunrise or sunset
else
@ z = fnacs(y)*180/pi/15
@ sunrise = x + z
@ sunset = x - z
@ length = sunset - sunrise
printtime Sunrise $sunrise " UTC"
printtime Sunset $sunset " UTC"
printtime "Length of day" $length
end
end
sunrise $argv
Hamilton C shell |
Free Updates |
Free Demo Software |
Win32 Training
Y2K |
Customer Testimonials |
On-line Hamilton C shell User Guide
Home |
Email |
Support |
Company Profile |
Distributors |
Links
Copyright © 1997-2001 by Hamilton Laboratories.
All rights reserved.
You are visitor number
838.
This page was last modified August 14, 2001.