Kirjoittaja: Pentu
Kirjoitettu: 20.10.2013 – 20.10.2013
Tagit: grafiikka, matematiikka, koodi näytille, vinkki
Tämän funktion ideana on laskea tarvittavat pisteet tähden piirtämiseen. Itse funktio palauttaa koordinaatit taulukkona.
<?php ##### # # Tähti funktio # # Tekijä: Pentu # Päiväys: 20.10.2013 # Ver: 1.1 # # Tämä funktio laskee taulukkoon tähden kulmien koordinaatit. # Taulukkoa pystyy käyttämään hyväksi esim. GD -kirjaston kanssa. # ##### function points_of_star($r1, $r2, $vertices = 5, $x_c = 0, $y_c = 0, $rotate = 0){ // $r1 = Ulkohalkaisija // $r2 = Sisähalkaisija // $vertices = Kärkien määrä // $x_c = Kuvion keskipisteen koordinaatti vaaka -suunnassa (x) // $y_c = Kuvion keskipisteen koordinaatti pysty -suunnassa (y) // $rotate = Kuvion kääntökulma (rad) // Lasketaan koordinaatit for($i = 0; $i < $vertices; $i++){ // Lasketaan ja lisätään koordinaatit ulkohalkaisijalla $angle = $rotate + 2 * PI() / $vertices * $i; $img_lines[] = $x_c + $r1 * cos($angle); $img_lines[] = $y_c + $r1 * sin($angle); // Lasketaan ja lisätään koordinaatit ulkohalkaisijalla $angle = $rotate + 2 * PI() / $vertices * ($i + 0.5); $img_lines[] = $x_c + $r2 * cos($angle); $img_lines[] = $y_c + $r2 * sin($angle); } return $img_lines; } ?>
Funktion avulla voi laskea pisteiden koordinaatit vaikka GD-kirjaston polygon-funktiolle.
Tässä pieni esimerkki:
<?php require_once('star.php'); $image_size_x = 250; $image_size_y = 250; $image_center_x = $image_size_x / 2; $image_center_y = $image_size_y / 2; // 1. tähden pisteet $img_star = points_of_star(120, 60, 5, $image_center_x, $image_center_y, deg2rad(54)); $counter = count($img_star) / 2; // 2. tähden pisteet $img_star2 = points_of_star(70, 30, 6, 80, 180, 6); $counter2 = count($img_star2) / 2; // 3. tähden pisteet $img_star3 = points_of_star(90, 30, 9, 180, 30, 0); $counter3 = count($img_star3) / 2; // Luodaan kuva $image = imagecreatetruecolor(250, 250); // Värit $bg = imagecolorallocate($image, 255, 255, 255); $line = imagecolorallocate($image, 0, 0, 0); $red = imagecolorallocate($image, 255, 0, 0); $yellow = imagecolorallocate($image, 255, 255, 0); $green = imagecolorallocate($image, 0, 255, 0); $cyan = imagecolorallocate($image, 0, 255, 255); $blue = imagecolorallocate($image, 0, 0, 255); $mgenta = imagecolorallocate($image, 255, 0, 255); // Taustan täyttö imagefilledrectangle($image, 0, 0, 249, 249, $bg); // Monikulmioiden piirtäminen // 1.tähti imagefilledpolygon($image, $img_star, $counter, $green); imagepolygon($image, $img_star, $counter, $line); // 2.tähti imagefilledpolygon($image, $img_star2, $counter2, $yellow); imagepolygon($image, $img_star2, $counter2, $line); // 3.tähti imagefilledpolygon($image, $img_star3, $counter3, $blue); imagepolygon($image, $img_star3, $counter3, $line); // Tulostetaan kuva header('Content-type: image/png'); imagepng($image); imagedestroy($image); ?>
EDIT
-Muutamia pieniä parannuksia muokattu koodiin.