moonstuff.pl to HTML.

index -|- end

Generated: Tue Feb 2 17:54:46 2010 from moonstuff.pl 2007/02/12 10.6 KB.

#!/perl -w
# *NAME* temp5.pl
use strict;
use warnings;
use Math::Trig;
require 'logfile.pl' or die "Unable to load logfile.pl ...\n";
# log file stuff
my ($LF);
my $showref = 0; # output the color reference list, and exit
my $outfile = 'temp.'.$0.'.txt';
my $htmfile = 'temp.'.$0.'.htm';
# debug items
my $dbg1 = 0;   # show each is_in_used call
my $dbg2 = 0;   # show paragraph added to table
my $dbg3 = 0;   # list, as text, the standard generated colors
my $lunarPeriod  = 29*(24*3600*1000) + 12*(3600*1000) + 44.05*(60*1000);
my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
my @weekDays = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings);
# A number of time/date functions refer to 'seconds since the epoch.' 
# On UNIX, the 'epoch' would be midnight Jan. 1, 1970. On the Mac, it is 
# midnight, Jan. 1, 1904. The entry in "Perl in a Nutshell" for time states:
# Returns the number of non-leap seconds since January 1, 1970, UTC.
#// Get Date (GMT) for recent full moon NOTE: months, hours, and minutes are 0 based
#   var blueMoonDate = new Date(96, 1, 3, 16, 15, 0);
my $blueMoonDate = ((1996-1970)*365*24*3600) + (34*24*3600) + (16*3600) + (15*60);
($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime();
my $year = 1900 + $yearOffset;
my $theTime = "$hour:$minute:$second, $weekDays[$dayOfWeek] $months[$month] $dayOfMonth, $year";
($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = gmtime();
my $gmyear = 1900 + $yearOffset;
my $theGMTime = "$hour:$minute:$second, $weekDays[$dayOfWeek] $months[$month] $dayOfMonth, $gmyear";
my $blueEpoc = 820746900;
($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = gmtime($blueEpoc);
my $bmyear = 1900 + $yearOffset;
my $theBMTime = "$hour:$minute:$second, $weekDays[$dayOfWeek] $months[$month] $dayOfMonth, $gmyear";
open_log($outfile);
prt( "$0 ... Hello, World ... $theTime (GMT $theGMTime) (BM $theBMTime) $blueMoonDate $blueEpoc\n" );
my ($HF, $msg, $clr);
open $HF, ">$htmfile" or mydie( "ERROR: Unable to open $htmfile ...\n" );
my $t45 = tan(deg2rad(45));
my $at = rad2deg(atan(1));
prt( "tan(45) = $t45 ... atan(1) = $at \n");
# HTML OUTPUT
# ===========
html_begin($HF);
print $HF "<p>$0 ... Hello, World ... $theTime (GMT $theGMTime) (BM $theBMTime) $blueMoonDate $blueEpoc</p>\n";
gen_circle($HF);
###out_color_wheel( $HF );
out_moon_circle( $HF, 50, 40, 50 );
html_end($HF);
# END HTML OUTPUT
close $HF;
system($htmfile);
close_log($outfile,1);
exit(0);
sub html_begin {
   my ($f) = shift;
   print $f <<"EOF";
<html>
<head>
<title>$htmfile</title>
<style type="text/css">
<!-- /* Style Definitions */
body {
margin:1cm 1cm 1cm 1cm;
}
p {
margin:0cm;
padding:0cm
}
-->
</style>
</head>
<body>
<h1>$htmfile</h1>
EOF
}
sub html_end {
   my ($f) = shift;
   print $f <<"EOF";
</body>
</html>
EOF
}
sub floor { ($_[0]<0) ? -int -$_[0]+1 : int $_[0] } 
sub ceil { ($_[0]<0) ?  -int -$_[0] : int $_[0]+1 } 
sub round { ($_[0]>0) ?  int $_[0]+0.5 : int $_[0]-0.5 } 
# 0,0 cx=26,cx=26 angle=45 rx=18.3847763108502, ry=18.3847763108502 ... quad=1
# ...
# 25,0 cx=1,cx=1 angle=2.20259816176581 rx=0.999261174631314, ry=25.9807905404142 ... quad=1
# 26,0 cx=0,cx=0 angle=0 rx=0, ry=26 ... quad=2
# 27,0 cx=-1,cx=-1 angle=-2.20259816176581 rx=-0.999261174631314, ry=25.9807905404142 ... quad=2
# ...
# 51,25 cx=-25,cx=-25 angle=-87.7093899573615 rx=-25.9792249267665, ry=1.03916899707066 ... quad=2
# 0,26 cx=26,cx=26 angle=89.9977963161737 rx=25.9999999807692, ry=0.00099999999926155 ... quad=4
# ...
# 25,26 cx=1,cx=1 angle=89.9427042395855 rx=25.9999870000097, ry=0.0259999870000083 ... quad=4
# 26,26 cx=0,cx=0 angle=0 rx=0, ry=26 ... quad=3
# 27,26 cx=-1,cx=-1 angle=-89.9427042395855 rx=-25.9999870000097, ry=0.0259999870000083 ... quad=3
# ...
# 51,51 cx=-25,cx=-25 angle=45 rx=18.3847763108502, ry=18.3847763108502 ... quad=3
sub out_of_circle {
   my ($x, $y, $rx, $ry, $rad) = @_;
   my $rval = 0;
   my $xmin = abs($rx);
   my $xmax = $rad + ($rad - abs($rx));
   my $ymin = $rad - abs($ry);
   my $ymax = $rad + abs($ry);
   if (($x < $xmin)||($x > $xmax)||($y < $ymin)||($y > $ymax)) {
      $rval = 1;
   }
   if ($x == 0) {
      prt("\n");
   }
   prt( sprintf("$x,$y %2.2f,%2.2f ", $rx, $ry) );
   prt( sprintf("(%2.2f %2.2f %2.2f %2.2f) ", $xmin, $xmax, $ymin, $ymax) );
   prt( "x < min " ) if ($x < $xmin);
   prt( "x > max " ) if ($x > $xmax);
   prt( "y < min " ) if ($y < $ymin);
   prt( "y > max " ) if ($y > $ymax);
   prt( ($rval ? "Out" : "IN") );
   prt( "\n" );
   return $rval;
}
sub get_bg_color {
   my ($x, $y, $grid, $part) = @_;
   my $max = $grid * $part;
   my $rad = $max / 2;
   my $fact = 256 / ($max - 1);
   my ($r, $g, $b);
   my ($xf, $yf);
   my $cx = $rad - $x;
   my $cy = $rad - $y;
   #my $dx = $cx - $x;
   #my $dy = $y - $cy;
   #my $q = 'quad ';
   my $qn = 0;
   if ($x < $rad) {
      if ($y < $rad) {
         $qn = 1;
      } else {
         $qn = 4;
      }
   } else {
      if ($y < $rad) {
         $qn = 2;
      } else {
         $qn = 3;
      }
   }
   if ($cy == 0) {
      $cy = 0.001;
   }
   my $rang = atan( $cx / $cy );
   my $rx = $rad * sin($rang);
   my $ry = $rad * cos($rang);
   my $out = out_of_circle( $x, $y, $rx, $ry, $rad );
   if ($x == 0) {
      prt("\n");
   }
   prt( "$x,$y cx=$cx,cx=$cx angle=".sprintf("%2.2f",rad2deg($rang))." out=$out\n" );
   $r = $g = $b = 0;
   $xf = int($x * $fact);
   $xf = 255 if ($xf >= 256);
   $yf = int($y * $fact);
   $yf = 255 if ($yf >= 256);
   $b = 255 - $xf;
   $g = $xf;
   my $c = '#FFFFFF';
   if ( ! $out ) {
      $c = uc(sprintf("#%2.2x%2.2x%2.2x", $r, $g, $b ));
   }
   return $c;
}
# color wheel
# see : javascipt/colorwheel.htm, using colorwheel.jpg
#          Turquoise
#     Blue          Green
#          \       /
#            Black 
#      Mauve   |   Yellow
#             Red
#
sub out_color_wheel {
   my ($f) = shift;
   my $grid = 13;
   my $part = 4;
   my $max = $grid * $part;
   my $msg = '';
   my $hdr = "Color Wheel - $max x $max grid";
   prt( "Out put of $hdr ...\n" );
   print $f "<hr>\n";
   print $f "<h1>$hdr</h1>\n";
   print $f "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" summary=\"$hdr\" width=\"100%\">\n";
   my $cols = 0;
   my $i = 0;
   my $j = 0;
   my ($r, $g, $b);
   my ($hr, $hg, $hb);
   my ($sty);
   for ($i = 0; $i < $max; $i++) {
      print $f "<tr>\n";
      for ($j = 0; $j < $max; $j++) {
         $msg = "<td bgcolor=\"".get_bg_color($j, $i, $grid, $part)."\">";
         if ($j == 0) {
            $msg .= "$i";
         } else {
            $msg .= ".";
         }
         $msg .= "</td>\n";
         print $f $msg;
      }
      print $f "</tr>\n";
   }
   print $f "</table>\n";
}
sub simple_circle {
   my ($i, $x, $y);
   my $rad = 70;
   my $max = pi * 6;
   my $step = 0.03;
   my $cnt = 0;
   my $mrad = sprintf("%2.4f", $max);
   prt( "Gen circle, radius $rad, for 0 to $mrad (6 * pi), step $step ...\n" );
   for ($i = 0; $i < $max; $i += $step)
   {
      $cnt++;
      $x = cos($i) * $rad;
      $y = sin($i) * $rad;
      prt( sprintf("%3d %2.3f x,y = %3.2f,%3.2f ...\n", $cnt, $i, $x, $y ));
   }
}
sub in_circ {
   # x and y reference commence upper left
   my ($x, $y, $rad) = @_;
   my ($cx, $cy, $nx, $ny, $xok, $yok, $io, $err);
   if ($x < $rad) {
      $cx = $rad - $x;
   } else {
      $cx = $x - $rad;
   }
   if ($y < $rad) {
      $cy = $rad - $y;
   } else {
      $cy = $y - $rad;
   }
   # have a $cx, and $cy, find angle(radians)
   $cy = 0.001 if ($cy == 0);
   my $ang = atan( $cx / $cy );
   my $ex = cos($ang) * $rad;
   my $ey = sin($ang) * $rad;
   $err = '';
   if ($x < $rad) {
      $nx = round($ex);
      if( $x < $nx ) {
         $xok = 0;
         $err .= 'x < nx ';
      } else {
         $xok = 1;
      }
   } else {
      $nx = round($rad + $ex);
      if ($x > $nx) {
         $xok = 0;
         $err .= 'x > nx ';
      } else {
         $xok = 1;
      }
   }
   if ($y < $rad) {
      $ny = round($ey);
      if ($y < $ny) {
         $yok = 0;
         $err .= 'y < ny ';
      } else {
         $yok = 1;
      }
   } else {
      $ny = round($ey + $rad);
      if ($y > $ny) {
         $yok = 0;
         $err .= 'y > ny ';
      } else {
         $yok = 1;
      }
   }
   if ($xok && $yok) {
      $io = 'IN';
   } else {
      $io = 'OT';
   }
   ##prt( "$x,$y ".sprintf("%2.2f,%2.2f %2.2f,%2.2f", $ex, $ey, $nx, $ny )." ($cx,$cy) ... $io ... $err \n" );
   prt( "$x,$y ".sprintf("%2.2f,%2.2f %2d,%2d", $ex, $ey, $nx, $ny )." ($cx,$cy) ... $io ... $err \n" );
   return $io;
}
sub gen_circle {
   my ($f) = shift;
   my ($i, $x, $y);
   my $rad = 5;
   my $diam = $rad * 2;
   my $cnt = 0;
   my $out = 0;
   my $fill = '';
   my $hdr = "Generate grid - $rad x $rad";
   prt( "$hdr ...\n" );
   print $f "<hr>\n";
   print $f "<h1>$hdr</h1>\n";
   print $f "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" summary=\"$hdr\">\n";
   for( $y = 0; $y < $diam; $y++ ) {
      printf $f "<tr>\n";
      for ($x = 0; $x < $diam; $x++) {
         $out = in_circ( $x, $y, $rad );
         printf $f "<td>$out</td>\n";
      }
      printf $f "</tr>\n";
   }
   print $f "</table>\n";
}
sub out_moon_circle {
   my ($f, $siz, $moonPhaseTime, $lunarPeriod) = @_;
   my ($i, $ss, $msg);
   # Compute various percentages of lunar cycle
   $ss = $siz * $siz;
   my $percentRaw = ($moonPhaseTime / $lunarPeriod);
   my $percent    = round( 100 * $percentRaw ) / 100;
   my $percentBy2 = round( 200 * $percentRaw );
     if ($percentBy2 > 100) {
         $percentBy2 -= 100;
    }
   my $phasePc = $percent * 100;
   my $fullPc = $percentBy2;
   my $left  = ($percentRaw >= 0.5) ? "black.gif" : "white.gif";
   my $right = ($percentRaw >= 0.5) ? "white.gif" : "black.gif";
   prt( "Rawpct = $percentRaw, pctx2 = $percentBy2 ... left=$left right=$right ...\n" );
   print $f "<p>Rawpct = $percentRaw, pctx2 = $percentBy2 ... left=$left right=$right ...</p>\n";
   printf $f "<center>\n";
   printf $f "<table border=\"1\"><tr>\n";
   printf $f "<td align=\"center\" bgcolor=\"#aaaaff\">\n";
   for ( $i = -($siz - 1); $i < $siz; $i++ ) {
      my $val = $ss - ( $i * $i );
      my $wid = 2 * sqrt( $val );
      $msg = '';
      if ($percentBy2 != 100) {
         $msg .= "<img src=\"" . $left . "\" height=\"1\" width=\"";
         $msg .= int( $wid * ( (100 - $percentBy2 ) / 100 ));
         $msg .= "\">";
      }
      if ($percentBy2 != 0) {
         $msg .= "<img src=\"". $right . "\" height=\"1\" width=\"";
         $msg .= int( $wid * ( $percentBy2 / 100 ) );
         $msg .= "\">";
      }
      printf $f $msg;
      prt( "$i $msg \n" );
      printf $f "<br>\n";
   }
   printf $f "</td></tr></table>\n";
   printf $f "</center>\n";
}
#-----------------------------
sub hypotenuse {
    my ($side1, $side2) = @_;
    return sqrt( ($side1 ** 2) + ($side2 ** 2) );
}
# eof - colors2.pl

index -|- top

checked by tidy  Valid HTML 4.01 Transitional