computation of flat sundials. fer j. de vries

secondary procedures


On this page you find the secondary procedures to compute all kinds of lines on a flat sundial.
Make a choice for the kind of lines you want to compute.
Chose a single line or make a loop for the lines in that kind in the range as mentioned.
Then for each line make a loop for a number of points for that line.
Sometimes this will be a loop for decl, another time this will be a loop for t or for something else.
Sometimes it is easier not to make loops directly for decl or t, but to make a loop for daynumbers and then to compute the needed decl and t or get them out of a table.
In the same way you may get the equation of time if needed.
Most of the time I use a loop in daynumbers in the procedures below.
With each decl and t call the mainprocedure to get the wanted shadowpoint if real.

Lines for local suntime.
Input (range of) wanted lines u. 0 <= u <= 24
Calculate hourangle t = ( u - 12 ) * 15
Loop for daynumbers dn from 172 to 355
Calculate decl for daynumber ( dn + 0.5 ) (that is noon)
Call mainprocedure
Refinement: If you want to draw these lines to the intersection point of the (pole)style make a loop for decl from -90 to 90 instead of a loop for daynumbers. This only if v isn't 0 )

Lines for local suntime with equation of time curve for period dec. 21 to june 21.
Input (range of) wanted lines u. 0 <= u <= 24
Loop for daynumbers dn from 355 to 538
If dn > 366 then dn = dn - 366
Calculate decl for daynumber ( dn + 0.5 )
Calculate equation of time E for daynumber ( dn + 0.5 )
Calculate hourangle t = ( u - 12 ) * 15 + E
Call mainprocedure

Lines for local suntime with equation of time curve for period june 21 to dec 21.
Input (range of) wanted lines u. 0 <= u <= 24
Loop for daynumbers dn from 172 to 355
Calculate decl for daynumber ( dn + 0.5)
Calculate equation of time E for daynumber ( dn + 0.5 )
Calculate hourangle t = ( u - 12 ) * 15 + E
Call mainprocedure

Lines for suntime for standard meridian. (This is time with longitude correction)
Input (range of) wanted lines u. 0 <= u <= 24
Calculate hourangle t = ( u - 12 ) * 15 + LC
Loop for daynumbers dn from 172 to 355
Calculate decl for daynumber ( dn + 0.5 )
Call mainprocedure
Refinement: If you want to draw these lines to the intersection point of the (pole)style make a loop for decl from -90 to 90 instead of a loop for daynumbers. This only if v isn't 0 )

Lines for suntime for standard meridian
with equation of time curve for period dec. 21 to june 21.

Input (range of) wanted lines u. 0 <= u <= 24
Loop for daynumbers dn from 355 to 538
If dn > 366 then dn = dn - 366
Calculate decl for daynumber ( dn + 0.5 )
Calculate equation of time E for daynumber ( dn + 0.5 )
Calculate hourangle t = ( u - 12 ) * 15 + E + LC
Call mainprocedure

Lines for suntime for standard meridian
with equation of time curve for period june 21 to dec 21.

Input (range of) wanted lines u. 0 <= u <= 24
Loop for daynumbers dn from 172 to 355
Calculate decl for daynumber ( dn + 0.5 )
Calculate equation of time E for daynumber ( dn + 0.5 )
Calculate hourangle t = ( u - 12 ) * 15 + E + LC
Call mainprocedure

Lines for the sun's declination.
Input (range of) wanted lines for decl in the range of -23.44 to 23.44
Loop for hourangle t in the range of -180 to 180
Call mainprocedure

Lines for dates (month, day).
Input (range of) months mth
Input (range of) days day
Calculate daynumber dn :
p = int(( mth + 9 ) / 12)
q = int( 275 * mth / 9 ) - 2 * p + day - 30
if leapyear dn = q + p else dn = q
Calculate decl for ( dn + 0.5 )
Loop for hourangle t in the range of -180 to 180
Call mainprocedure

Lines for Babylonian hours. Restriction -66.56 <= phi <= 66.56
Input (range of) wanted lines u. 0 <= u <= 24
Loop for daynumbers dn from 172 to 355
Calculate decl for daynumber ( dn + 0.5 )
Calulate half daylength T = arccos( - tan phi * tan decl )
Calculate hourangle t = u * 15 - T
Call mainprocedure

Lines for Italian hours. Restriction -66.56 <= phi <= 66.56
Input (range of) wanted lines u. 0 <= u <= 24
Loop for daynumbers dn from 172 to 355
Calculate decl for daynumber ( dn + 0.5 )
Calulate half daylength T = arccos( - tan phi * tan decl )
Calculate hourangle t = u * 15 + T
Call mainprocedure

Lines for antique hours or unequal hours. Restriction -66.56 <= phi <= 66.56
Input (range of) wanted lines u. 0 <= u <= 12
Loop for daynumbers dn from 172 to 355
Calculate decl for daynumber ( dn + 0.5 )
Calulate half daylength T = arccos( - tan phi * tan decl )
Calculate hourangle t = ( u - 6 ) * T / 6
Call mainprocedure

Lines for the sun's azimut.
Input (range of) wanted lines a. -180 <= a <= 180
Loop for the sun's height h. 0 <= h <= 90
Calculate:
x1 = sin a * cos h
y1 = cos a * cos h
z1 = sin h
R = -( 90 - phi )
x0 = x1
y0 = y1 * cos R - z1 * sin R
z0 = y1 * sin R + z1 * cos R
decl = arcsin(z0)
if decl is in range from -23.44 to 23.44 then call mainroutine half away with the values x1,y1,z1
( Start calculating x2, y2, z2 and continue the mainprocedure )
else point isn't real

Lines for the sun's height.
Input (range of) wanted lines h. 0 <= h <= 90
Loop for the sun's azimut a. -180 <= a <= 180
Calculate:
x1 = sin a * cos h
y1 = cos a * cos h
z1 = sin h
R = -( 90 - phi )
x0 = x1
y0 = y1 * cos R - z1 * sin R
z0 = y1 * sin R + z1 * cos R
decl = arcsin(z0)
if decl is in range from -23.44 to 23.44 then call mainroutine half away with values x1, y1, z1
( Start calculating x2, y2, z2 and continue the mainprocedure )
else point isn't real

Lines for sidereal time for period dec. 21 to june 21.
Input (range of) wanted lines u. 0 <= u <= 24
Loop for daynumbers dn from 355 to 538
If dn > 366 then dn = dn - 366
Calculate decl for daynumber ( dn + 0.5 )
Right ascension RA = arcsin( tan decl / tan 23.44 )
Hourangle t = u * 15 - RA
Call mainprocedure

Lines for sidereal time for period june 21 to dec 21.
Input (range of) wanted lines u. 0 <= u <= 24
Loop for daynumbers dn from 172 to 355
Calculate decl for daynumber ( dn + 0.5 )
Right ascension RA = 180 - arcsin( tan decl / tan 23.44 )
Hourangle t = u * 15 - RA
Call mainprocedure

Lines for planetary time for period dec. 21 to june 21. Restriction -66.56 <= phi <= 66.56
(Remember that planetary time is different from antique or unequal time. I refer to what is written by Joseph Drecker in his book 'Die Theorie der Sonnenuhren', 1925, page 73.)
Input (range of) wanted lines u. 0 <= u <= 12
Loop for daynumbers dn from 355 to 538
If dn > 366 then dn = dn - 366
Calculate decl for daynumber ( dn + 0.5 )
Right ascension RA = arcsin( tan decl / tan 23.44 )
Longitude of sun LS = arcsin( sin decl / sin 23.44 )
Longitude of rising point LE = LS + u * 15
Declination of rising point DE = arcsin ( sin LE * sin 23.44 )
Right ascension of rising point RE = arcsin ( tan DE / tan 23.44 )
Half day length of rising point T = arccos( - tan phi * tan DE)
Hourangle t = - T - RA + RE
Call mainprocedure

Lines for planetary time for period june 21 to dec 21. Restriction -66.56 <= phi <= 66.56
(Remember that planetary time is different from antique or unequal time. I refer to what is written by Joseph Drecker in his book 'Die Theorie der Sonnenuhren', 1925, page 73.)
Input (range of) wanted lines u. 0 <= u <= 12
Loop for daynumbers dn from 172 to 355
Calculate decl for daynumber ( dn + 0.5 )
Right ascension of sun RA = 180 - arcsin( tan decl / tan 23.44 )
Longitude of sun LS = 180 - arcsin( sin decl / sin 23.44 )
Longitude of rising point LE = LS + u * 15
Declination of rising point DE = arcsin ( sin LE * sin 23.44 )
Right ascension of rising point RE = arcsin ( tan DE / tan 23.44 )
Half day length of rising point T = arccos( - tan phi * tan DE)
Hourangle t = - T - RA + RE
Call mainprocedure



example of horizontal sundial with planetary hours for southern latitude 52.

Remarks:
The loops for daynumber are made in that way that you may choose an incremental step of 1 or 3 days, just how many points you want to calculate.
If you know a line is a straight line start with the loop for each line at one side till you find the first point and than start the loop in reverse at the other side to find the second point.
If the line isn't a real one, in both cases you will find no real point.

( Refinement: if you use the formulae to compute the sun's declination and the equation of time as given in the paragraph 'end notes' you will be a little more accurate if you calculate the values with dn + 0.5 + LM / 360.
In that way you get the values at your local noon. )