3/2001 **************************************************** */ header("Content-type: image/jpeg"); // CONSTANTS // $AMT_STARS = 40; // how many stars do you want //HEIGHT AND WIDTH OF BACKGROUND $APP_WIDTH = 560; // width of the applet $APP_HEIGHT = 350; // height of the applet srand((double)microtime()*1000000); // init random $im = imagecreate ($APP_WIDTH, $APP_HEIGHT); $black = ImageColorAllocate ($im, 0, 0, 0); ImageRectangle($im, 0, 0, $APP_WIDTH, $APP_HEIGHT, $black); // set the background to black (starfield) // produce AMT_STARS stars at random locations, //sizes and shapes for ($x=0; $x<$AMT_STARS; $x++) { $x_offset = rand(0,$APP_WIDTH); $y_offset = rand(0,$APP_HEIGHT); //CHANGE SIZE OF STARS BY CHANGING WIDTH/22 $radius = rand(1,$APP_WIDTH/30); $points = rand(4,8); $myStar = new Star($radius,$points); // init star object $myStar->generateStar($x_offset,$y_offset,$im); // generate star } ImageJpeg($im,'',100); //***********************************************************************// // Star - used to generate a star, given the radius and amount of points // //***********************************************************************// class Star { var $radius; // radius of the star var $amtPoints; // amount of points var $amtSides; // amount of sides (points * 2) // Constructor - sets radius, amtPoints,amtSides variables function Star($r, $n) { $this->radius = $r; $this->amtPoints = $n; $this->amtSides = $this->amtPoints * 2; } // Generates a star given the location of the star and the // graphics object to paint on function generateStar($x_offset, $y_offset, &$img) { $pointA=0; // used to count the point number from 0 to // amtPoints-1 - for outside points $pointB=0; // used to count the point number from 0 to // amtPoints-1 - for inside points for ($i=0; $i<$this->amtSides; $i++) { if ($i % 2 == 0) { // even = outside points $x_coords[$i] = $this->getX($this->amtPoints, $pointA, $this->radius, $x_offset, 0.0); $y_coords[$i] = $this->getY($this->amtPoints, $pointA, $this->radius, $y_offset, 0.0); $pointA++; } else { // odd = inside points $x_coords[$i] = $this->getX($this->amtPoints, $pointB, $this->radius/2, ($this->radius/2) + $x_offset, 0.5); $y_coords[$i] = $this->getY($this->amtPoints, $pointB, $this->radius/2, ($this->radius/2) + $y_offset, 0.5); $pointB++; } } // merge the x_coords and y_coords array into one $point = 0; for ($i=0; $i<$this->amtSides*2; $i+=2) { $coords[$i] = $x_coords[$point]; $coords[$i+1] = $y_coords[$point]; $point++; } $white = ImageColorAllocate ($img, 255, 255, 255); // set stars color to white imageFilledPolygon($img, $coords, $this->amtSides, $white); // paint the star } // Two methods that get the x and y coordinates of // a circle given the following information: // totalPoints - the total amount of points to // generate on a circumference // pointNum - the number of the point you want to // get (0 to totalPoints-1) // radius - the radius of the circle // offset - the amount of pixels the point should be offset // rotate - the amount to rotate the circle //(needed to draw inner circle and make star) // getX - generates x coordinates using cos() function getX($totalPoints, $pointNum, $radius, $offset, $rotate) { $PI = 3.14; return (int) (cos( 2 * $PI * ($pointNum + $rotate) / $totalPoints) * $radius ) + $radius + $offset; } // getY - generates y coordinates using sin() function getY($totalPoints, $pointNum, $radius, $offset, $rotate) { $PI = 3.14; return (int) (sin( 2 * $PI * ($pointNum + $rotate) / $totalPoints) * $radius ) + $radius + $offset; } } ?>