<?php
// $Id$
include "../jpgraph.php";
include "../jpgraph_canvas.php";


if( empty($_GET['r']) ) 
    $r = 0.44;
else
    $r = $_GET['r'];

if( empty($_GET['w']) ) 
    $w=150;
else
    $w = $_GET['w'];

if( empty($_GET['h']) ) 
    $h=240;
else
    $h = $_GET['h'];

if( $w < 60 ) $w=60;
if( $h < 60 ) $h=60;


function SeaShell($img,$x,$y,$w,$h,$r,$n=12,$color1='navy',$color2='red') {

    $x += $w;
    $w = (1-$r)/$r*$w;

    $sa = 0;
    $ea = 90;

    $s1 = 1;
    $s2 = -1;
    $x_old=$x; $y_old=$y;
    for($i=1; $i < $n; ++$i) {
	$sa += 90;
	$ea += 90;
	if( $i % 2 == 1 ) {
	    $y = $y + $s1*$h*$r;
	    $h = (1-$r)*$h;
	    $w = $w / (1-$r) * $r ;
	    $s1 *= -1;
	    $img->SetColor($color1);
	    $img->Line($x,$y,$x+$s1*$w,$y);
	}
	else {
	    $x = $x + $s2*$w*$r;
	    $w = (1-$r)*$w;
	    $h = $h / (1-$r) * $r;
	    $s2 *= -1;
	    $img->SetColor($color1);
	    $img->Line($x,$y,$x,$y-$s2*$h);
	}
	$img->SetColor($color2);
	$img->FilledRectangle($x-1,$y-1,$x+1,$y+1);
	$img->Arc($x,$y,2*$w+1,2*$h+1,$sa,$ea);
	$img->Arc($x,$y,2*$w,2*$h,$sa,$ea);
	$img->Arc($x,$y,2*$w-1,2*$h-1,$sa,$ea);
	$img->Line($x_old,$y_old,$x,$y);
	$x_old=$x; $y_old=$y;
    }
}

$g = new CanvasGraph($w,$h);
//$gr = 1.61803398874989484820;

$p = SeaShell($g->img,0,20,$w-1,$h-21,$r,19);
$g->img->SetColor('black');
$g->img->Rectangle(0,20,$w-1,$h-1);
$g->img->SetFont(FF_FONT2,FS_BOLD);
$g->img->SetTextAlign('center','top');
$g->img->StrokeText($w/2,0,"Canvas Spiral");

$g->Stroke();
?>

