
<?php
//als er informatie gepost is wordt de cirkel getekend
if (IsSet($_POST['points']) and IsSet($_POST['size']))
{
//om script execution time te berekenen nu een timestamp berekenen 
$nutijd = microtime();
$nutijd = explode(" ",$nutijd);
$nutijd = $nutijd[1] + $nutijd[0];
$starttijd = $nutijd;

//stel hier in welke extra informatie je onderaan wil zien
$display = array();
$display['parsetime'] = true;
$display['points'] = true;
$display['lines'] = true;
$display['timeperline'] = true;


//laat de browser weten dat er een png image aankomt
header ('Content-type: image/png');

//$_POST['size'] wordt nog vaak gebruikt, dus ff overbodig typwerk voorkomen
$size = $_POST['size'];
//maak het plaatje. De + 70 is voor de extra informatie onderaan
$im = imagecreate($size + 70,$size + 70);
//plaatje en tekst kleur definiëren
$background_color = ImageColorAllocate ($im, 255, 255, 255);
$imagecolor = imagecolorallocate($im, 0, 0, 255);
$textcolor = imagecolorallocate($im, 255, 0, 0);
//$_POST['points'] wordt ook nog vaak gebruikt... zie boven ;)
$points = $_POST['points'];
//in hoeveel graden moet de cirkel verdeeld worden?
$degs = 360 / $points;
//$lines op 0 zetten
$lines = 0;

//php gebruikt radialen, maar in dit geval is het makkelijker om met graden te rekenen 
//dus ik zet hiermee een omrekentabel in het geheugen met 361 / 0.001 waarden. 361 omdat 
//360 een fout gaf ;p
for($p = 0; $p <= 361; $p += 0.001)
	{
	$sine[$p] = sin($p * (pi() / 180));
	$cosine[$p] = cos($p * (pi() / 180));
	}
//cirkel tekenen
imagearc($im, $size / 2, $size / 2, $size, $size, 0, 360, $imagecolor);

//reken alle x- en y-posities uit voor elke punt. php heeft het coördinaat (0,0) linksbovenin
//staan, dus dat moet een beetje opgeschoven worden.
for($i = 1; $i <= $points; $i++)
	{
	$degs2 = $degs * $i;
	$posx[$i] = $cosine[$degs2] * ($size / 2);
	$posy[$i] = $sine[$degs2] * ($size / 2);
	}

//eerst maakt hij $currentxpos of $currentypos gelijk aan de huidige x/y posities,
//dan worden er lijnen getekend vanaf dat punt naar alle andere punten. $lines wordt
//1 groter om later te kunnen achterhalen hoeveel lijnen er getekend zijn
//(eigenlijk is het gewoon $points^2)
for ($j = 1; $j <= $points; $j++)
	{
	$currentxpos = ($size / 2) + $posx[$j];
	$currentypos = ($size / 2) + $posy[$j];
	for ($k = 1; $k <= $points; $k++)
		{
		imageline($im, $currentxpos, $currentypos, ($size / 2) + $posx[$k], ($size / 2) + $posy[$k], $imagecolor);
		$lines++;
		}
	}
//bereken uiteindelijke script execution time
$nutijd = microtime();
$nutijd = explode(" ",$nutijd);
$nutijd = $nutijd[1] + $nutijd[0];
$eindtijd = $nutijd;
$totaaltijd = ($eindtijd - $starttijd);

//schrijf de extra informatie onderaan het plaatje
if ($display['parsetime'] == true)
{
imagestring($im, 4, 0, $size + 1, "Parsetime: " . $totaaltijd . " seconds.", $textcolor);
}
if ($display['points'] == true)
{
imagestring($im, 4, 0, $size + 15, "Points: " . $_POST['points'] , $textcolor);
}
if ($display['lines'] == true)
{
imagestring($im, 4, 0, $size + 30, "Lines: " . $lines , $textcolor);
}
if ($display['timeperline'] == true)
{
imagestring($im, 4, 0, $size + 45, "Average time per line: " . $totaaltijd / $lines . " seconds.", $textcolor);
}

//zet het plaatje om naar png
imagepng($im);
//en vernietig de gd, browsers kunnen dat formaat meestal toch niet lezen
imagedestroy($im);
}
//en als er nog geen data is gepost wordt het formulier weergeven ;)
else
	{
	?>
	<html>
	<head><title>Circle Draw</title></head>
	<body>
	<form action="cossincircle.php" method="POST">
		<table border="0">
			<tr>
				<td>Points:</td>
				<td><input type="text" name="points"></td>
			</tr>
			<tr>
				<td>Image size (pixels):</td>
				<td><input type="text" name="size"></td>
			</tr>
			<tr>
				<td><input type="reset" value="Reset!"></td>
				<td><input type="submit" value="Draw Image!"></td>
			</tr>
	</table>
	</form>
	</body>
	</html>
	<?php
	}
	?>

