Kirjautuminen

Haku

Tehtävät

Koodit: PHP: Tähden kärkien koordinaatit

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.

Tähtifunktio, star.php

<?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;
}
?>

Esimerkki

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.

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta