Day and Night Terminator - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim


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ω

(3.1)

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+GSTRA)

As we want to rearrange the formula so that we calculate latitude based on given longitude, we need to remove     sinφ by using  sinφ=1cosφ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.  

 

 

 

 

 

 

 

 

 

 

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