RosettaCodeData/Task/Horizontal-sundial-calculations/FutureBasic/horizontal-sundial-calculations.futurebasic
2016-12-05 23:44:36 +01:00

26 lines
1 KiB
Text

include "ConsoleWindow"
local fn rad2deg( theta as double ) as double
end fn = theta * 180 / pi
local fn deg2rad( theta as double ) as double
end fn = theta * pi / 180
local fn SolarHourAngle( latitude as double, longitude as double, meridian as double )
dim as long hour
dim as double hra, hla, time
dim as Str15 ap
print "Latitude = "; latitude; chr$(13); "Longitude = "; longitude; chr$(13); "Meridian = "; meridian
print : print "sine of latitude: "; sin(latitude * pi / 180 ); chr$(13); " diff longitude: "; longitude - meridian
print : print "Time", "Sun hour angle", "Dial hour line angle"
for hour = 6 to 18
hra = ( 15 * hour ) - longitude + meridian - 180
hla = fn rad2deg( atn( sin( fn deg2rad( latitude ) ) * tan( fn deg2rad( hra ) )))
if abs( hra ) > 90 then hla = hla + 180 * sgn( hra * latitude )
if hour > 12 then time = hour - 12 : ap = " a.m." else time = hour : ap = " p.m."
print using "##"; time; ap, using "####.##"; hra, using "####.###"; hla
next hour
end fn
fn SolarHourAngle( -4.95, -150.5, -150.0 )