# mithengesun.frink

``` // Program to calculate sun crossing of the Infinite Corridor at MIT // known as "MIThenge" // // More info at also http://web.mit.edu/planning/www/mithenge.html // Thanks to Keith Winstein and Ken Olum for various data. // // For worked predictions, see https://futureboy.us/mithenge/ // // Alan Eliasen, eliasen@mindspring.com use mithengecorridor.frink use cambridgetempFourier.frink use sun.frink sep = "\t" preamble = "" html = false printall=false if ARGS.contains["--html"] {    sep = "<TD>"    preamble = "<TR><TD>"    html = true } if ARGS.contains["--printall"]    printall = true out = ["degrees", "arcmin", "arcsec"] dateOut = ### yyyy-MM-dd hh:mm:ss a zzz ### tz = "US/Eastern" date = beginningOfYear[now[], tz] enddate = beginningOfYearPlus[date, 2, tz] temperature = F while (date <= enddate) {    date = sunSecantAzimuth[date, lat, long, corridorAzimuthMeeus, temperature, pressure]    // Now refine with temperature for that time of day.    temperature = cambridgeTemp[date]    date = sunSecantAzimuth[date, lat, long, corridorAzimuthMeeus, temperature, pressure]        [azimuth, altitude] = refractedSunAzimuthAltitude[date, lat, long, temperature, pressure]    print[preamble]    print[(date -> [dateOut, tz]) + "\$sep"]    print[format[JD[date],day,5] + "\$sep"]    print[format[altitude,degrees,2] + "\$sep"]    print[format[F[temperature],1,0]]    radiusAngle = sunRadiusAngle[date]    if printall or (altitude < (0.91 degrees + radiusAngle) and altitude > -radiusAngle)    {       if !html          print["\$sep*"]       [f1,f2,f3] = drawSuns[date, lat, long, temperature, pressure, corridorAzimuth]       if html          println["\$sep\n     \$sep<A HREF=\"images/\$f1\">\n      <IMG SRC=\"images/\$f2\" WIDTH=100 HEIGHT=80></A>\n     \$sep<A HREF=\"images/\$f3\">[SVG]</A>"]    }    println[]    date = date + 1 day } // Function to draw the path of the sun as it crosses the corridor. drawSuns[date, lat, long, temperature, pressure, corridorAzimuth] := {    tz = "US/Eastern"    g = new graphics    g.font["SansSerif", .05 deg]    d1 = date - 2 min    do    {       [az, alt] = refractedSunAzimuthAltitude[d1, lat, long, temperature, pressure]       drawSun[g, d1, lat, long, temperature, pressure]       d1 = d1 - 2 min    } while alt < 1.2 degrees    d1 = date + 2 min    do    {       [az, alt] = refractedSunAzimuthAltitude[d1, lat, long, temperature, pressure]       drawSun[g, d1, lat, long, temperature, pressure]       d1 = d1 + 2 min    } while alt > 0 degrees    drawSun[g, date, lat, long, temperature, pressure, true]    // Draw doorway aperture    g.color[0,0,0,.7]    g.drawRectSides[corridorAzimuth - .5 degrees, 0 degrees, corridorAzimuth + .5degrees, -.91 degrees]    // Draw vertical centerline    g.line[corridorAzimuth, 0 degrees, corridorAzimuth, -.91 degrees]    // Draw floor    g.fillRectSides[corridorAzimuth - 1 degree, 0 degrees, corridorAzimuth + 1 degree, .5 degrees]    // Text description    g.color[1,1,1]    df = ###yyyy-MM-dd hh:mm:ss a zzz###    g.font["SansSerif", "bold", .1 degrees]    g.text[(date->[df,tz]), corridorAzimuth, .2 degrees]    // Render files    sd = ###yyyy-MM-dd###    f1 = "sun" + (date->[sd, tz]) + ".png"    g.write[f1, 640, 480]    f2 = "sunthumb" + (date->[sd, tz]) + ".png"    g.write[f2, 100, 80]    f3 = "sun" + (date->[sd, tz]) + ".svg"    g.write[f3, 640, 480] //   g.show[]    return [f1,f2,f3] } // Draw a single sun image with time/date stamp. drawSun[g, date, lat, long, temperature, pressure, yellow=false] := {    tz = "US/Eastern"    shortDate = ###hh:mm:ss a###    [azimuth, altitude] = refractedSunAzimuthAltitude[date, lat, long, temperature, pressure]        trueAz = (azimuth + 180 degrees) mod circle //   println["True azimuth at \$date is " + (trueAz->degrees)]    ra = sunRadiusAngle[date]    da = 2 ra //   println["Radius angle is " + (ra->"degrees")]    // Draw the sun    if yellow    {       g.color[1,1,0,0.7]       g.fillEllipseCenter[trueAz, -altitude, da, da]    }           g.color[0,0,0]    g.drawEllipseCenter[trueAz, -altitude, da, da]    g.text[(date -> [shortDate, tz]), trueAz, -altitude] //    g.text[(date -> [shortDate, tz]), trueAz, -altitude] } ```