>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

Reply via email to