>I recently was asked the following question:
><Are you aware of any software or organization able to plot analemmatic
>sundial positions?>
>
>Does anyone have an answer?
>
>Happy Holidays to all!
>
>Claude Hartman
>[EMAIL PROTECTED]
Claude
The following is HyperTalk code that I use to create the analemmas on my
sundials.
You are welcome to use it. It should notbe too difficult to translate to
some other programming language. The equations are based upon the
Peter-Duffett-Smith book. The output is a plot of the difference between
clock time and sun time versus declination of the sun. These values vary
somewhat each year but tend to repeat themselves every four years. They are
more accurate than needed for sundial work. If the analemma is projected
onto some other surface then a globe then that projection would need to be
performed on the data.
Dan Wenger
on mouseUp
put 23.441884 into sundeclat -- epoch 1990
put pi/180 into piover180
-- Jan 0.0, 1990 epoch
-- Peter Duffett-Smith page 88
put empty into theBin
put piover180*sundeclat into Ec --eccentricity
put cos(Ec) into cosEc
put sin(Ec) into sinEc
put 1 into i
put .1 into del
put 360/365.242191 into R
put 279.403303-282.768422 into C
put 279.403303 into C1
put 2*.016713/piover180 into C2
repeat
put i*R + C into arg
put sin(arg*piover180) into sinarg
put i*R+C2*sinarg+C1 into lambda
if lambda>360 then
subtract 360 from lambda
end if
put piover180*lambda into dwL
put tan(dwL)*cosEc into alpha1
put atan(alpha1) into alpha
put alpha/piover180 into alpha -- in degrees
if lambda >=0 and lambda < 90 then
put alpha into alpha
end if
if lambda > 90 and lambda <= 180 then
put alpha +180 into alpha
end if
if lambda >180 and lambda < 270 then
put alpha +180 into alpha
end if
if lambda >270 and lambda < 360 then
put alpha +360 into alpha
end if
if i is 1 then
put alpha into alphahold -- same for reference
end if
put sinEc*sin(dwL) into sindelta
put sindelta*sindelta into dwS
put dwS/(1-dwS) into tandelta
put sqrt(tandelta) into tandelta
put atan(tandelta) into delta
put delta/piover180 into delta
if sindelta >=0 then
put delta into delta
end if
if sindelta < 0 then
put -delta into delta
end if
-- alpha is GST
-- do rough UT calculation
put (i-1)*(360/365.242191) into angle
put angle + alphahold into UT
if UT >360 then
subtract 360 from UT
end if
put (UT - alpha) into diff
if diff >100 then
put (UT - alpha-360) into diff
end if
put diff & "," & delta & return after theBin
add del to i
if i>365 then exit repeat
end repeat
put theBin into the clipboard
end mouseUp
Daniel Lee Wenger
Santa Cruz, CA
[EMAIL PROTECTED]
http://wengersundial.com
http://wengersundial.com/wengerfamily
Daniel Lee Wenger
Santa Cruz, CA
[EMAIL PROTECTED]
http://wengersundial.com
http://wengersundial.com/wengerfamily