Example #1
0
 protected function ellipseRadialGradient(awGradient $gradient, $x1, $y1, $x2, $y2)
 {
     if ($y1 - $y2 > 0) {
         if ($y1 - $y2 != $x2 - $x1) {
             awImage::drawError("Class GDGradientDriver: Radial gradients are only implemented on circle, not ellipses.");
         }
         $c = new awPoint($x1 + ($x2 - $x1) / 2, $y1 + ($y2 - $y1) / 2);
         $r = ($x2 - $x1) / 2;
         $ok = array();
         // Init gradient
         $this->init($gradient, $r);
         for ($i = 0; $i <= $r; $i += 0.45) {
             $p = ceil(2 * M_PI * $i);
             if ($p > 0) {
                 $interval = 360 / $p;
             } else {
                 $interval = 360;
             }
             $color = $this->color($i);
             for ($j = 0; $j < 360; $j += $interval) {
                 $rad = $j / 360 * (2 * M_PI);
                 $x = round($i * cos($rad));
                 $y = round($i * sin($rad));
                 $l = sqrt($x * $x + $y * $y);
                 if ($l <= $r) {
                     if (array_key_exists((int) $x, $ok) === FALSE or array_key_exists((int) $y, $ok[$x]) === FALSE) {
                         // Print the point
                         $this->driver->point($color, new awPoint($c->x + $x, $c->y + $y));
                         $ok[(int) $x][(int) $y] = TRUE;
                     }
                 }
             }
             unset($color);
         }
     }
 }