computation of flat sundials. fer j. de vries
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

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. )