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); } } }