Guest User

Untitled

a guest
Mar 27th, 2015
20
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. // Zufallswert setzen
  3. mt_srand();
  4.  
  5. // Quadrant setzen. In diesem Fall zufällig.
  6. $quadrant = array(50,50);
  7.  
  8. // Auf basis von Quadrant basierende Anzahl an sternen erzeugen. ($quadrant = array(50,50) hätte somit immer die selbe sternenanzahl)
  9. $stars = "auto";
  10.  
  11. // Größe der Grafik
  12. $w = 200;
  13. $h = 140;
  14.  
  15. // Hier ist die Option, welche ich versuchen möchte, umzusetzen.
  16. $radial_crop = false;
  17.  
  18. // Zufälliger Seed-Wert auf basis von Quadrantenwert
  19. $seed = "auto";
  20.  
  21. // Zwischenspeicher-Wert für bessere Variierungen zwischen Sternenpositionen und Luminanzen.
  22. // Der Wert hier hat keinen großen Einfluss auf Optik und Anordnung der Sterne sondern dient
  23. // lediglich der rekursiven Variierung des Seeds.
  24. $last_salt = 550;
  25.  
  26. // Ziemlich komplexe und unübersichtliche Seed-Variierungs-Funktion.
  27. function calcSeed($x,$y,$salt) {
  28.     global $seed;
  29.     $newseed = ($x + cos($y) + pow((($seed * $x + $y + sin($x) + (cos($y) / $salt) + $salt) * $x) * $y,1.6) / (($salt * $x * $y) + 1));
  30.     return($newseed);
  31. }
  32.  
  33. // Erstellt ein Array mit X und Y Position sowie Lumineszenz auf Basis des vorhandenen Seeds.
  34. function generateStar($field_width,$field_height) {
  35.     global $quadrant;
  36.     global $last_salt;
  37.     global $seed;
  38.     // Seed-Vergabe
  39.     mt_srand(calcSeed($quadrant[0],$quadrant[1],$last_salt));
  40.     $last_salt = mt_rand(10000000,99999999);
  41.     $calced_seed = calcSeed($quadrant[0],$quadrant[1],$last_salt);
  42.     mt_srand($calced_seed);
  43.  
  44.     // Positionserrechnung
  45.     $x = mt_rand(0,$field_width);
  46.     $y = mt_rand(0,$field_height);
  47.  
  48.     // Zufälligkeits Wert neu vergeben.
  49.     mt_srand(calcSeed($x + $quadrant[0],$y + $quadrant[1],$last_salt + $calced_seed));
  50.  
  51.     // Lumineszens-Vorauswertung
  52.     $prelum_calc = mt_rand(0,100);
  53.  
  54.     // Lumineszens-Berechnung
  55.     if($prelum_calc < 20) {
  56.         $luminance = mt_rand(90,100) / 100;
  57.     }elseif($prelum_calc < 40) {
  58.         $luminance = mt_rand(50,90) / 100;
  59.     }elseif($prelum_calc < 75) {
  60.         $luminance = mt_rand(20,50) / 100;
  61.     }else{
  62.         $luminance = mt_rand(5,20) / 100;
  63.     }
  64.     $result = array($x,$y,$luminance);
  65.     return($result);
  66. }
  67.  
  68. // Falls $seed = "auto" ist, wird ein zufälliger Seed auf Basis des Quadranten erzeugt.
  69. if($seed == "auto") {
  70.     mt_srand($quadrant[0] + $quadrant[1] * sqrt($quadrant[0]) + 5999);
  71.     $seed = abs(mt_rand(-99999999,99999999));
  72. }
  73.  
  74. // Bild erzeugen
  75. $img = imagecreatetruecolor($w,$h);
  76. // Schwarzer Hintergrund
  77. $bg = imagecolorallocate($img,0,0,0);
  78. // Weiß, falls man es braucht.
  79. $weiss = imagecolorallocate($img,255,255,255);
  80. // Schwarzer Hintergrund. Nochmal zeichnen, da Truecolor-Bild.
  81. imagefilledrectangle($img,0,0,$w,$h,$bg);
  82.  
  83. // Farbzwischenspeicher
  84. $farben = array();
  85. // Erzeugt eine Farbe oder gibt entsprechende Farbe zurück, wenn bereits erzeugt.
  86. function getLumCol($img,$luminance) {
  87.     $lum_col = floor(255 * $luminance);
  88.     if(!isset($farben[$luminance])) {
  89.         $farben[$luminance] = imagecolorallocate($img,$lum_col,$lum_col,$lum_col);
  90.     }
  91.     return($farben[$luminance]);
  92. }
  93. // Erzeugt eine Farbe oder gibt entsprechende Farbe zurück. Hierbei wird weiß nur mit der Luminanz abgedunkelt.
  94. function getLumColA($img,$luminance) {
  95.     $lum_col = floor(255 * $luminance);
  96.     if(!isset($farben["A" . $luminance])) {
  97.         $farben["A" . $luminance] = imagecolorallocatealpha($img,255,255,255,127 - (127 * $luminance));
  98.     }
  99.     return($farben["A" . $luminance]);
  100. }
  101. // Wenn $stars = "auto", dann wird die Sternenanzahl zufällig auf Basis des Quadranten erzeugt.
  102. if($stars == "auto") {
  103.     mt_srand(calcSeed($quadrant[0],$quadrant[1],$seed));
  104.     $stars = (mt_rand(1,10) * floor(($w * $h) / 200)) / 10;
  105. }
  106. // Schleife für die Anzahl der Sterne.
  107. for($i = 0;$i < $stars;$i++) {
  108.     // Hier wird ein Stern erzeugt.
  109.     $stern = generateStar($w,$h);
  110.     // Hier wird dessen Farbe erzeugt auf basis der Luminanz des Sterns.
  111.     $farbe = getLumCol($img,$stern[2]);
  112.  
  113.  
  114.     /*
  115.         Genau hier würde ich gerne prüfen, ob der Stern ($stern[0] und $stern[1]) außerhalb der
  116.         Ellipse ist. Diese habe ich im letzten Schritt mitzeichnen lassen.
  117.     */
  118.  
  119.  
  120.     // Hier wird der Sternenschein gezeichnet. Insofern er über 98% Helligkeit aufweist, erhält er ein 80% schwächeren Schein drum herum
  121.     if($stern[2] > 0.98) {
  122.         $farbe2 = getLumColA($img,$stern[2] / 5);
  123.         imagefilledrectangle($img,$stern[0],$stern[1]-2,$stern[0],$stern[1]+2,$farbe2);
  124.         imagefilledrectangle($img,$stern[0]-2,$stern[1],$stern[0]+2,$stern[1],$farbe2);
  125.     }
  126.     // Hier wird der Stern selbst gezeichnet.
  127.     imagefilledrectangle($img,$stern[0],$stern[1],$stern[0],$stern[1],$farbe);
  128. }
  129.  
  130. // Zu Testzwecke eine Ellipse
  131. $ell = imagecolorallocatealpha($img,255,0,0,90);
  132. imageellipse($img,$w / 2,$h / 2,$w - 1,$h - 1,$ell);
  133.  
  134. // Ausgabe als Grafik
  135. header("Content-Type: image/png");
  136. imagepng($img);
  137. imagedestroy($img);
  138. ?>
RAW Paste Data