|  |  | DGS attraverso esempi |

### DGS attraverso esempi

Il comando per creare un DGS è disponibile all'interno della sezione riguardante i numeri del menu azionabile cliccando con il tasto destro del mouse in un punto dello sfondo o nella barra delle icone. Un DGS può ricevere da 0 a n parametri di ingresso.

Conviene a questo punto passare direttamente all'analisi di qualche esempio di DGS che permetta di comprendere facilmente le potenzialità di questo strumento. Macro e DGS conferiscono a DR. GEO un aspetto speciale1 nel panorama dei programmi di studio interattivo della geometria euclidea. Oltre a questo è importante comprendere come, attraverso i DGS, vengano messe a dispozione la maggior parte delle funzionalità dell'interprete GNU Guile. Ciò vale in particolare per la libreria delle funzioni matematiche di cui qui viene fatto largo uso.

##### DGS senza parametri di ingresso

La procedura per la creazione di un DGS senza parametri in ingresso è la seguente:

1. si seleziona il comando script;
2. si clicca con il mouse direttamente sullo sfondo del foglio di lavoro nel punto in cui si desidera che compaia il valore di uscita dello script prestando attenzione a non cliccare erroneamente su oggetti della figura, in quanto questi verrebbero considerati da DR. GEO come parametri di ingresso dello script2;
3. una volta collocato lo script appare per default la scritta celeste "Dr. Genius" ed è ora il momento di editare lo script azionando il comando per modificare le proprietà di un oggetto e quindi cliccando con il mouse sulla scritta stessa. A questo punto si apre automaticamente una finestra di dialogo, che mostra il contenuto dello script (`"Dr. Genius"`), dove si può cancellare il contenuto di default dello script e sostituirlo con il desiderato.

###### Un generatore di numeri casuali e altro

Il codice da editare, dopo aver seguito la procedura illustrata sopra, per ottenere un numero casuale è semplicemente:

    (random 10)

Ogni volta che si clicca sullo script comparirà un numero casuale tra 0 e 9.

Se si desidera generare un numero casuale appartenente all'intervallo [0;1[, basta utilizzare lo script:

    (random:uniform)

Qualche osservazione:

- Il valore restituito da uno script coincide con il valore calcolato nell'ultima linea di codice. Nel nostro caso questo valore coincide con il valore ritornato dalla chiamata ad una funzione.
- L'ultima linea di uno script deve ritornare un numero reale. In caso contrario comparirà la scritta "Risultato non stampabile" ;
- Se si desidera visualizzare il valore di una variabile è sufficiente scrivere il suo nome nell'ultima riga dello script.

###### Calcolo di costanti

Per calcolare un valore approssimato di pigreco è sufficiente scrivere:

    (acos -1)

mentre per calcolare un valore approssimato del numero di Neper:

    (exp 1)

I valori restituiti da questi DGS si possono utilizzare alla stregua di un qualsiasi altro valore numerico editabile in DR. GEO.

L'importanza pedagogica dei DGS si sente maggiormente quando, come ora vedremo, vengono loro passati dei parametri in ingresso.

##### DGS con uno o più parametri in ingresso

Il procedimento per creare un DGS con un parametro in ingresso è simile, ma non identico, a quanto visto in precedenza.

L'unica diversità consiste nel fatto che in questo caso, subito dopo aver selezionato il comando per attivare uno script, si deve cliccare sugli oggetti geometrici di ingresso che si desidera passare allo stesso e solo successivamente si deve cliccare in un punto del foglio di lavoro dove si desidera venga visualizzato l'output dello script.

All'interno dello script il riferimento al primo parametro di entrata è rappresentato per default dalla variabile a1. In caso di due o più parametri di ingresso si utilizzeranno, rispettando l'ordine in cui sono stati selezionati gli oggetti, le variabili a1, a2..., an.

A seconda del tipo di oggetto a cui si fa riferimento sono disponibili diversi metodi per ottenere valori numerici, coordinate, lunghezze e via di seguito i cui codici sono contenuti nel capitolo Metodi di riferimento per DGS.

###### Area del triangolo

Iniziamo ora a trattare un esempio molto semplice di utilizzo di un DGS per il calcolo dell'area di un triangolo. La figura a cui ci riferiamo è la seguente:

Area del triangolo

In essa sono rappresentati un triangolo ABC e l'altezza CH relativa alla base AB.

Per calcolare l'area S(ABC) del triangolo utilizziamo un DGS con parametri in ingresso i segmenti AB e CH della figura.

Seguendo la procedura precedente si clicca innazitutto sul bottone che aziona la funzionalità di script e subito dopo, nell'ordine, sui due segmenti che risulteranno lampeggiare. Si clicca quindi su un punto dello schermo dove si desidera collocare l'uscita dello script e comparirà la scritta azzurra Dr. Genius.

A questo punto, dopo aver azionato il comando per modificare le proprietà di un oggetto e dopo aver cliccato sulla scritta Dr. Genius, si aprirà una finestra in cui scriveremo il seguente codice Scheme:

    (define AB (getLength a1))
    (define BC (getLength a2))
    (/ (* AB CH ) 2 )

ottenendo il valore dell'area del triangolo. Per assegnare il nome S(ABC) allo script e per cambiarne il colore da azzurro a rosso scuro basta utilizzare la funzionalità di modifica dello stile di un oggetto vista in precedenza.

Altri esempi didattici elementari sono comunque contenuti nel capitolo dedicato alle Applicazioni Didattiche.

###### Tangente ad una curva

In quanto segue proponiamo un esempio articolato in cui si esamina più volte la procedura di creazione di uno script. L'esempio, che svilupperemo in modo graduale, riguarda la costruzione del grafico di una funzione e della tangente in un punto variabile del suo grafico.

La figura finale è contenuta nella documentazione di DR. GEO e prende il nome di slope.fgeo

La figura che otterremo

###### Definire un valore in un dato intervallo

In un foglio di lavoro bianco disegnamo due punti e il segmento che li congiunge. Su questo segmento sistemiamo un punto che chiamiamo "Move me!".

Questo punto ci serve per determinare valori numerici in un dato intervallo. Infatti il seguente script, il cui parametro a1 si riferisce a "Move me!", restituisce un numero decimale nell'intervallo [-10;+10]:

    (define x (getAbscissa a1))
    (* 20  (- x 0.5))

La prima linea dello script definisce una variabile `x` il cui valore `(getAbscissa a1)` coincide con l'ascissa curvilinea dell'oggetto geometrico a cui si riferisce a13 ossia del punto "Move me!". Nella seconda riga dello script, che traduce l'espressione algebrica 20 ·( x - 0.5), si fa in modo che il valore restituito dallo script appartenga all'intervallo [-10;+10]. Finalmente chiamiamo questo script X0.

###### Disegnare il grafico di una funzione

Il valore numerico generato dallo script precedente ci serve ora per calcolare, attraverso un secondo script, la sua immagine attraverso la funzione x -> cos(x) :

    (define x (getValue a1))
    (cos x)

Sottolineiamo che in `(getValue a1)` l'oggetto a cui si riferisce a1 non è il punto "Move me!" ma lo script X0. Chiamiamo questo secondo script Y0.

Infine creiamo il punto M0 di coordinate (X0;Y0) che è un punto del grafico della funzione x -> cos(x). Per disegnare il grafico costruiamo il luogo del punto M0 quando "Move me!" descrive tutto il segmento su cui giace.

###### Calcolare e disegnare la tangente al grafico

Per determinare la tangente nel punto M0 del grafico calcoliamo in primo luogo la pendenza della retta tangente. Consideriamo allora la derivata prima della funzione x -> -sin(x) nel punto X0 e scriviamo lo script:

    (- 0 (sin (getValue a1)))

che ha come riferimento l'ascissa X0. Le notazioni di tipo Scheme/Guile possono sembrare inizialmente poco intuitive ma dopo aver familiarizzato con esse appariranno semplici. Chiamiamo lo script "pendenza in M0". Nel momento in cui M0 viene spostato sul grafico la pendenza viene ricalcolata.

Non resta che disegnare la tangente. Per fare questo calcoliamo le coordinate di un secondo punto M1 di questa retta.

Iniziamo dall'ascissa ponendo, ad esempio, X1 = X0 + 2 e scriviamo uno script, che chiamiamo X1, con parametro d'ingresso lo script X0:

    (define x1 (getValue a1))
    (+ x1 2)

Per determinare l'ordinata di M1 abbiamo bisogno di:

- M0 (riferimento a1);
- pendenza in M0 (a2);
- ascissa X1 (a3).

Nello script seguente calcoliamo l'ordinata di M1 calcolando Y0 + m(X1 - X0):

    (define x0 (car (getCoordinates a1)))
    (define y0 (cadr (getCoordinates a1)))
    (define m (getValue a2))
    (define x1 (getValue a3))
    (+ (* m (- x1 x0)) y0)

Qualche parola relativamente alla chiamata `(getCoordinates a1)`, in essa `a1` deve riferirsi a un oggetto di tipo punto. Il metodo restituisce in questo caso una lista contenente le coordinate del punto che per noi è M0. Scrivendo `car` si estrae dalla lista il primo valore, scrivendo `cadr` il secondo. La parte rimanente dello script dovrebbe risultare chiara.

Chiamiamo questo script Y1 e costruiamo il punto M1 di coordinate (X1;Y1) e finalmente la tangente M0M1.

Osserviamo che, al posto di tutti questi script, sarebbe stato possibile scriverne solo due o tre, anche se più complessi.

|  |  | DGS attraverso esempi |