T he phase of the moon the day before is shown in brackets. Since this web site is hosted in America, for you the day may be the day before and the day before the day before that. |
This is moondisplayyellow.cgi :- top #!/usr/bin/perlml use strict; use GD; #use CGI qw(:standard); #print "Content-type: text/html\n\n"; #$| = 1; #open (STDERR, ">&STDOUT"); #use CGI::Carp qw(fatalsToBrowser); my ($xm, $xm1, $xs, $xs1, $S, $xd, $hp, $sw1, $sw3); my ($dy, $mn, $yr, $lam, $dpsi, $bet, $p, $q, $x, $y, $f, $r, $thet, $djd); my ($cd, $lsn, $sd, $i, $k, $md, $ms, $an, $mn1, $yr1, $a, $b, $c, $d); my ($t, $eps, $epsr, $tpi, $deps, $eps1, $seps, $ceps, $cy, $ty, $sy); my ($cx, $sx, $tx, $sq, $t2, $ls, $ld, $tls, $tld, $nm, $tnm, $m, $ma); my ($ea, $SS, $dla, $tnu2, $nu, $a1, $b1, $d1, $e1, $c1, $h1, $dl, $dr, $rsn); my ($m1, $m2, $m3, $m4, $m5, $m6, $de, $sa, $sb, $sn, $n, $e, $l, $sc, $e2); my ($g, $w1, $w2, $xd1, $xp, $minmoon); my ($im, , $im2, $white, $black, $red, $blue, $yellow); my ($PHASE, $PHASE1, $PHASE2, $head, $dayte, $W ,$outfile ,$footnote); my ($buff1, $buff2, $para, $fromangle, $toangle, $waxwan, $fillpos, $adjust); my $pi = 3.1415926535; print "Content-type: image/gif\n\n"; binmode STDOUT; my $POTM = &CalcyMoon(0); my $POTM1 = &CalcyMoon(1); $minmoon = 0.010; # no moon if phase of the moon less than this &moondraw; syswrite(STDOUT, $buff1); #print << "(MOONHEAD)"; #<HTML><HEAD><TITLE>Phase of the moon the day before</TITLE> #<LINK REL="SHORTCUT ICON" HREF="/moon.ico"> #</HEAD> #<BODY bgcolor=#CCCCCC><FONT FACE=ARIAL> #<CENTER><H3>Phase of the moon the day before</H3></CENTER> #(MOONHEAD) #print "The phase of the moon for day $dy in month $mn of year $yr was $POTM<BR>\n"; #print "The phase of the moon for the day before day $dy in month $mn of year $yr was $POTM1<BR>\n"; #print "</BODY></HTML>\n"; sub moondraw { # draw the moon Devendra December 24th 1998 updated July 10th 2013. $im = new GD::Image(400,380); # background color is the next colorAllocate $white = $im->colorAllocate(255,255,255); $black = $im->colorAllocate(0,0,0); $red = $im->colorAllocate(255,0,0); $blue = $im->colorAllocate(0,0,255); $yellow = $im->colorAllocate(255,255,0); $head = "THE STATUS OF THE MOON"; $dayte = 'FOR DAY '.$dy.' IN MONTH '.$mn.' OF THE YEAR '.$yr; $PHASE1 = 300 - ($POTM * 600); $PHASE2 = 300 - ((1 - $POTM) * 600); if (abs($POTM) <= $minmoon) { $fromangle = 0; $toangle = 360; $waxwan = "no moon"; $fillpos = 349; } else { if ($POTM > $POTM1) { $fromangle = 270; $toangle = 90; if ($POTM < 0.5) { $waxwan = "waxing crescent (growing)"; }else{ $waxwan = "waxing gibbous (growing)";} $fillpos = 349; } else { $fromangle = 90; $toangle = 270; if ($POTM < 0.5) { $waxwan = "waning crescent (shrinking)"; }else{ $waxwan = "waning gibbous (shrinking)";} $fillpos = 51; }} if (abs($POTM - 1) <= $minmoon) { $im->arc(200,200,300,300,0,360,$black); $im->fill(200,200,$yellow); # full moon $waxwan = "full moon"; } else { if (abs($POTM) <= $minmoon) { $im->arc(200,200,300,300,$fromangle,$toangle,$yellow); # new moon - draw yellow circle $im->fill(60,200,$black); # and fill it with black } else { $im->arc(200,200,300,300,$fromangle,$toangle,$black); # draw left hand arc if ($POTM<0.5) { $im->arc(200,200,$PHASE1,300,$fromangle,$toangle,$black); # draw an ellipse - left hand arc } if (abs($POTM-0.5)<0.001) { $im->GD::Image::line(200,50,200,350,$black); # draw a vertical line } if ($POTM>0.5) { $im->arc(200,200,$PHASE2,300,$toangle,$fromangle,$black); #draw an ellipse - right hand arc } $im->fill($fillpos,200,$yellow); # in any case fill it with yellow } } $footnote = 'Phase = '.$POTM." (".$POTM1.") ".$waxwan; $im->fill(25,10,$black); $im->GD::Image::string (gdLargeFont, 25, 10, $head, $white); $im->GD::Image::string (gdLargeFont, 25, 25, $dayte, $white); $im->GD::Image::string (gdLargeFont, 7, 360, $footnote ,$white); $buff1 = $im->gif; } sub CalcyMoon { $adjust = $_[0]; ($dy, $mn, $yr) = (localtime)[3,4,5]; $yr = $yr + 1900; $mn = $mn + 1; &moon($adjust); &sun($adjust); $cd = cos($lam - $lsn) * cos($bet); $d = &acs($cd); $sd = sin($d); $i = (.1468 * $sd * (1 - .0549 * sin($md))) / (1 - .0167 * sin($ms)); $i = $pi - $d - &rad($i); $k = (1 + cos($i)) / 2; return &rou($k, 1000); } sub acs { $W = $_[0]; return 1.570796327 - &asn($W); } sub rou { $x = $_[0]; $y = $_[1]; return int($x * $y + .5) / $y; } sub sun { my $adjust = $_[0]; &julday; $djd = $djd - $adjust; $t = $djd / 36525; $t2 = $t * $t; $a = 100.0021359 * $t; $b = 360 * ($a - int($a)); $ls = 279.69668 + (.0003025 * $t2) + $b; $a = 99.9973604200004 * $t; $b = 360 * ($a - int($a)); $ms = 358.47583 - ((.00015 + (.0000033 * $t)) * $t2) + $b; $SS = .016751 - (.0000418 * $t) - (1.26E-07 * $t2); $ma = &rad($ms); &anomaly; $a = 62.5520947200002 * $t; $b = 360 * ($a - int($a)); $a1 = &rad(153.23 + $b); $a = 125.1041894 * $t; $b = 360 * ($a - int($a)); $b1 = &rad(216.57 + $b); $a = 91.56766028 * $t; $b = 360 * ($a = int($a)); $c1 = &rad(312.69 + $b); $a = 1236.853095 * $t; $b = 360 * ($a - int($a)); $d1 = &rad(350.74 - .00144 * $t2 + $b); $e1 = &rad(231.19 + 20.2 * $t); $a = 183.1353208 * $t; $b = 360 * ($a - int($a)); $h1 = &rad(353.4 + $b); $dl = .00134 * cos($a1) + .00154 * cos($b1) + .002 * cos($c1); $dl = $dl + .00179 * sin($d1) + .00178 * sin($e1); $dr = 5.43E-06 * sin($a1) + 1.575E-05 * sin($b1) + 1.627E-05 * sin($c1); $dr = $dr + 3.076E-05 * cos($d1) + 9.27E-06 * sin($h1); $lsn = $nu + &rad($ls - $ms + $dl); $tpi = 6.28318530800002; $rsn = 1.0000002 * (1 - $SS * cos($ea)) + $dr; while ($lsn < 0) { $lsn = $lsn + $tpi;} while ($lsn > $tpi) { $lsn = $lsn - $tpi;} } sub julday { { $mn1 = $mn; $yr1 = $yr; $b = 0; if ($yr1 < 0) { $yr1 = $yr1 + 1;} if ($mn < 3) { $mn1 = $mn + 12; $yr1 = $yr1 - 1;} if (($yr >= 1582) || (($yr == 1582) && ($mn < 10)) || (($yr == 1582) && ($mn == 10) && ($dy < 15))) { $a = int($yr1 / 100); $b = 2 - $a + int($a / 4); } if ($yr1 >= 0) { $c = int(365.25 * $yr1) - 694025; } else { $c = &itg((365.25 * $yr1) - .75) - 694025; } $d = int(30.6001 * ($mn1 + 1)); $djd = $b + $c + $d + $dy - 0.5 ; }} sub rad { $W = $_[0]; return .01745329252 * $W; } sub moon { my $adjust = $_[0]; &julday; $djd = $djd - $adjust; $t = $djd / 36525; $t2 = $t * $t; $m1 = 27.32158213; $m2 = 365.2596407; $m3 = 27.55455094; $m4 = 29.5305886800001; $m5 = 27.21222039; $m6 = 6798.36330700001; $m1 = $djd / $m1; $m2 = $djd / $m2; $m3 = $djd / $m3; $m4 = $djd / $m4; $m5 = $djd / $m5; $m6 = $djd / $m6; $m1 = 360 * ($m1 - int($m1)); $m2 = 360 * ($m2 - int($m2)); $m3 = 360 * ($m3 - int($m3)); $m4 = 360 * ($m4 - int($m4)); $m5 = 360 * ($m5 - int($m5)); $m6 = 360 * ($m6 - int($m6)); $ld = 270.434164 + $m1 - (.001133 - .0000019 * $t) * $t2; $ms = 358.475833 + $m2 - (.00015 + .0000033 * $t) * $t2; $md = 296.104608 + $m3 + (.009192 + .0000144 * $t) * $t2; $de = 350.737486 + $m4 - (.001436 - .0000019 * $t) * $t2; $f = 11.250889 + $m5 - (.003211 + .0000003 * $t) * $t2; $n = 259.183275 - $m6 + (.002078 + .000022 * $t) * $t2; $a = &rad(51.2 + 20.2 * $t); $sa = sin($a); $sn = sin(&rad($n)); $b = 346.56 + (132.87 - .0091731 * $t) * $t; $sb = .003964 * sin(&rad($b)); $c = &rad($n + 275.05 - 2.3 * $t); $sc = sin($c); $ld = $ld + .000233 * $sa + $sb + .001964 * $sn; $ms = $ms - .001778 * $sa; $md = $md + .000817 * $sa + $sb + .002541 * $sn; $f = $f + $sb - .024691 * $sn - .004328 * $sc; $de = $de + .002011 * $sa + $sb + .001964 * $sn; $e = 1 - (.002495 + 7.52E-06 * $t) * $t; $e2 = $e * $e; $ld = &rad($ld); $ms = &rad($ms); $n = &rad($n); $de = &rad($de); $f = &rad($f); $md = &rad($md); $l = 6.28875 * sin($md) + 1.27402 * sin(2 * $de - $md) + .658309 * sin(2 * $de); $l = $l + .213616 * sin(2 * $md) - $e * .185596 * sin($ms) - .114336 * sin(2 * $f); $l = $l + .058793 * sin(2 * ($de - $md)) + .057212 * $e * sin(2 * $de - $ms - $md); $l = $l + .05332 * sin(2 * $de + $md) + .045874 * $e * sin(2 * $de - $ms); $l = $l + .041024 * $e * sin($md - $ms); $l = $l - .034718 * sin($de) - $e * .030465 * sin($ms + $md); $l = $l + .015326 * sin(2 * ($de - $f)) - .012528 * sin(2 * $f + $md); $l = $l - .01098 * sin(2 * $f - $md) + .010674 * sin(4 * $de - $md); $l = $l + .010034 * sin(3 * $md) + .008548 * sin(4 * $de - 2 * $md); $l = $l - $e * .00791 * sin($ms - $md + 2 * $de) - $e * .006783 * sin(2 * $de + $ms); $l = $l + .005162 * sin($md - $de) + $e * .005 * sin($ms + $de); $l = $l + .003862 * sin(4 * $de) + $e * .004049 * sin($md - $ms + 2 * $de); $l = $l + .003996 * sin(2 * ($md + $de)) + .003665 * sin(2 * $de - 3 * $md); $l = $l + $e * .002695 * sin(2 * $md - $ms) + .002602 * sin($md - 2 * ($f + $de)); $l = $l + $e * .002396 * sin(2 * ($de - $md) - $ms) - .002349 * sin($md + $de); $l = $l + $e2 * .002249 * sin(2 * ($de - $ms)) - $e * .002125 * sin(2 * $md + $ms); $l = $l - $e2 * .002079 * sin(2 * $ms) + $e2 * .002059 * sin(2 * ($de - $ms) - $md); $l = $l - .001773 * sin($md + 2 * ($de - $f)) - .001595 * sin(2 * ($f + $de)); $l = $l + $e * .00122 * sin(4 * $de - $ms - $md) - .00111 * sin(2 * ($md + $f)); $l = $l + .000892 * sin($md - 3 * $de); $l = $l - $e * .000811 * sin($ms + $md + 2 * $de); $l = $l + $e * .000761 * sin(4 * $de - $ms - 2 * $md); $l = $l + $e2 * .000704 * sin($md - 2 * ($ms + $de)); $l = $l + $e * .000693 * sin($ms - 2 * ($md - $de)); $l = $l + $e * .000598 * sin(2 * ($de - $f) - $ms) + .00055 * sin($md + 4 * $de); $l = $l + .000538 * sin(4 * $md) + $e * .000521 * sin(4 * $de - $ms); $l = $l + .000486 * sin(2 * $md - $de); $l = $l + $e2 * .000717 * sin($md - 2 * $ms); $lam = $ld + &rad($l); $tpi = 6.28318530800002; while ($lam < 0) { $lam = $lam + $tpi; } while ($lam > $tpi) { $lam = $lam - $tpi; } $g = 5.12819 * sin($f) + .280606 * sin($md + $f) + .277693 * sin($md - $f); $g = $g + .173238 * sin(2 * $de - $f) + .055413 * sin(2 * $de + $f - $md); $g = $g + .046272 * sin(2 * $de - $f - $md) + .032573 * sin(2 * $de + $f); $g = $g + .017198 * sin(2 * $md + $f) + .009267 * sin(2 * $de + $md - $f); $g = $g + .008823 * sin(2 * $md - $f) + $e * .008247 * sin(2 * $de - $ms - $f); $g = $g + .004323 * sin(2 * ($de - $md) - $f) + .0042 * sin(2 * $de + $f + $md); $g = $g + $e * .003372 * sin($f - $ms - 2 * $de); $g = $g + $e * .002472 * sin(2 * $de + $f - $ms - $md); $g = $g + $e * .002222 * sin(2 * $de + $f - $ms); $g = $g + $e * .002072 * sin(2 * $de - $f - $ms - $md); $g = $g + $e * .001877 * sin($f - $ms + $md) + .001828 * sin(4 * $de - $f - $md); $g = $g - $e * .001803 * sin($f + $ms) - .00175 * sin(3 * $f); $g = $g + $e * .00157 * sin($md - $ms - $f) - .001487 * sin($f + $de); $g = $g - $e * .001481 * sin($f + $ms + $md) + $e * .001417 * sin($f - $ms - $md); $g = $g + $e * .00135 * sin($f - $ms) + .00133 * sin($f - $de); $g = $g + .001106 * sin($f + 3 * $md) + .00102 * sin(4 * $de - $f); $g = $g + .000833 * sin($f + 4 * $de - $md) + .000781 * sin($md - 3 * $f); $g = $g + .00067 * sin($f + 4 * $de - 2 * $md); $g = $g + .000606 * sin(2 * $de - 3 * $f) + .000597 * sin(2 * ($de + $md) - $f); $g = $g + $e * .000492 * sin(2 * $de + $md - $ms - $f); $g = $g + .00045 * sin(2 * ($md - $de) - $f) + .000439 * sin(3 * $md - $f); $g = $g + .000423 * sin($f + 2 * ($de + $md)) + .000422 * sin(2 * $de - $f - 3 * $md); $g = $g - $e * .000367 * sin($ms + $f + 2 * $de - $md); $g = $g - $e * .000353 * sin($ms + $f + 2 * $de) + .000331 * sin($f + 4 * $de); $g = $g + $e * .000317 * sin(2 * $de + $f - $ms + $md); $g = $g + $e2 * .000306 * sin(2 * ($de - $ms) - $f) - .000283 * sin($md + 3 * $f); $w1 = .0004664 * cos($n); $w2 = .0000754 * cos($c); $bet = &rad($g) * (1 - $w1 - $w2); $hp = .950724 + .051818 * cos($md) + .009531 * cos(2 * $de - $md); $hp = $hp + .007843 * cos(2 * $de) + .002824 * cos(2 * $md); $hp = $hp + .000857 * cos(2 * $de + $md) + $e * .000533 * cos(2 * $de - $ms); $hp = $hp + $e * .000401 * cos(2 * $de - $md - $ms) + $e * .00032 * cos($md - $ms); $hp = $hp - .000271 * cos($de) - $e * .000264 * cos($ms + $md); $hp = $hp - .000198 * cos(2 * $f - $md); $hp = $hp + .000173 * cos(3 * $md) + .000167 * cos(4 * $de - $md); $hp = $hp - $e * .000111 * cos($ms) + .000103 * cos(4 * $de - 2 * $md); $hp = $hp - .000084 * cos(2 * $md - 2 * $de) - $e * .000083 * cos(2 * $de + $ms); $hp = $hp + .000079 * cos(2 * $de + 2 * $md) + .000072 * cos(4 * $de); $hp = $hp + $e * .000064 * cos(2 * $de - $ms + $md); $hp = $hp - $e * .000063 * cos(2 * $de + $ms - $md) + $e * .000041 * cos($ms + $de); $hp = $hp + $e * .000035 * cos(2 * $md - $ms) - .000033 * cos(3 * $md - 2 * $de); $hp = $hp - .00003 * cos($md + $de) - .000029 * cos(2 * ($f - $de)); $hp = $hp - $e * .000029 * cos(2 * $md + $ms) + $e2 * .000026 * cos(2 * ($de - $ms)); $hp = $hp - .000023 * cos(2 * ($f - $de) + $md); $hp = $hp + $e * .000019 * cos(4 * $de - $ms - $md); $hp = &rad($hp); } sub anomaly { $tpi = 6.283185308; $m = $ma - $tpi * int($ma / $tpi); $ea = $m; $dla = $ea - ($SS * sin($ea)) - $m; while (abs($dla) >= .000001) { $dla = $dla / (1 - ($SS * cos($ea))); $ea = $ea - $dla; $dla = $ea - ($SS * sin($ea)) - $m; # set up for next time around } $tnu2 = sqrt((1 + $SS) / (1 - $SS)) * tan($ea / 2); $nu = 2 * atan2($tnu2, 1); } sub tan { $W = $_[0]; return sin($W)/cos($W); } sub asn { $W = $_[0]; return atan2($W / (sqrt(1.000001 - $W * $W) + 1E-20), 1); } This is moonwrite.cgi :- top #!/usr/bin/perlml use strict; use CGI qw(:standard); print "Content-type: text/html\n\n"; $| = 1; open (STDERR, ">&STDOUT"); use CGI::Carp qw(fatalsToBrowser); my (@lines, $storey, $source, $storey, $dy, $mn, $yr); my ($apollo, $source1, $source2, $source3, $windows8, $server, $software); $server = $ENV{SERVER_NAME}; # like onwardoverland.com $software = $ENV{SERVER_SOFTWARE}; # like Microsoft-IIS/8.0 $windows8 = ""; if (substr($software, 0, 13) eq "Microsoft-IIS"){$windows8 = "c:\\devhtml\\cgi-bin\\";} $source1 = "moondisplayyellow.cgi"; $source2 = "moonwrite.cgi"; $source3 = "moontextimage.cgi"; print << "(MOONHEAD)"; <HTML><HEAD><TITLE>Phases of the moon</TITLE> <LINK REL="SHORTCUT ICON" HREF="/moon.ico"> </HEAD> <BODY bgcolor=#CCCCCC><A NAME = TOP><FONT FACE=ARIAL> <H3>Phases of the moon</H3> <FONT SIZE=2> <A HREF=/launcher.html>launcher</A> <A HREF=/index.html>home</A> <a href="#" onkeypress="bar" onclick="MyWindow=window.open('/formost.html?ref=moonwrite','MyWindow','toolbar=no,location=no,directories=no,status=no, menubar=no,scrollbars=yes,resizable=no,width=800,height=600'); return false;">guestbook</a> <A HREF=http://xjubier.free.fr/en/site_pages/astronomy/ephemerides.html>other ephemerides</A> <A HREF=http://aa.usno.navy.mil/cgi-bin/aa_moonphases.pl?year=2014&ZZZ=END>lunar calendar for the month</A> <A HREF=http://search.cpan.org/~brett/Astro-MoonPhase-0.60/>Astro-MoonPhase-0.60</A> <A HREF=http://www.bbc.co.uk/news/world-asia-20307900>Total eclipse at the new moon</A> <FONT SIZE=2> <TABLE><tr> <TD WIDTH=50%><IMG SRC = $source3 alt = "the current attributes of the moon" VALIGN = TOP HSPACE = 20 VSPACE = 10 height=220 width=400><BR CLEAR=ALL> <P><FONT FACE=ARIAL SIZE=6>T<FONT FACE=ARIAL SIZE=1> he phase of the moon the day before is shown in brackets. Since this web site is hosted in America, for you the day may be the day before and the day before the day before that. </TD> <TD><A HREF="http://aspire.cosmic-ray.org/labs/moon/lunar_phase3.swf"> <IMG SRC = $source1 alt = "Explanation and simulation of what you see" border=0 VALIGN = TOP HSPACE = 20 VSPACE = 10 height=380 width=400></A></TD> </tr></TABLE> <FONT FACE=ARIAL SIZE=6>T<FONT FACE=ARIAL SIZE=3> here are 3 scripts <A HREF=#$windows8$source1>$source1</A>, <A HREF=#$windows8$source2>$source2</A> and <A HREF=#$windows8$source3>$source3</A>. <PRE> (MOONHEAD) &disp($source1); &disp($source2); &disp($source3); print << "(MOONTAIL)"; </PRE><FONT SIZE=2 COLOR=BLACK> Page updated on August 5th. 2015. You are visitor number <IMG SRC=number9.cgi?style=I&width=7&update=Yes&countfile=jblack_moonwrite.txt width=140 height=27 alt="number of hits"> <A HREF=/launcher.html>launcher</A> <A HREF=/index.html>home</A> <a href="#" onkeypress="bar" onclick="MyWindow=window.open('/formost.html?ref=moonwrite','MyWindow','toolbar=no,location=no,directories=no,status=no, menubar=no,scrollbars=yes,resizable=no,width=800,height=600'); return false;">guestbook</a> <BR><BR> <A HREF=#TOP>top</A> <A HREF=http://xjubier.free.fr/en/site_pages/astronomy/ephemerides.html>other ephemerides</A> <A HREF=http://aa.usno.navy.mil/cgi-bin/aa_moonphases.pl?year=2014&ZZZ=END>lunar calendar for the month</A> <A HREF=http://search.cpan.org/~brett/Astro-MoonPhase-0.60/>Astro-MoonPhase-0.60</A> <A HREF=http://www.bbc.co.uk/news/world-asia-20307900>Total eclipse at the new moon</A> <BR><BR> </BODY></HTML> (MOONTAIL) sub disp{ $source = $windows8 . $_[0]; # print "/$source = $source<BR>/n"; exit; open(SOURCE, $source) or die ("5 Can't open $source: $!"); @lines = <SOURCE>; close(SOURCE) or die ("6 Can't close $source: $!"); print "<A NAME = $source><FONT COLOR = red>This is $source :- <A HREF=#TOP>top</A><FONT COLOR = black>\n"; foreach $storey (@lines){ chop($storey); $storey =~s/&/&/g; $storey =~s/</</g; $storey =~s/>/>/g; print "$storey\n"; } } This is moontextimage.cgi :- top #!/usr/bin/perlml use strict; #use CGI qw(:standard); use GD; my %Degtype = ( "PosNeg" => "-", "Degr" => 23, "Min" => 45, "Sec" => 23 ); my %HMSType = ( "PosNeg" => "+", "Hour" => 12, "Min" => 27, "Sec" => 2 ); my %MoonStatus = ( "Longitude" => {%Degtype}, "Latitude" => {%Degtype}, "Rascend" => {%HMSType}, "Declination" => {%Degtype}, "HParallax" => {%Degtype}, "AngularDim" => {%Degtype}, "EarthMoon" => 12345, "POTM" => 0.5 ); my @flag = (1 .. 7); my ($xm, $xm1, $xs, $xs1, $S, $xd, $hp, $sw1, $sw3); my ($dy, $mn, $yr, $lam, $dpsi, $bet, $p, $q, $x, $y, $f, $r, $thet, $djd); my ($cd, $lsn, $sd, $i, $k, $md, $ms, $an, $mn1, $yr1, $a, $b, $c, $d); my ($t, $eps, $epsr, $tpi, $deps, $eps1, $seps, $ceps, $cy, $ty, $sy); my ($cx, $sx, $tx, $sq, $t2, $ls, $ld, $tls, $tld, $nm, $tnm, $m, $ma); my ($ea, $SS, $dla, $tnu2, $nu, $a1, $b1, $d1, $e1, $c1, $h1, $dl, $dr, $rsn); my ($m1, $m2, $m3, $m4, $m5, $m6, $de, $sa, $sb, $sn, $n, $e, $l, $sc, $e2); my ($g, $w1, $w2, $xd1, $xp); my ($im, , $im2, $white, $black, $red, $blue, $yellow); my ($PHASE, $PHASE1, $PHASE2, $head, $dayte, $W ,$outfile ,$footnote); my ($buff1, $buff2, $para, $fromangle, $toangle, $waxwan, $fillpos, $grey); my $pi = 3.1415926535; #if (!defined ($para = param('gifgif'))) {$para = 'textgif';} print "Content-type: image/gif\n\n"; binmode STDOUT; &CalcMoon; # this does all the work &datadisplay; # this displays the text of the current moon attributes as an image (text doesn't work) syswrite(STDOUT, $buff2); sub CalcMoon { ($dy, $mn, $yr) = (localtime)[3,4,5]; $yr = $yr + 1900; $mn = $mn + 1; &moon; &nutat; $x = °($lam) + $dpsi; $sw1 = 1; &minsec; $MoonStatus{"Longitude"}{"PosNeg"} = $S; $MoonStatus{"Longitude"}{"Degr"} = $xd; $MoonStatus{"Longitude"}{"Min"} = $xm; $MoonStatus{"Longitude"}{"Sec"} = $xs; $x = °($bet); &minsec; $MoonStatus{"Latitude"}{"PosNeg"} = $S; $MoonStatus{"Latitude"}{"Degr"} = $xd; $MoonStatus{"Latitude"}{"Min"} = $xm; $MoonStatus{"Latitude"}{"Sec"} = $xs; $x = $lam; $y = $bet; $sw3 = -1; &eqecl; $x = °($p / 15); &minsec; $MoonStatus{'Rascend'}{'PosNeg'} = $S; $MoonStatus{'Rascend'}{'Hour'} = $xd; $MoonStatus{'Rascend'}{'Min'} = $xm; $MoonStatus{'Rascend'}{'Sec'} = $xs; $x = °($q); &minsec; $MoonStatus{'Declination'}{'PosNeg'} = $S; $MoonStatus{'Declination'}{'Degr'} = $xd; $MoonStatus{'Declination'}{'Min'} = $xm; $MoonStatus{'Declination'}{'Sec'} = $xs; $x = °($hp); &minsec; $MoonStatus{'HParallax'}{'Degr'} = $xd; $MoonStatus{'HParallax'}{'Min'} = $xm; $MoonStatus{'HParallax'}{'Sec'} = $xs; $r = 6378.14 / sin($hp); $MoonStatus{'EarthMoon'} = $r; $f = $r / 384401; $thet = .5181 / $f; $x = ($thet); &minsec; $MoonStatus{'AngularDim'}{'Degr'} = $xd; $MoonStatus{'AngularDim'}{'Min'} = $xm; $MoonStatus{'AngularDim'}{'Sec'} = $xs; &sun; $cd = cos($lam - $lsn) * cos($bet); $d = &acs($cd); $sd = sin($d); $i = (.1468 * $sd * (1 - .0549 * sin($md))) / (1 - .0167 * sin($ms)); $i = $pi - $d - &rad($i); $k = (1 + cos($i)) / 2; $MoonStatus{'POTM'} = &rou($k, 1000); $flag[1] = 0; $flag[5] = 0; $flag[6] = 0; $flag[7] = 0; } sub datadisplay { $im2 = new GD::Image(400,220); $grey = $im2->colorAllocate(204,204,204); # background color $white = $im2->colorAllocate(255,255,255); $black = $im2->colorAllocate(0,0,0); $red = $im2->colorAllocate(255,0,0); $blue = $im2->colorAllocate(0,0,255); $yellow = $im2->colorAllocate(255,255,0); $a = "THE STATUS OF THE MOON FOR DAY $dy"; $b = "IN MONTH $mn OF THE YEAR $yr IS:-"; $c = "ATTRIBUTE DEG MIN SEC "; $im2->GD::Image::string (gdLargeFont, 25, 10, $a, $black); $im2->GD::Image::string (gdLargeFont, 25, 25, $b, $black); $im2->GD::Image::string (gdLargeFont, 25, 45, $c, $black); $a = $MoonStatus{'Longitude'}{'PosNeg'}; $b = $MoonStatus{'Longitude'}{'Degr'}; $c = $MoonStatus{'Longitude'}{'Min'}; $d = $MoonStatus{'Longitude'}{'Sec'}; $e = sprintf("Longitude $a %3d %3d %2.2f", $b, $c, $d); $im2->GD::Image::string (gdLargeFont, 25, 65, $e, $black); $a = $MoonStatus{'Latitude'}{'PosNeg'}; $b = $MoonStatus{'Latitude'}{'Degr'}; $c = $MoonStatus{'Latitude'}{'Min'}; $d = $MoonStatus{'Latitude'}{'Sec'}; $e = sprintf("Latitude $a %3d %3d %2.2f", $b, $c, $d); $im2->GD::Image::string (gdLargeFont, 25, 85, $e, $black); $a = $MoonStatus{'Rascend'}{'PosNeg'}; $b = $MoonStatus{'Rascend'}{'Hour'}; $c = $MoonStatus{'Rascend'}{'Min'}; $d = $MoonStatus{'Rascend'}{'Sec'}; $e = sprintf("Right Ascension $a %3d %3d %2.2f", $b, $c, $d); $im2->GD::Image::string (gdLargeFont, 25, 105, $e, $black); $a = $MoonStatus{'Declination'}{'PosNeg'}; $b = $MoonStatus{'Declination'}{'Degr'}; $c = $MoonStatus{'Declination'}{'Min'}; $d = $MoonStatus{'Declination'}{'Sec'}; $e = sprintf("Declination $a %3d %3d %2.2f", $b, $c, $d); $im2->GD::Image::string (gdLargeFont, 25, 125, $e, $black); $a = $MoonStatus{'HParallax'}{'Degr'}; $b = $MoonStatus{'HParallax'}{'Min'}; $c = $MoonStatus{'HParallax'}{'Sec'}; $e = sprintf("Horizontal Parallax %3d %3d %2.2f", $a, $b, $c); $im2->GD::Image::string (gdLargeFont, 25, 145, $e, $black); $a = $MoonStatus{'AngularDim'}{'Degr'}; $b = $MoonStatus{'AngularDim'}{'Min'}; $c = $MoonStatus{'AngularDim'}{'Sec'}; $e = sprintf("Angular Dimension %3d %3d %2.2f", $a, $b, $c); $im2->GD::Image::string (gdLargeFont, 25, 165, $e, $black); $a = $MoonStatus{'EarthMoon'}; $e = sprintf("Earth Moon Status %10.2f", $a); $im2->GD::Image::string (gdLargeFont, 25, 185, $e, $black); $a = $MoonStatus{'POTM'}; $e =sprintf("Phase of the moon %1.3f", $a); $im2->GD::Image::string (gdLargeFont, 25, 205, $e, $black); $buff2 = $im2->gif; } sub acs { $W = $_[0]; return 1.570796327 - &asn($W); } sub anomaly { $tpi = 6.283185308; $m = $ma - $tpi * int($ma / $tpi); $ea = $m; $dla = $ea - ($SS * sin($ea)) - $m; while (abs($dla) >= .000001) { $dla = $dla / (1 - ($SS * cos($ea))); $ea = $ea - $dla; $dla = $ea - ($SS * sin($ea)) - $m; # set up for next time around } $tnu2 = sqrt((1 + $SS) / (1 - $SS)) * tan($ea / 2); $nu = 2 * atan2($tnu2, 1); } sub tan { $W = $_[0]; return sin($W)/cos($W); } sub asn { $W = $_[0]; return atan2($W / (sqrt(1.000001 - $W * $W) + 1E-20), 1); } sub deg { $W = $_[0]; return 57.29577951 * $W; } sub eqecl { if ($flag[7] != 1) { $tpi = 2 * $pi; $flag[7] = 1; if ($flag[6] == 0) {$deps = 0;} &obliq; $eps1 = &rad($eps + $deps); $seps = sin($eps1); $ceps = cos($eps1); } $cy = cos($y); $sy = sin($y); if (abs($cy) < 1E-20) {$cy = 1E-20;} $ty = $sy / $cy; $cx = cos($x); $sx = sin($x); $sq = ($sy * $ceps) - ($cy * $seps * $sx * $sw3); $q = &asn($sq); $a = ($sx * $ceps) + ($ty * $seps * $sw3); $p = atan2($a/$cx, 1); if ($cx < 0) {$p = $p + $pi;} if ($p > $tpi) {$p = $p - $tpi;} if ($p < 0) {$p = $p + $tpi;} } sub sgn { $W = $_[0]; if ($W<0) { return -1; } if ($W==0) { return 0; } if ($W>0) { return 1;} } sub itg { $W = $_[0]; return int($W) + 1 * &sgn($W) * int((&sgn($W) - 1) / 2); } sub julday { if ($flag[1] != 1) { $mn1 = $mn; $yr1 = $yr; $flag[1] = 1; $b = 0; if ($yr1 < 0) { $yr1 = $yr1 + 1;} if ($mn < 3) { $mn1 = $mn + 12; $yr1 = $yr1 - 1;} if (($yr >= 1582) || (($yr == 1582) && ($mn < 10)) || (($yr == 1582) && ($mn == 10) && ($dy < 15))) { $a = int($yr1 / 100); $b = 2 - $a + int($a / 4); } if ($yr1 >= 0) { $c = int(365.25 * $yr1) - 694025; } else { $c = &itg((365.25 * $yr1) - .75) - 694025; } $d = int(30.6001 * ($mn1 + 1)); $djd = $b + $c + $d + $dy - 0.5 ; }} sub minsec { if ($sw1 == -1) { $sn = 1; if (($xd < 0) || ($xm < 0) || ($xs < 0)) { $sn = -1;} $xd1 = abs($xd); $xm1 = abs($xm); $xs1 = abs($xs); $x = (((($xs1 / 60) + $xm1) / 60) + $xd1) * $sn; } else { $sn = &sgn($x); $xp = abs($x); $xd = int($xp); $a = ($xp - $xd) * 60; $xm = int($a); $xs = int((($a - $xm) * 600) + .5) / 10; if ($sn == -1) {$S = "-";} else {$S = "+";} } } sub moon { &julday; $t = $djd / 36525; $t2 = $t * $t; $m1 = 27.32158213; $m2 = 365.2596407; $m3 = 27.55455094; $m4 = 29.5305886800001; $m5 = 27.21222039; $m6 = 6798.36330700001; $m1 = $djd / $m1; $m2 = $djd / $m2; $m3 = $djd / $m3; $m4 = $djd / $m4; $m5 = $djd / $m5; $m6 = $djd / $m6; $m1 = 360 * ($m1 - int($m1)); $m2 = 360 * ($m2 - int($m2)); $m3 = 360 * ($m3 - int($m3)); $m4 = 360 * ($m4 - int($m4)); $m5 = 360 * ($m5 - int($m5)); $m6 = 360 * ($m6 - int($m6)); $ld = 270.434164 + $m1 - (.001133 - .0000019 * $t) * $t2; $ms = 358.475833 + $m2 - (.00015 + .0000033 * $t) * $t2; $md = 296.104608 + $m3 + (.009192 + .0000144 * $t) * $t2; $de = 350.737486 + $m4 - (.001436 - .0000019 * $t) * $t2; $f = 11.250889 + $m5 - (.003211 + .0000003 * $t) * $t2; $n = 259.183275 - $m6 + (.002078 + .000022 * $t) * $t2; $a = &rad(51.2 + 20.2 * $t); $sa = sin($a); $sn = sin(&rad($n)); $b = 346.56 + (132.87 - .0091731 * $t) * $t; $sb = .003964 * sin(&rad($b)); $c = &rad($n + 275.05 - 2.3 * $t); $sc = sin($c); $ld = $ld + .000233 * $sa + $sb + .001964 * $sn; $ms = $ms - .001778 * $sa; $md = $md + .000817 * $sa + $sb + .002541 * $sn; $f = $f + $sb - .024691 * $sn - .004328 * $sc; $de = $de + .002011 * $sa + $sb + .001964 * $sn; $e = 1 - (.002495 + 7.52E-06 * $t) * $t; $e2 = $e * $e; $ld = &rad($ld); $ms = &rad($ms); $n = &rad($n); $de = &rad($de); $f = &rad($f); $md = &rad($md); $l = 6.28875 * sin($md) + 1.27402 * sin(2 * $de - $md) + .658309 * sin(2 * $de); $l = $l + .213616 * sin(2 * $md) - $e * .185596 * sin($ms) - .114336 * sin(2 * $f); $l = $l + .058793 * sin(2 * ($de - $md)) + .057212 * $e * sin(2 * $de - $ms - $md); $l = $l + .05332 * sin(2 * $de + $md) + .045874 * $e * sin(2 * $de - $ms); $l = $l + .041024 * $e * sin($md - $ms); $l = $l - .034718 * sin($de) - $e * .030465 * sin($ms + $md); $l = $l + .015326 * sin(2 * ($de - $f)) - .012528 * sin(2 * $f + $md); $l = $l - .01098 * sin(2 * $f - $md) + .010674 * sin(4 * $de - $md); $l = $l + .010034 * sin(3 * $md) + .008548 * sin(4 * $de - 2 * $md); $l = $l - $e * .00791 * sin($ms - $md + 2 * $de) - $e * .006783 * sin(2 * $de + $ms); $l = $l + .005162 * sin($md - $de) + $e * .005 * sin($ms + $de); $l = $l + .003862 * sin(4 * $de) + $e * .004049 * sin($md - $ms + 2 * $de); $l = $l + .003996 * sin(2 * ($md + $de)) + .003665 * sin(2 * $de - 3 * $md); $l = $l + $e * .002695 * sin(2 * $md - $ms) + .002602 * sin($md - 2 * ($f + $de)); $l = $l + $e * .002396 * sin(2 * ($de - $md) - $ms) - .002349 * sin($md + $de); $l = $l + $e2 * .002249 * sin(2 * ($de - $ms)) - $e * .002125 * sin(2 * $md + $ms); $l = $l - $e2 * .002079 * sin(2 * $ms) + $e2 * .002059 * sin(2 * ($de - $ms) - $md); $l = $l - .001773 * sin($md + 2 * ($de - $f)) - .001595 * sin(2 * ($f + $de)); $l = $l + $e * .00122 * sin(4 * $de - $ms - $md) - .00111 * sin(2 * ($md + $f)); $l = $l + .000892 * sin($md - 3 * $de); $l = $l - $e * .000811 * sin($ms + $md + 2 * $de); $l = $l + $e * .000761 * sin(4 * $de - $ms - 2 * $md); $l = $l + $e2 * .000704 * sin($md - 2 * ($ms + $de)); $l = $l + $e * .000693 * sin($ms - 2 * ($md - $de)); $l = $l + $e * .000598 * sin(2 * ($de - $f) - $ms) + .00055 * sin($md + 4 * $de); $l = $l + .000538 * sin(4 * $md) + $e * .000521 * sin(4 * $de - $ms); $l = $l + .000486 * sin(2 * $md - $de); $l = $l + $e2 * .000717 * sin($md - 2 * $ms); $lam = $ld + &rad($l); $tpi = 6.28318530800002; while ($lam < 0) { $lam = $lam + $tpi; } while ($lam > $tpi) { $lam = $lam - $tpi; } $g = 5.12819 * sin($f) + .280606 * sin($md + $f) + .277693 * sin($md - $f); $g = $g + .173238 * sin(2 * $de - $f) + .055413 * sin(2 * $de + $f - $md); $g = $g + .046272 * sin(2 * $de - $f - $md) + .032573 * sin(2 * $de + $f); $g = $g + .017198 * sin(2 * $md + $f) + .009267 * sin(2 * $de + $md - $f); $g = $g + .008823 * sin(2 * $md - $f) + $e * .008247 * sin(2 * $de - $ms - $f); $g = $g + .004323 * sin(2 * ($de - $md) - $f) + .0042 * sin(2 * $de + $f + $md); $g = $g + $e * .003372 * sin($f - $ms - 2 * $de); $g = $g + $e * .002472 * sin(2 * $de + $f - $ms - $md); $g = $g + $e * .002222 * sin(2 * $de + $f - $ms); $g = $g + $e * .002072 * sin(2 * $de - $f - $ms - $md); $g = $g + $e * .001877 * sin($f - $ms + $md) + .001828 * sin(4 * $de - $f - $md); $g = $g - $e * .001803 * sin($f + $ms) - .00175 * sin(3 * $f); $g = $g + $e * .00157 * sin($md - $ms - $f) - .001487 * sin($f + $de); $g = $g - $e * .001481 * sin($f + $ms + $md) + $e * .001417 * sin($f - $ms - $md); $g = $g + $e * .00135 * sin($f - $ms) + .00133 * sin($f - $de); $g = $g + .001106 * sin($f + 3 * $md) + .00102 * sin(4 * $de - $f); $g = $g + .000833 * sin($f + 4 * $de - $md) + .000781 * sin($md - 3 * $f); $g = $g + .00067 * sin($f + 4 * $de - 2 * $md); $g = $g + .000606 * sin(2 * $de - 3 * $f) + .000597 * sin(2 * ($de + $md) - $f); $g = $g + $e * .000492 * sin(2 * $de + $md - $ms - $f); $g = $g + .00045 * sin(2 * ($md - $de) - $f) + .000439 * sin(3 * $md - $f); $g = $g + .000423 * sin($f + 2 * ($de + $md)) + .000422 * sin(2 * $de - $f - 3 * $md); $g = $g - $e * .000367 * sin($ms + $f + 2 * $de - $md); $g = $g - $e * .000353 * sin($ms + $f + 2 * $de) + .000331 * sin($f + 4 * $de); $g = $g + $e * .000317 * sin(2 * $de + $f - $ms + $md); $g = $g + $e2 * .000306 * sin(2 * ($de - $ms) - $f) - .000283 * sin($md + 3 * $f); $w1 = .0004664 * cos($n); $w2 = .0000754 * cos($c); $bet = &rad($g) * (1 - $w1 - $w2); $hp = .950724 + .051818 * cos($md) + .009531 * cos(2 * $de - $md); $hp = $hp + .007843 * cos(2 * $de) + .002824 * cos(2 * $md); $hp = $hp + .000857 * cos(2 * $de + $md) + $e * .000533 * cos(2 * $de - $ms); $hp = $hp + $e * .000401 * cos(2 * $de - $md - $ms) + $e * .00032 * cos($md - $ms); $hp = $hp - .000271 * cos($de) - $e * .000264 * cos($ms + $md); $hp = $hp - .000198 * cos(2 * $f - $md); $hp = $hp + .000173 * cos(3 * $md) + .000167 * cos(4 * $de - $md); $hp = $hp - $e * .000111 * cos($ms) + .000103 * cos(4 * $de - 2 * $md); $hp = $hp - .000084 * cos(2 * $md - 2 * $de) - $e * .000083 * cos(2 * $de + $ms); $hp = $hp + .000079 * cos(2 * $de + 2 * $md) + .000072 * cos(4 * $de); $hp = $hp + $e * .000064 * cos(2 * $de - $ms + $md); $hp = $hp - $e * .000063 * cos(2 * $de + $ms - $md) + $e * .000041 * cos($ms + $de); $hp = $hp + $e * .000035 * cos(2 * $md - $ms) - .000033 * cos(3 * $md - 2 * $de); $hp = $hp - .00003 * cos($md + $de) - .000029 * cos(2 * ($f - $de)); $hp = $hp - $e * .000029 * cos(2 * $md + $ms) + $e2 * .000026 * cos(2 * ($de - $ms)); $hp = $hp - .000023 * cos(2 * ($f - $de) + $md); $hp = $hp + $e * .000019 * cos(4 * $de - $ms - $md); $hp = &rad($hp); } sub nutat { if ($flag[6] != 1) { $flag[6] = 1; $flag[7] = 0; &julday; $t = $djd / 36525; $t2 = $t * $t; $a = 100.0021358 * $t; $b = 360 * ($a - int($a)); $ls = 279.697 + .000303 * $t2 + $b; $a = 1336.855231 * $t; $b = 360 * ($a - int($a)); $ld = 270.434 - .001133 * $t2 + $b; $a = 99.9973605600003 * $t; $b = 360 * ($a - int($a)); $ms = 358.476 - .00015 * $t2 + $b; $a = 13255523.59 * $t; $b = 360 * ($a - int($a)); $md = 296.105 + .009192 * $t2 + $b; $a = 5.372616667 * $t; $b = 360 * ($a - int($a)); $nm = 259.183 + .002078 * $t2 - $b; $tls = 2 * &rad($ls); $nm = &rad($nm); $tnm = 2 * &rad($nm); $ms = &rad($ms); $tld = 2 * &rad($ld); $md = &rad($md); $dpsi = (-17.2327 - .01737 * $t) * sin($nm); $dpsi = $dpsi + (-1.2729 - .00013 * $t) * sin($tls) + .2088 * sin($tnm); $dpsi = $dpsi - .2037 * sin($tld) + (.1261 - .00031 * $t) * sin($ms); $dpsi = $dpsi + .0675 * sin($md) - (.0497 - .00012 * $t) * sin($tls + $ms); $dpsi = $dpsi - .0342 * sin($tld - $nm) - .0261 * sin($tld + $md); $dpsi = $dpsi + .0214 * sin($tls - $ms) - .0149 * sin($tls - $tld + $md); $dpsi = $dpsi + .0124 * sin($tls - $nm) + .0114 * sin($tld - $md); $deps = (9.21 + .00091 * $t) * cos($nm) + (.5522 - .00029 * $t) * cos($tls); $deps = $deps - .0904 * cos($tnm) + .0884 * cos($tld) + .0216 * cos($tls + $ms); $deps = $deps + .0183 * cos($tld - $nm) + .0113 * cos($tld + $md); $deps = $deps - .0093 * cos($tls - $ms) - .0066 * cos($tls - $nm); $dpsi = $dpsi / 3600; $deps = $deps / 3600; }} sub obliq { if ($flag[5] != 1) { $flag[5] = 1; &julday; $t = $djd / 36525; $c = (((-.00181 * $t) + .0059) * $t + 46.845) * $t; $eps = 23.45229444 - ($c / 3600); $epsr = $eps * .01745329252; }} sub rad { $W = $_[0]; return .01745329252 * $W; } sub rou { $x = $_[0]; $y = $_[1]; return int($x * $y + .5) / $y; } sub sun { &julday; $t = $djd / 36525; $t2 = $t * $t; $a = 100.0021359 * $t; $b = 360 * ($a - int($a)); $ls = 279.69668 + (.0003025 * $t2) + $b; $a = 99.9973604200004 * $t; $b = 360 * ($a - int($a)); $ms = 358.47583 - ((.00015 + (.0000033 * $t)) * $t2) + $b; $SS = .016751 - (.0000418 * $t) - (1.26E-07 * $t2); $ma = &rad($ms); &anomaly; $a = 62.5520947200002 * $t; $b = 360 * ($a - int($a)); $a1 = &rad(153.23 + $b); $a = 125.1041894 * $t; $b = 360 * ($a - int($a)); $b1 = &rad(216.57 + $b); $a = 91.56766028 * $t; $b = 360 * ($a = int($a)); $c1 = &rad(312.69 + $b); $a = 1236.853095 * $t; $b = 360 * ($a - int($a)); $d1 = &rad(350.74 - .00144 * $t2 + $b); $e1 = &rad(231.19 + 20.2 * $t); $a = 183.1353208 * $t; $b = 360 * ($a - int($a)); $h1 = &rad(353.4 + $b); $dl = .00134 * cos($a1) + .00154 * cos($b1) + .002 * cos($c1); $dl = $dl + .00179 * sin($d1) + .00178 * sin($e1); $dr = 5.43E-06 * sin($a1) + 1.575E-05 * sin($b1) + 1.627E-05 * sin($c1); $dr = $dr + 3.076E-05 * cos($d1) + 9.27E-06 * sin($h1); $lsn = $nu + &rad($ls - $ms + $dl); $tpi = 6.28318530800002; $rsn = 1.0000002 * (1 - $SS * cos($ea)) + $dr; while ($lsn < 0) { $lsn = $lsn + $tpi;} while ($lsn > $tpi) { $lsn = $lsn - $tpi;} }Page updated on August 5th. 2015. You are visitor number launcher home guestbook