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.