transit3.frink

View or download transit3.frink in plain text format


// This program calculates the angular separations of all the different
// pairs of planets in the sky (and the moon).  The output is a large table
// of separations suitable for graphing.

use planets.frink
use sun.frink

timezone = "Mountain"
lat = 39.58560 degrees North
long = 104.89598 degrees West

/*lat = DMS[40, 33, 35.84]  North
long = DMS[105,04,57.64]  West*/



df = ### yyyy-MM-dd-HH:mm ###

g = new graphics

//for planet = [Planet.Mercury, Planet.Venus]
planet = Planet.Venus
startdate = #2012-06-05 04:04 PM#
enddate =   sunset[startdate, lat, long]
println["Sunset is $enddate"]

g = new graphics
g.backgroundColor[.8, .8, 1]
// Draw the sun
g.color[1,1,0]  // Yellow
azsun = 40 deg
altsun = 10 deg

[azsun, altsun] = refractedSunAzimuthAltitude[startdate, lat, long]
sunRadius =   sunRadiusAngle[startdate]
g.fillEllipseCenter[(azsun-azsun) cos[-altsun], -(altsun-altsun), 2 sunRadius, 2 sunRadius]
g.color[0,0,0]
win = g.show[]
g.font["SansSerif", 0.01 degree]
dateformat = ###h:mm a###

for d = startdate to enddate step 20 min
{
   [azsun, altsun] = refractedSunAzimuthAltitude[d, lat, long]
   [azp, altp]     = planet.refractedAzimuthAltitude[d, lat, long]

   separation = angularSeparation[azsun, altsun, azp, altp]

   sunRadius =   sunRadiusAngle[d]
   venusRadius = planet.radiusAngle[d]
   //println[venusRadius -> [0, "deg", "arcmin", "arcsec"]]

   flag =""
   if separation < sunRadius + venusRadius
   {
      flag = "*"
      
      if separation < sunRadius - venusRadius
         flag = "**"
   }

   azp = (azp + 180 degrees) mod circle
   azsun = (azsun + 180 degrees) mod circle
   azsep = (azp-azsun) mod (360 degrees)
   if azsep > 180 degrees
      azsep = azsep - circle
   // Draw Venus
   // How much more black could it be?  The answer is none.  None more black.
   x = azsep cos[-altp]
   y = -(altp-altsun)
   g.fillEllipseCenter[x, y, 2 venusRadius, 2 venusRadius]
   
   g.text[d -> [dateformat, timezone], x -  venusRadius, y +  venusRadius, "right", "center", 45 deg]
//      g.add[planet.drawPolygonRelativeToZenith[d, lat, long, azp, -altp, venusRadius, true]]
   win.repaint[]
   
   println[(d->timezone) + "\t" + format[separation,"deg", 5] + "\t" + format[azsep,"deg",2] + "\t$flag" ]
}

g.write["venusChart.svg", 1024, 768]
g.write["venusChart.png", 1024, 768]
g.write["venusChart.html", 1024, 768]


View or download transit3.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 17628 days, 11 hours, 57 minutes ago.