<?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
}
?>
<?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