Fondamenti di programmazione

Corso php a cura del prof. Pietro De Paolis

Grafico della funzione y= -x

Sappiamo che un funzione matematica si può rappresentare su di un sistema di assi cartesiani. Se sull'asse orizzontale delle ascisse rappresentiamo la variabile indipendente x e sull'asse verticale delle ordiante rappresentiamo il valore che assume la funzione in x, cioè y= f(x) otteniamo per ogni valore di x la coppia (x; y) che costituisce un punto del grafico della funzione. Cioè il grafico è l'insieme dei punti la cui ascissa è x e la cui ordinata è y=f(x).

Il php ha delle funzioni grafiche che abbiamo già visto, per cui lo possiamo utilizzare per il disegno del grafico della funzione su di un sistema di assi cartesiani.

Supponiamo di voler disegnare il grafico della funzione:

y = - x

cioè il seguente:

Grafico di y = - x

Occorre dare i comandi giusti per disegnare l'immagine sullo schermo del computer.

Intanto ricordiamo che per disegnare in php occorre prima disegnare l'immagine nella memoria del server e poi mostrare l'immagine creata all'utente.

Il disegno è abbastanza delicato ed è una cosa da esperti; per cui non occorre scoraggiarsi ai primi insuccessi, ma tentare più volte fino a correggere gli errori più comuni.

Comunque noi seguiremo in ordine i seguenti passi.

1 - Il listato in php va scritto con un editor di testo, ma senza mischiare altri linguaggi o tag html; cioè il listato deve essere in puro php, iniziare con

<?php

e finire con

?>

Non usare istruzioni diverse da quelle del disegno, tipo la print; cioè la prima cosa che deve apparire sull'immagine finale deve essere la istruzione

header ("Content-type: image/png");

Questa è una istruzione delicata in quanto lo scambio di informazioni tra computer locale e server che invia l'immagine deve avvenire prima di qualunque altra istruzione; inoltre tutto quello che segue la istruzione header deve essere una istruzione di visualizzazione del disegno, altrimenti non viene visualizzata sullo schermo del pc. Per cui solo istruzioni che lavorano in memoria, che lavorano sui file, e istruzioni di disegno. Risultati non si possono vedere se non a parte, ma solo successivamente con un altro programma, magari anche salvando il disegno su un file di immagine (.pnp .jpg .gif) e poi mostrandolo insieme alle altre cose da far vedere all'utente.

2 - Creiamo una immagine a colori, cioè un foglio vuoto che ci serve da sfondo su cui disegnare:

$immagine = imagecreatetruecolor (550,300);

Salvo nella variabile $immagine questo foglio vuoto che ha la dimensione in orizzontale, pari a 550 punti (pixel dello schermo) e 300 punti in verticale. Per lo schermo l'origine degli assi, cioè 0 (0;0) è il punto più in alto a sinistra e non un punto in basso; per cui mentre l'asse x parte con lo 0 dal primo punto a sinistra e non al centro, l'asse y parte con lo 0 da sopra verso il basso.

3- Mi creo alcuni colori con cui disegnare successivamente; mi serve un colore nero con cui disegno gli assi cartesiani:

$nero = imagecolorallocate ($immagine, 0, 0, 0);

Cioè memorizzo nella varibile $nero un colore da usare per $immagine e questo colore sarà la somma dei tre colori fondamentali, cioè:

rosso =0;

giallo=0;

blu=0;

I numeri dei colori vanno da o a 255; dove 0 vuol dire che quel colore non c'è; 255 vuol dire che quel colore è al massimo di intensità.

Poi con:

$arancio = imagecolorallocate ($immagine, 250, 200,150);

Mi creo un colore arancio che memorizzo nella varibile $arancio da usare per $immagine e questo colore sarà la somma dei tre colori fondamentali, cioè:

rosso =250;

giallo=200;

blu=150;

Poi con: 

$blu = imagecolorallocate ($immagine, 0, 0,200);

Mi creo un colore blu che memorizzo nella varibile $blu da usare per $immagine e questo colore sarà la somma dei tre colori fondamentali, cioè:

rosso =0;

giallo=0;

blu=200;

Poi con: 

$rosso = imagecolorallocate ($immagine, 255, 0,0);

Mi creo un colore rosso che memorizzo nella varibile $rosso da usare per $immagine e questo colore sarà la somma dei tre colori fondamentali, cioè:

rosso =255;

giallo=0;

blu=0;

Una volta che dispongo di un foglio su cui disegnare e dei 4 colori che ho cselto di utilizzare inizio a disegnare sul foglio, ma sempre in memoria, in quanto i risultati non li vedrò se non alla fine del disegno.

4 - Ora mi disegno uno sfondo colorato invece del colore nero, in quanto lo ritengo più gradito.

imagefilledrectangle ($immagine, 0,0, 550, 300, $arancio);

Cioè mi disegno un rettangolo colorato del colore $arancio a partire dal punto superiore dello schermo, di coordinate (0;0) fino al punto inferiore destro di coordinate (550; 300).

A questo punto se volessi vedere il lavoro svolto in memoria dovrei inserire una istruzione:

header ("Content-type: image/png");

seguita da:

imagepng ($immagine);

La istruzione 

header ("Content-type: image/png");

indica il tipo di immagine; nel nostro caso abbiamo scelto il formato png; mentre:

imagepng ($immagine);

mostra all'utente l'immagine che ho memorizzato in formato png nella variabile $immagine.

Vedrò:

Rettangolo colorato

Il listato completo, infatti, è ora:

<?php

$immagine = imagecreatetruecolor (550,300);

$nero = imagecolorallocate ($immagine, 0, 0, 0);

$arancio = imagecolorallocate ($immagine, 250, 200,150);

$blu = imagecolorallocate ($immagine, 0, 0,200);

$rosso = imagecolorallocate ($immagine, 255, 0,0);

imagefilledrectangle ($immagine, 0,0, 550, 300, $arancio);

// mostro il grafico sulla pagina

header ("Content-type: image/png");

imagepng ($immagine);

// cancello il grafico in memoria

imagedestroy ($immagine);

?>

Rettangolo colorato funzione21.php

Notiamo la istruzione:

imagedestroy ($immagine);

che cancella l'immagine dalla memoria per evitare che la memoria del server si riempia. Essa va messa sempre alla fine di tutti i disegni.

5 - Ora mi disegno un sistema di assi cartesiani ortogonali; con la istruzione

imageline ($immagine, 10, 150, 500, 150, $nero);

tiro una linea che parte dal punto (10;150) e arriva al punto (500;150); cioè una linea orrizzontale di colore $nero al centro dello schermo.

Con la istruzione:

imageline ($immagine, 250, 10, 250, 300, $nero);

tiro una linea verticale, di colore $nero, che parte dal punto (250;10) e arriva al punto (250;300). 

Con le istruzioni:

imageline ($immagine, 500, 150, 490, 145, $nero);

imageline ($immagine, 500, 150, 490, 155, $nero);

imageline ($immagine, 250, 10, 245, 20, $nero);

imageline ($immagine, 250, 10, 255, 20, $nero);

tiro quattro piccoli segmenti obliqui, a forma di freccia,  sugli estremi degli assi onde indicare il verso positivo dei due assi x e y.

Con le istruzioni:

imagestring ($immagine, 5, 490, 125, "x", $blu);

imagestring ($immagine, 5, 270, 10, "y", $blu);

scrivo x sull'asse delle x ed y sull'asse delle y con un carettere avente dimensione 5 e colore $blu, nei punti (490;125) e (270;10).

Con la istruzione:

imagestring ($immagine, 5, 300, 50, "Grafico di y = -x", $blu);

scrivo:

Grafico di y=-x

nel punto (300;50) col colore $blu e con dimensione del carattere uguale a 5.

A questo punto vedrò:

Sistema di assi cartesiani

Il listato completo, infatti, è ora:

<?php

$immagine = imagecreatetruecolor (550,300);

$nero = imagecolorallocate ($immagine, 0, 0, 0);

$arancio = imagecolorallocate ($immagine, 250, 200,150);

$blu = imagecolorallocate ($immagine, 0, 0,200);

$rosso = imagecolorallocate ($immagine, 255, 0,0);

imagefilledrectangle ($immagine, 0,0, 550, 300, $arancio);

// tiro asse orizzontale

imageline ($immagine, 10, 150, 500, 150, $nero);

// tiro asse verticale

imageline ($immagine, 250, 10, 250, 300, $nero);

// disegno frecce sui due assi

imageline ($immagine, 500, 150, 490, 145, $nero);

imageline ($immagine, 500, 150, 490, 155, $nero);

imageline ($immagine, 250, 10, 245, 20, $nero);

imageline ($immagine, 250, 10, 255, 20, $nero);

// scrivo x y

imagestring ($immagine, 5, 490, 125, "x", $blu);

imagestring ($immagine, 5, 270, 10, "y", $blu);

imagestring ($immagine, 5, 300, 50, "Grafico di y = - x", $blu);

//imagepng ($immagine,"x3.png");

imagepng ($immagine);

imagedestroy ($immagine);

?>

Sistema di assi funzione1a.php

 

6- Completo il lavoro disegnando il grafico della funzione

y=-x

sul sistema di assi cartesiani. Uso una istruzione for:

for ($t=-140; $t<140; $t+=2) {

imagestring ($immagine, 3, 250+$t, 142+$t, ".", $rosso);

};

Per disegnare il grafico uso la istruzione imagestring che scrive del testo in un punto prestabilito; il testo da scrivere è un punto, cioè ".", di colore $rosso e di dimensione 3.

Le coordinate del punto in cui verrà disegnato "." variano al variare di un contatore $t; $t parte dal valore -140; viene incrementato di 2 per ogni ciclo e il ciclo viene ripetuto finchè $t non raggiunge il valore di 140.

Poiché il sistema di assi dello schermo rispetto al sistema di assi da noi disegnato è traslato, cioè lo zero origine degli assi non è coincidente, occorre che la posizione del punto in cui verrà disegnato sia traslata in senso orizzontale di 250 e in senso verticale di 150. Si è scelto 142 invece di 150 per correggere il fatto che il " . " si trova verso il basso e non al centro.

A questo prunto vedremo:

Grafico di y = -x

 

Il listato completo è:

<?php

$immagine = imagecreatetruecolor (550,300);

$nero = imagecolorallocate ($immagine, 0, 0, 0);

$arancio = imagecolorallocate ($immagine, 250, 200,150);

$blu = imagecolorallocate ($immagine, 0, 0,200);

$rosso = imagecolorallocate ($immagine, 255, 0,0);

imagefilledrectangle ($immagine, 0,0, 600, 300, $arancio);

// tiro asse orizzontale

imageline ($immagine, 10, 150, 500, 150, $nero);

// tiro asse verticale

imageline ($immagine, 250, 10, 250, 300, $nero);

// disegno frecce sui due assi

imageline ($immagine, 500, 150, 490, 145, $nero);

imageline ($immagine, 500, 150, 490, 155, $nero);

imageline ($immagine, 250, 10, 245, 20, $nero);

imageline ($immagine, 250, 10, 255, 20, $nero);

// scrivo x y

imagestring ($immagine, 5, 490, 125, "x", $blu);

imagestring ($immagine, 5, 270, 10, "y", $blu);

imagestring ($immagine, 5, 300, 50, "y = - x", $blu);

// disegno il grafico

for ($t=-140; $t<140; $t+=2) {

imagestring ($immagine, 3, 250+$t, 142+$t, ".", $rosso);

};

header ("Content-type: image/png");

//imagepng ($immagine,"x=-y.png");

imagepng ($immagine);

imagedestroy ($immagine);

?>

Listato completo di Grafico di y = -x

Notiamo che volendo salvare l'immagine in un file, onde poterla riutilizzare si può usare:

imagepng ($immagine,"x=-y.png");

che salva l'immagine che si trova in memoria cioè $immagine in un file di nome: x=-y.png in formato png.

Occorre, per curiosità, fare distinzione tra:

funzione1.php che è un listato che disegna ogni volta l'immagine e  x=-y.png che mostra una immagine salvata in formato png.

febbraio 2006

Corso di programmazione in PHP

Dizionario php

 

prof. Pietro De Paolis

Indice Scuola Elettrica - generico


Scuola Elettrica



 

Altre applicazioni


Mappa per tipo di scuola

 

Indice di tutte le pagine del sito


Guida per navigare


Richiesta informazioni


Scuola Elettrica