Nello script, la funzione CirconferenzePoligoni() viene chiamata due volte disegnando, con
imagefilledarc() la maschera usando i valori delle variabili:
$Immagine, $BaseLargezza, $BaseAltezza,$Vertici, $InizioVertici,$Cx, $Cy, $Colore.
(circonferenze ed ellissi da impiegare nel disegno di figure con effetto 3d).
Ritornando i valori negli array $PuntiXYa e $PuntiXYb
Quindi alle righe:
for($z=0; $z<$VerticiQuantita*2 ;$z+=2)
{
imageline ($Immagine , $PuntiXYa[$z] , $PuntiXYa[$z+1] , $PuntiXYb[$z] , $PuntiXYb[$z+1] , $Verde);}
viene disegnato l'effetto 3D
Variabili che vengono passati alla funzione Disegna() $Immagine, l'immagine creata con
imagecreate()$BaseALargezza, $BaseAAltezza, dimensioni dalla base A della figura 3d$BaseACX,$BaseACY, centro base A della figura circolare che, eventualmente, fa da maschera$BaseBLargezza, $BaseBAltezza, dimensioni dalla base B dellea figura 3d$BaseBCX,$BaseBCY, centro base B della figura circolare che, eventualmente, fa da maschera$VerticiQuantita, se poligono numero vertici, se circonferenza o ellissi punti per effetto 3d$VerticeStart, se poligono, sulla circonferenza/ellissi, posizione primo vertice disegnato
<?php $BaseALargezza = isset($_POST['BaseALargezza']) ? $_POST['BaseALargezza'] : 200; $BaseAAltezza = isset($_POST['BaseAAltezza']) ? $_POST['BaseAAltezza'] : 80;$BaseACX = isset($_POST['BaseACX']) ? $_POST['BaseACX'] : 200; $BaseACY = isset($_POST['BaseACY']) ? $_POST['BaseACY'] : 120; $BaseBLarghezza = isset($_POST['BaseBLarghezza']) ? $_POST['BaseBLarghezza'] : 200; $BaseBAltezza = isset($_POST['BaseBAltezza']) ? $_POST['BaseBAltezza'] : 80;$BaseBCX = isset($_POST['BaseBCX']) ? $_POST['BaseBCX'] : 200; $BaseBCY = isset($_POST['BaseBCY']) ? $_POST['BaseBCY'] : 250; $VerticiQuantita = isset($_POST['VerticiQuantita']) ? $_POST['VerticiQuantita'] : 6; $VerticeStart = isset($_POST['VerticeStart']) ? $_POST['VerticeStart'] : 0;
function CirconferenzePoligoni($Immagine, $BaseLargezza, $BaseAltezza, $Vertici, $InizioVertici, $Cx, $Cy, $Colore){$Valori = array (); // definisce vertici se figura piana e punti per effetto 3dfor($L = 0; $L < $Vertici; $L ++) {$Valori[$L] = 360/ $Vertici;}; // dimensione lati/punti effetto 3d$PuntiXY = array(); // Inizializza l'array per piano cartesiano
foreach($Valori as $index => $V ) { // scorre array $Valori$Corda = $Valori[$index]; // lato poligoni
// *** per vertici poligono inscritto calcola X,Y sul piano cartesiano *** $VerticeCorrente = ($InizioVertici + $Corda) + 90; // sincronizza con GD che inizia ad ore 3$sin = sin(deg2rad($VerticeCorrente)); $cos = cos(deg2rad($VerticeCorrente)); // valori in radianti$RadX = round($cos*(0) - $sin*($BaseLargezza * .5 * -1)); // Vertice corrente, X su cartesiano$RadY = round($sin*(0) + $cos*($BaseAltezza * .5 * -1)); // Vertice corrente, Y su cartesiano
// Spinge il valore nella matrice punti/vertici, origini per effetto 3d array_push($PuntiXY, $Cx + $RadX); array_push($PuntiXY, $Cy + $RadY); $style = 3; // IMG_ARC_NOFILL+IMG_ARC_CHORD = 11, corde if($Vertici > 12){$style = 2;} // IMG_ARC_NOFILL = 2, archi
imagefilledarc($Immagine, $Cx, $Cy, // coordinate x,y del centro $BaseLargezza, $BaseAltezza, $InizioVertici, // inizio arco o corda $InizioVertici + $Corda, // fine arco o corda $Colore, // colore passato alla funzione $style );
$InizioVertici += $Corda; // nuovo vertice}return $PuntiXY; // ritornano valori xy vertici Poligoni o punti su Circonferenze per effetto 3d}$Immagine =
imagecreate(400, 400); // crea l'immagine
imagecolorallocate($Immagine, 204, 204, 204); // sfondo $Verde =
imagecolorallocate($Immagine, 0, 204, 51); $Nero =
imagecolorallocate($Immagine, 0, 0, 0);
// inizio chiamate alla funzione crea circonferenze/poligoni$PuntiXYa = CirconferenzePoligoni($Immagine, $BaseALargezza, $BaseAAltezza, $VerticiQuantita, $VerticeStart, $BaseACX, $BaseACY, $Nero );
$PuntiXYb = CirconferenzePoligoni($Immagine, $BaseBLarghezza, $BaseBAltezza, $VerticiQuantita, $VerticeStart, $BaseBCX, $BaseBCY, $Nero );
for($z=0; $z<$VerticiQuantita*2 ;$z+=2)// effetto 3d{
imageline ($Immagine , $PuntiXYa[$z] , $PuntiXYa[$z+1] , $PuntiXYb[$z] , $PuntiXYb[$z+1] , $Verde);}
// CirconferenzePoligoni altezza
imageline ($Immagine , $BaseACX, $BaseACY , $BaseBCX, $BaseBCY , $Nero);
imagepng($Immagine,"NomeFile.png"); // salva immagineimagedestroy($Immagine); // libera memoria?>
Risultato: