daylight.frink

View or download daylight.frink in plain text format


// Calculates duration of daylight over the course of a year.  It now also
// graphs sunrise and sunset times over the course of a year, including offsets
// for daylight saving times.

// Requires the sun.frink high-precision astronomical library.
// Requires the Grid.frink grid-drawing library.
use sun.frink
use Grid.frink

lat =   DMS[34.54, 0, 0] North
long =  DMS[112.4685, 0, 0] West
tz =   "US/Arizona"

out =  ### yyyy-MM-dd ###
time = ### HH:mm:ss ###

temp = F[64]
pressure = 29.90 inHg

g = new graphics
pRise = new polyline
pSet = new polyline

date = beginningOfYear[now[], tz]
enddate = beginningOfYearPlus[date, 1, tz]

while date < enddate
{
   sunrise = sunrise[date+6 hours, lat, long, temp, pressure]
   sunset  = sunset[date+18 hours, lat, long, temp, pressure]

   daylength = sunset - sunrise

   print[(date -> [out, tz]) + "\t" + (daylength -> [hour, min, sec, 0])]
   println["\t" + (sunrise -> [time, tz]) + "\t" + (sunset-> [time, tz])]
//   println["date is $date"]
   pRise.addPoint[JD[date], (sunrise - date)/s]
   pSet.addPoint[JD[date], (sunset - date)/s]
//   println[(sunrise-date)/s]
//   println[(sunset-date)/s]
   date = beginningOfNextDay[date, tz]
}

g.add[pRise]
g.add[pSet]

grid = new Grid
grid.font["Monospaced", 20 min/s]

grid.color[0,0,0,.4]
grid.makeVerticalCalendarLines[g, Grid.MONTH, false, tz]
grid.makeVerticalCalendarLabels[g, Grid.MONTH, false, tz]

grid.makeHorizontalLines[g, hour/s, false]
grid.makeHorizontalLabels[g, hour/s, hour/s, false, {|x| floor[x*second /hours] + ":00"}]

grid.color[0,0,0,.2]
grid.makeVerticalCalendarLines[g, Grid.DAY_OF_MONTH, false, tz]
grid.makeHorizontalLines[g, 10 min/s, false]

g.add[grid.getGrid[]]
g.show[]
tzf = tz
tzf =~ %s/\//./g
g.write["daylight.$tzf.png", 1024, 800]


View or download daylight.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 18234 days, 8 hours, 9 minutes ago.