Cirkel met lijnen
Auteur: VonDutch - 19 januari 2005 - 14:18 - Gekeurd door: Dennisvb - Hits: 5421 - Aantal punten: 3.55 (10 stemmen)
Dit script tekent een cirkel en gaat dan lijnen trekken tussen alle punten op de omtrek van de cirkel. Je ziet het wel ;)
|
Code: |
<?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 $nutijd = $nutijd[1] + $nutijd[0]; $starttijd = $nutijd; //stel hier in welke extra informatie je onderaan wil zien $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 = $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 } ?>
Download code (.txt)
|
|
|
Stemmen |
Niet ingelogd. |
|