![]() | ![]() | ![]() | 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 applicazioni. Un DGS può ricevere da 0 a n parametri di ingresso.
Subito dopo aver selezionato il comando per attivare uno script si deve cliccare sugli oggetti geometrici di ingresso e, successivamente, cliccare in un punto del foglio di lavoro dove si desidera venga visualizzata l'uscita dello script.
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. GENIUS un aspetto speciale1 nel panorama dei programmi di studio interattivo della geometria euclidea. Oltre a questo è importante comprendere come, attraverso i DGS, vengono 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.
Il codice da editare per ottenere in uscita un numero casuale è molto semplice:
(random 10)Ogni volta che si clicca sullo script compare un numero casuale tra 0 e 9.
Se si vuole un numero casuale nell'intervallo [0 ; 1[, utilizzeremo lo script:
(random:uniform)
Per calcolare un valore approssimato di pi è sufficiente scrivere:
(acos -1)mentre per calcolare un valore approssimato di e :
(exp 1)
I valori restituita da questi DGS si possono utilizzare alla stregua di un qualsiasi altro valore numerico editabile in DR. GENIUS . I DGS sono vostri amici per queste tutte queste piccole cose. Tuttavia la loro amicizia si sente di più quando vengono loro passati dei parametri in ingresso.
Il procedimento per creare un DGS con un parametro in ingresso è simile a quanto visto in precedenza. Dopo aver selezionato il comando per attivare uno script, si clicca sull'oggetto che viene passato allo script come parametro di ingresso, quindi si clicca in un punto del foglio di lavoro dove si desidera venga visualizzato il numero che rappresenta l'uscita dello script.
All'interno dello script il riferimento al parametro di entrata è rappresentato 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 ecc... e i loro codici sono contenuti nel capitolo Metodi di riferimento per DGS.
In quanto segue proponiamo un esempio - non il più semplice - esaustivo della procedura di creazione di uno script. L'esempio, che svilupperemo gradualmente, riguarda la costruzione di un grafico di funzione e della costruzione della tangente in un suo punto mobile.
La figure finale è contenuta nella documentazione di DR. GENIUS e prende il nome di slope.drgenius
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 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 proprio all'intervallo [-10;+10]. Finalmente chiamiamo questo script Xo.
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 Xo. Chiamiamo questo secondo script Yo.
Infine creiamo il punto Mo di coordinate (Xo ; Yo) che è un punto del grafico della funzione x -> cos(x). Per disegnare il grafico costruiamo il luogo del punto Mo quando "Move me!" descrive tutto il segmento su cui giace.
Per determinare la tangente nel punto Mo del grafico calcoliamo in primo luogo la pendenza della retta tangente. Consideriamo allora la derivata prima della funzione x -> -sin(x) nel punto Xo e scriviamo lo script:
(- 0 (sin (getValue a1)))
che ha come riferimento l'ascissa Xo. Le notazioni di tipo Scheme/Guile possono sembrare inizialmente poco intuitive ma dopo aver familiarizzato con esse appariranno semplici. Chiamiamo lo script "pendenza in Mo". Nel momento in cui Mo 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 = Xo + 2 e scriviamo uno script, che chiamiamo X1, con parametro d'ingresso lo script Xo:
(define x1 (getValue a1)) (+ x1 2)
Per determinare l'ordinata di M1 abbiamo bisogno di:
Nello script seguente calcoliamo l'ordinata di M1 clacolando Yo + 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 approposito della 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 è Mo. 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 (MoM1).
Osserviamo che sarebbe stato possibile scrivere al posto di tutti questi scripts solo due o tre scripts più complessi. La speranza è di aver dato un quadro complessivo ed esaustivo di utilizzo degli scripts.
![]() | ![]() | ![]() | DGS attraverso esempi |