Day and Night Terminator
Main Concept
Definitions
Elevation Angle, : The angle between the object and the horizon
a := 3: b := 1.5: x0 := 0: y0 :=0: elli := plottools:-ellipse([x0,y0],a,b): plot1 := plots:-display(elli,':-scaling'=':-constrained'): c := 2.5: eq1 := (x - x0)^2 / a^2 + (y - y0)^2 / c^2 = 1: plot3 := plot( 0.5 * x, x = 0..5, y = 0 .. 3, ':-scaling'=':-constrained', ':-color' = "Niagara Burgundy"): sun := plots:-display(plottools:-circle([5, 2.5], 0.4, ':-color' = "red"), ':-scaling'=':-constrained'): sunLabel := plots:-textplot([[5, 1.8, "Sun"]], ':-color' = "red", ':-font' = ["DejaVu Sans", 'roman', 12]): xaxis := plots:-implicitplot(y = 0, x = 0..3, y = 0..3, ':-color' = "Niagara Burgundy"): d1 := 2: d2 := 2.5 / 3 * 2: eq2 := (x - x0)^2 / d1^2 + (y - y0)^2 / d2^2 = 1: plot4 := plots:-implicitplot(eq2, x = 1.714985851..2, y = 0..0.8574929255, ':-scaling' = ':-constrained', ':-color' = "Niagara blue"): elevation := plots:-textplot([[2.3, 0.5, alpha]], ':-color' = "blue", ':-font' = ["DejaVu Sans", 'roman', 15]): horizon := plots:-textplot([[4, -0.6, "Horizon"]], ':-color' = "black", ':-font' = ["DejaVu Sans", 'roman', 12], ':-align' = {'right', 'above'}): horizonArrow := plots:-arrow([4, -0.4], [-1, 0], ':-color' = "black", ':-scaling' = ':-constrained', ':-shape' = ':-arrow'): plots:-display(xaxis, plot1, plot3, sun, sunLabel, plot4, elevation, horizonArrow, horizon, ':-axes' = ':-none', ':-view' =[ -3 .. 6, -1.5 .. 3]);
Declination Angle, : The angle between sunray and the equatorial plane
Local Hour Angle, : The angle between the observer's and the sun's geographical position's meridian
c := plottools:-circle([x0, y0], 3, color = black): earth := plots:-display(c): eq2 := (x - x0)^2 / d1^2 + (y - y0)^2 / a^2 = 1: base := plots:-implicitplot(eq2, x = 0..2, y = -3..3, ':-scaling' = ':-constrained', ':-color' = "black"): curve1 := plots:-display(plottools:-rotate(base, -0.4)): curve2 := plots:-display(plottools:-rotate(base, Pi - 0.4)): zenith := plot(tan(Pi / 2 - 0.4) * x, x = -1.6..1.6): elli2 := plottools:-ellipse([x0,y0],a,1): plane := plots:-display(plottools:-rotate(elli2, -0.4),':-scaling'=':-constrained'): line1 := plot(-tan(0.4) * x, x = 0..4.7): line2 := plot(-0.978 * x, x = 0..1.5): line3 := plot(0.6 * x, x = 0..2.16): eq3 := (x - x0)^2 / (d1 / 3)^2 + (y - y0)^2 / (a / 3) ^2 = 1: angle1 := plots:-display(plottools:-rotate(plots:-implicitplot(eq3, x = 0.5..1, y = -0.25..1.5, ':-scaling' = ':-constrained', ':-color' = "blue"), -0.4)): eq4 := (x - x0)^2 / (a / 1.7)^2 + (y - y0)^2 / (1 / 1.7) ^2 = 1: angle2 := plots:-display(plottools:-rotate(plots:-implicitplot(eq4, x = 1.1..2.5, y = 0..-1, ':-scaling' = ':-constrained', ':-color' = "blue"), -0.4)): sunray1 := plots:-arrow([5, 1.15], [-2.2, 0], ':-color' = "red", ':-scaling' = ':-constrained', ':-shape' = ':-arrow'): sunray2 := plots:-arrow([5, 0.55], [-2, 0], ':-color' = "red", ':-scaling' = ':-constrained', ':-shape' = ':-arrow'): sunray3 := plots:-arrow([5, 0], [-1.95, 0], ':-color' = "red", ':-scaling' = ':-constrained', ':-shape' = ':-arrow'): sunray4 := plots:-arrow([5, -0.55], [-2, 0], ':-color' = "red", ':-scaling' = ':-constrained', ':-shape' = ':-arrow'): sunray5 := plots:-arrow([5, -1.15], [-2.2, 0], ':-color' = "red", ':-scaling' = ':-constrained', ':-shape' = ':-arrow'): eq5 := (x - x0)^2 + (y - y0)^2 = 19: circle2 := plots:-implicitplot(eq5, x = 4..4.2, y = -1..-2, ':-scaling' = ':-constrained', ':-color' = "blue"): points := plots:-pointplot([[2.15, 1.28]], ':-symbol' = ':-soliddiamond', 'color' = "Niagara LeafGreen", 'symbolsize' = 15): labels := plots:-textplot([[2.1, 1.3, ':-Observer', ':-font' = ["DejaVu Sans", "italic"], ':-align' = {':-above', ':-right'}, ':-color' = "Niagara LeafGreen"], [1.2, 0, phi, ':-font' = ["DejaVu Sans", "italic", 15], ':-align' = {':-above', ':-left'}, ':-color' = "blue"], [1.3, -0.9, omega, ':-font' = ["DejaVu Sans", "italic", 15], ':-align' = {':-above', ':-left'}, ':-color' = "blue"], [4.2, -1.8, delta, ':-font' = ["DejaVu Sans", "italic", 15], ':-align' = {':-above', ':-right'}, ':-color' = "blue"], [5, -0.4, "Sun rays", ':-font' = ["DejaVu Sans", "italic", 12], ':-align' = {':-above', ':-right'}, ':-color' = "red"]]): equatorArrow := plots:-arrow([-4,0.5], [1.4, 0], ':-color' = "Niagara Purple", ':-scaling' = ':-constrained', ':-shape' = ':-arrow'): equatorText := plots:-textplot([[-4, 0.5, "Equator"]], ':-color' = "Niagara Purple", ':-font' = ["DejaVu Sans", ':-roman', 12], ':-align' = {':-left'}): meridianArrow := plots:-arrow([2, -3.6], [-0.5,1], ':-color' = ':-black', ':-scaling' = ':-constrained', ':-shape' = ':-arrow'): meridianText := plots:-textplot([[2, -3.5, "Meridian perpendicular to sunrays"]], ':-color' = "black", ':-font' = ["DejaVu Sans", ':-roman', 12], ':-align' = {':-right'}): plots:-display(earth, curve1, curve2, zenith, plane, line1, line2, line3, angle1, angle2, sunray1, sunray2, sunray3, sunray4, sunray5, circle2, points, labels, equatorArrow, equatorText, meridianArrow, meridianText, ':-axes' = ':-none', ':-size' = [0.5,0.5])
Note: = φ represents the latitude of the observer in above diagram
Sidereal time: Time is calculated based on the stars instead of the sun
Right ascension: A longitudinal measurement based on time starting from the Vernal Equinox (March).
Twilight
Twilight can be categorized based on the degrees of the angle of the sun below the horizon, which can be described with elevation angle.
Sunrise and sunset: Elevation angle is 0 degree
Civil twilight: Elevation angle is -6 degrees
Nautical twilight: Elevation angle is -12 degrees
Astronomical twilight : Elevation angle is -18 degrees
Formulas
The coordinates (longitude, latitude) on terminator and twilight boundaries can be computed by using the following formulas from spherical geometry, so we can draw the terminator and twilight boundaryies with the computed longitude and latitude pairs on world map.
sin(alpha) = sin(delta) * sin(phi) + cos(delta) * cos(phi)* cos(omega)
sin⁡α=sin⁡δ⁢sin⁡φ+cos⁡δ⁢cos⁡φ⁢cos⁡ω
where
α= Elevation Angle δ = Declination Angle φ = Latitude of the observer ω= Local Hour Angle
Note:
Declination angle can be determined by date
Local hour angle is related to Longitude, Greenwich Sidereal Time and Right Ascension. ( ω=L+GST−RA)
As we want to rearrange the formula so that we calculate latitude based on given longitude, we need to remove sin⁡φ by using sin⁡φ=1−cos⁡φ2 . Then sin⁡φcan be substituted back into (3.1) to get a quadratic equation with respect to cos⁡δ.
Choose values for Color Scheme, projection and grid line to get terminator display on different projections with different options.
Input Time to get a starting time for an animation. Click Hourly or Weekly button to change the increment period, and click "play" button to view the animation. Change Year, Month, Day, Hour, Minute, Second to get terminator display for different date.
PatchworkNiagaraNauticalSpringMonoDaltonExecutiveBrightMapleVReseneGeneric
GeographicGlobeWinkel TripelCassiniMercatorTransverse MercatorMiller CylindricalCylindrical Equal AreaLambert Azimuthal Equal AreaAzimuthal EquidistantVander GrintenBonneBottomleyWernerSinusoidalRobinsonLambert Cylindrical Equal AreaBehrmannSmyth Equal SurfaceTrystan EdwardsHobo DyerGall PetersBalthasartWerner
OnOff
References
Illinois Institute of Technology http://mypages.iit.edu/~maslanka/SolarGeo.pdf, accessed December 12, 2018
University of Arizona http://ircamera.as.arizona.edu/astr_250/Lectures/LECTURE_01.HTM, accessed December 12, 2018
Juergen Giesen, "Basics of Positional Astronomy" http://www.geoastro.de/elevaz/basics/index.htm, accessed December 12, 2018
Juergen Giesen, "Astronomical Algorithms" http://www.geoastro.de/elevaz/basics/meeus.htm#solar, accessed December 12, 2018
Vanderbilt University https://my.vanderbilt.edu/astronav/overview/3-completing-a-worksheet/section-iii/lha/, accessed December 12, 2018
Time and Date AS "Twilight, Dawn, and Dusk" https://www.timeanddate.com/astronomy/different-types-twilight.html, accessed December 12, 2018
More MathApps
MathApps/NaturalSciences
Download Help Document