login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > GD library > Cirkel met lijnen

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:
  1. <?php
  2. //als er informatie gepost is wordt de cirkel getekend
  3. if (IsSet($_POST['points']) and IsSet($_POST['size']))
  4. {
  5. //om script execution time te berekenen nu een timestamp berekenen
  6. $nutijd = microtime();
  7. $nutijd = explode(" ",$nutijd);
  8. $nutijd = $nutijd[1] + $nutijd[0];
  9. $starttijd = $nutijd;
  10.  
  11. //stel hier in welke extra informatie je onderaan wil zien
  12. $display = array();
  13. $display['parsetime'] = true;
  14. $display['points'] = true;
  15. $display['lines'] = true;
  16. $display['timeperline'] = true;
  17.  
  18.  
  19. //laat de browser weten dat er een png image aankomt
  20. header ('Content-type: image/png');
  21.  
  22. //$_POST['size'] wordt nog vaak gebruikt, dus ff overbodig typwerk voorkomen
  23. $size = $_POST['size'];
  24. //maak het plaatje. De + 70 is voor de extra informatie onderaan
  25. $im = imagecreate($size + 70,$size + 70);
  26. //plaatje en tekst kleur definiëren
  27. $background_color = ImageColorAllocate ($im, 255, 255, 255);
  28. $imagecolor = imagecolorallocate($im, 0, 0, 255);
  29. $textcolor = imagecolorallocate($im, 255, 0, 0);
  30. //$_POST['points'] wordt ook nog vaak gebruikt... zie boven ;)
  31. $points = $_POST['points'];
  32. //in hoeveel graden moet de cirkel verdeeld worden?
  33. $degs = 360 / $points;
  34. //$lines op 0 zetten
  35. $lines = 0;
  36.  
  37. //php gebruikt radialen, maar in dit geval is het makkelijker om met graden te rekenen
  38. //dus ik zet hiermee een omrekentabel in het geheugen met 361 / 0.001 waarden. 361 omdat
  39. //360 een fout gaf ;p
  40. for($p = 0; $p <= 361; $p += 0.001)
  41. {
  42. $sine[$p] = sin($p * (pi() / 180));
  43. $cosine[$p] = cos($p * (pi() / 180));
  44. }
  45. //cirkel tekenen
  46. imagearc($im, $size / 2, $size / 2, $size, $size, 0, 360, $imagecolor);
  47.  
  48. //reken alle x- en y-posities uit voor elke punt. php heeft het coördinaat (0,0) linksbovenin
  49. //staan, dus dat moet een beetje opgeschoven worden.
  50. for($i = 1; $i <= $points; $i++)
  51. {
  52. $degs2 = $degs * $i;
  53. $posx[$i] = $cosine[$degs2] * ($size / 2);
  54. $posy[$i] = $sine[$degs2] * ($size / 2);
  55. }
  56.  
  57. //eerst maakt hij $currentxpos of $currentypos gelijk aan de huidige x/y posities,
  58. //dan worden er lijnen getekend vanaf dat punt naar alle andere punten. $lines wordt
  59. //1 groter om later te kunnen achterhalen hoeveel lijnen er getekend zijn
  60. //(eigenlijk is het gewoon $points^2)
  61. for ($j = 1; $j <= $points; $j++)
  62. {
  63. $currentxpos = ($size / 2) + $posx[$j];
  64. $currentypos = ($size / 2) + $posy[$j];
  65. for ($k = 1; $k <= $points; $k++)
  66. {
  67. imageline($im, $currentxpos, $currentypos, ($size / 2) + $posx[$k], ($size / 2) + $posy[$k], $imagecolor);
  68. $lines++;
  69. }
  70. }
  71. //bereken uiteindelijke script execution time
  72. $nutijd = microtime();
  73. $nutijd = explode(" ",$nutijd);
  74. $nutijd = $nutijd[1] + $nutijd[0];
  75. $eindtijd = $nutijd;
  76. $totaaltijd = ($eindtijd - $starttijd);
  77.  
  78. //schrijf de extra informatie onderaan het plaatje
  79. if ($display['parsetime'] == true)
  80. {
  81. imagestring($im, 4, 0, $size + 1, "Parsetime: " . $totaaltijd . " seconds.", $textcolor);
  82. }
  83. if ($display['points'] == true)
  84. {
  85. imagestring($im, 4, 0, $size + 15, "Points: " . $_POST['points'] , $textcolor);
  86. }
  87. if ($display['lines'] == true)
  88. {
  89. imagestring($im, 4, 0, $size + 30, "Lines: " . $lines , $textcolor);
  90. }
  91. if ($display['timeperline'] == true)
  92. {
  93. imagestring($im, 4, 0, $size + 45, "Average time per line: " . $totaaltijd / $lines . " seconds.", $textcolor);
  94. }
  95.  
  96. //zet het plaatje om naar png
  97. imagepng($im);
  98. //en vernietig de gd, browsers kunnen dat formaat meestal toch niet lezen
  99. imagedestroy($im);
  100. }
  101. //en als er nog geen data is gepost wordt het formulier weergeven ;)
  102. else
  103. {
  104. ?>
  105. <html>
  106. <head><title>Circle Draw</title></head>
  107. <body>
  108. <form action="cossincircle.php" method="POST">
  109. <table border="0">
  110. <tr>
  111. <td>Points:</td>
  112. <td><input type="text" name="points"></td>
  113. </tr>
  114. <tr>
  115. <td>Image size (pixels):</td>
  116. <td><input type="text" name="size"></td>
  117. </tr>
  118. <tr>
  119. <td><input type="reset" value="Reset!"></td>
  120. <td><input type="submit" value="Draw Image!"></td>
  121. </tr>
  122. </table>
  123. </form>
  124. </body>
  125. </html>
  126. <?php
  127. }
  128. ?>
Download code! Download code (.txt)

 Bekijk een voorbeeld van dit script!
 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (10)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.029s