Alcuni strumenti per le trasformazioni geometriche con Derive

Alcuni strumenti
per le trasformazioni geometriche
con Derive
Sebastiano Cappuccio
Mathesis - Forlì
Un argomento spesso trattato nella Scuola Secondaria Superiore, sia al biennio
che al triennio, con varie impostazioni, è quello delle trasformazioni
geometriche. L'elaboratore si presta bene ad essere utilizzato, grazie alle sua
capacità grafiche, per dare un contributo nella trattazione di questo argomento.
Nell'ambiente scolastico circola molto materiale su questo tema con i tipi più
svariati di soluzioni: pacchetti ad hoc già pronti, di pubblico dominio o allegati a
libri di testo; "materiale grigio" (ad esempio dispense di corsi PNI) con listati, di
solito in Pascal, e perfino sotto forma di fogli di lavoro di un foglio elettronico.
Naturalmente anche con Derive si possono presentare esempi di trasformazioni,
forse con qualche vantaggio in più rispetto ad altre soluzioni: questo ambiente si
presta molto bene a operare con operazioni tra vettori e matrici: ad esempio una
traslazione può essere effettuata oltre che con le apposite formule, come somma
tra vettori; una rotazione può esplicitamente messa sotto forma di prodotto di
un vettore per una opportuna matrice.
Da non trascurare inoltre la comodità di operare in un ambiente già familiare per
chi, studente o docente, usa già Derive in modo più o meno sistematico.
Qui di seguito viene descritto un modo di realizzare alcune trasformazioni
geometriche utilizzando le capacità di calcolo simbolico di Derive. Il Lettore
noti l'estrema semplicità con cui ciò viene realizzato, rispetto all'uso di un
linguaggio di programmazione: l'alunno potrà così concentrarsi sui soli aspetti
geometrici e matematici del problema senza perdersi nelle minuzie di un
linguaggio di programmazione.
Si farà riferimento alla versione di Derive 2.5 o ad una successiva. Nella
scrittura dei "listati" si seguiranno le convenzioni indicate in [1] ed in [2].
Derive è un marchio registrato della Soft Warehouse Inc.
1 - Inizializzazione
{Options Input Mode Word}
{Author v:=[[1,1],[1,0],[0,0],[0,1],
[1,1],[1,2],[2,3],[1,4],[1,2]]}
1:





= 
















{Plot Overlay Options State}
{Mode Connected Size Small}
{Plot}
{<F10>}
Il primo comando serve per fare accettare da Derive come identificatori di
variabili anche parole (Word) oltre che singoli caratteri.
Viene successivamente definita la matrice v delle coordinate dei vertici della
poligonale che sarà successivamente utilizzata per gli esempi; naturalmente il
Lettore potrà definire un altro insieme di vertici, dato che le successive funzioni
di trasformazione saranno definite in modo da essere indipendenti dal numero
dei vertici.
Il successivo comando, Plot Overlay Options State, serve per accedere
alle opzioni dell'ambiente di grafica.
Si procede successivamente a selezionare Mode Connected e Size Small
per far sì che Derive disegni i vertici indicati nella matrice v in formato piccolo e
collegati tra loro, nell'ordine dato, da segmenti.
L'ultimo comando Plot provvede a tracciare la poligonale indicata.
Il comando <F10> corrisponde alla pressione del corrispondente tasto funzione
per modificare la scala affinché la figura compaia per intero nello schermo.
2 - I casi più semplici: alcune simmetrie
In questa sede conveniamo di rappresentare i punti come vettori-riga, cioè nella
forma [x, y], invece della più consueta forma di vettori-colonna:
x 
 
y 
Questo avviene per rendere più semplice la digitazione dei vettori con Derive: è
possibile rappresentare i punti anche nel secondo formato, ma per poterlo fare è
necessario digitare la matrice sotto forma di vettore di vettori
monodimensionali, cioè nella forma [[x], [y]].
Per ottenere il corrispondente del punto (x, y) nella simmetria assiale rispetto
all'asse delle ascisse, è sufficiente cambiare il segno dell'ordinata.
La cosa può essere presentata sotto forma di prodotto "righe per colonne" tra il
vettore [x, y] e una opportuna matrice di trasformazione:
1
[x, y]. 
0
0 
 = [x, −y] .
−1 
Naturalmente si tratterà di un "prodotto a destra" della matrice.
È quindi facile costruire le funzioni di Derive per ottenere questa ed altre
trasformazioni:
{Algebra}
{Author simmx(v):= v.[[1,0],[0,-1]]}


2: SIMMX(v) := v . 



−
{Author simmy(v):= v.[[-1,0],[0,1]]}
−
3: SIMMY(v) := v . 




{Author simmbis(v):= v.[[0,1],[1,0]]}


4: SIMMBIS(v) := v . 



{Author simmo(v):= v.[[-1,0],[0,-1]]}
−
−

5: SIMMO(v) := v . 



Sono così definite le funzioni SIMMX, SIMMY, SIMMBIS e SIMMO che
applicano alla poligonale definita dalla matrice v, rispettivamente, una simmetria
assiale rispetto all'asse delle ascisse, una simmetria assiale rispetto all'asse delle
ordinate, una simmetria assiale rispetto alla bisettrice del primo e terzo
quadrante ed, infine, una simmetria centrale rispetto all'origine del sistema di
riferimento.
Si noti che il prodotto tra matrici con Derive deve essere esplicitamente indicato
con il carattere di "punto".
D'ora in poi useremo le parole "vettore" e "punto" come sinonimi.
Applichiamo alla matrice v, ad esempio, la simmetria assiale rispetto all'asse
delle ordinate:
{Author simmy(v)}
6: SIMMY(v)
{Simplify # 6}
7: . . . . . . . . . . . .
Nella linea 7, che si ritiene inutile riportare, si ottiene la matrice delle coordinate
dei vertici della poligonale ottenuta dalla trasformazione applicata.
{Delete Last}
{Algebra}
{Author simmx(simmbis(v))}
8: SIMMX(SIMMBIS(v))
{Simplify # 8}
9:
. . . . . . . . . . .
{Algebra}
{Author simmbis(simmx(v))}
10: SIMMBIS(SIMMX(v))
{Simplify # 10}
11: . . . . . . . . . . .
{Plot}
Ecco come appare lo schermo di grafica selezionando il comando Plot relativo
alle espressioni n. 1 e n. 11:
Si può far notare agli alunni la possibilità di applicare direttamente la
composizione di due (o più) trasformazioni e, come è ovvio, la non
commutatività della composizione.
3 - La rotazione intorno all'origine
Vogliamo ora ottenere le coordinate del vettore che si ottiene applicando al
vettore [x, y] una rotazione di un angolo α in senso antiorario intorno
all'origine.
Il problema è di facile soluzione e potrebbe essere proposto agli alunni come
esercizio.
P'
P
α
β
O
A'
A
Indicando con x, y e con x', y', rispettivamente, le coordinate di P e di P', e con
ρ la misura della lunghezza dei segmenti OP e OP', avremo:
x = ρ cos β, y = ρ sin β
(1)
x' = ρ cos(α + β) = ρ cos α cos β − ρ sin α sin β
y' = ρ sin(α + β) = ρ sin α cos β + ρ cos α sin β
e quindi, in virtù delle (1),
x' = x cos α − y sin α
y' = x sin α + y cos α.
La matrice relativa alla trasformazione desiderata sarà quindi:
 cos α

 −sin α
sin α 

cos α 
{Delete All}
(Algebra}
{Author rot(v,α):=v.[[cosα,sinα],[-sinα,cosα]]}
(α) s (α) 


 −s (α) c (α) 
12: ROT(v,α):=v. 
13: ROT(v,π/6)
{Author rot(v,π/6)}
{Simplify # 13}
14: . . . . . . . . . . . .
{Plot Plot Algebra}
{Jump to 1 Plot Plot}
I primi comandi servono per cancellare lo schermo di grafica e tornare
all'ambiente di Algebra. Dopo aver definito la funzione ROT, questa viene
utilizzata per ottenere la rotazione di un angolo di 30o della poligonale definita
dalla matrice v.
Gli ultimi comandi servono per accedere all'ambiente di grafica, tracciare la
nuova poligonale, tornare all'ambiente di Algebra ed infine saltare (Jump to)
all'espressione numero 1, cioè la matrice v, poi tornare all'ambiente di grafica ed
infine tracciare anche la poligonale di partenza.
Si ricordi che per ottenere le lettere greche α e π in Derive, basta premere il
corrispondente tasto <a> oppure <p> contemporaneamente al tasto <ALT>.
4 - La simmetria rispetto ad una retta per l'origine
Ci comporteremo in modo simile al caso precedente:
P'
P
O
β
α
A'
A
Indichiamo con α l'angolo formato dall'asse di simmetria con il semiasse
positivo delle ascisse.
Restano valide le (1) viste nel caso della rotazione intorno all'origine.
Essendo A'ÔP' = α + (α − β) = 2α − β, e usando gli stessi simboli dell'esempio
precedente, avremo:
x' = ρ cos(2α − β) = ρ cos 2α cos β + ρ sin 2α sin β = x cos 2α + y sin 2α
y' = ρ sin(2α − β) = ρ sin 2α cos β − ρ cos 2α sin β = x sin 2α − y cos 2α.
Quindi la matrice relativa alla trasformazione è:
 cos 2α
sin 2α 


 sin 2α − cos 2α 
{Algebra}
{Author simmass(v,α):=v.[[cos(2α),sin(2α)],
[sin(2α),-cos(2α)]]}
( α) s ( α) 


 s ( α) − c ( α) 
15: SIMMASS(v,α) := 
16: SIMMASS(v, π/3)
17:
{Author simmass(v,π/3)}
{Simplify}
. . . . . . . . . . . .
{Plot Delete Butlast}
{Plot}
Gli ultimi comandi cancellano l'ambiente di grafica ad eccezione dell'ultimo
grafico (la poligonale definita in v) e tracciano la figura ottenuta da esso
attraverso una simmetria assiale avente per asse la retta di equazione y = mx,
ove il coefficiente angolare m è la tangente trigonometrica di α = π/3.
Se lo si desidera, si può anche tracciare l'asse di simmetria:
18: x tan(π/3)
{Author x tan π/3}
{Plot Plot}
Ecco invece come appare lo schermo di grafica applicando una simmetria assiale
rispetto alla retta che forma un angolo di 2/3 π con il semiasse positivo delle
ascisse:
Sarà facile per lo studente verificare, sia manualmente che sfruttando la grafica
di Derive, che con α = 0, α = π/4, α = π/2, si ottengono, rispettivamente, la
simmetria assiale rispetto all'asse delle ascisse, rispetto alla bisettrice del primo e
terzo quadrante e rispetto all'asse delle ordinate.
5 - La traslazione
È noto che una traslazione del punto (o del vettore) di coordinate (x, y) è
individuata da un vettore [a, b] che, sommato al vettore dato, fornisce il punto
di coordinate (x + a, y + b).
Per ottenere la poligonale traslata secondo il vettore [a, b] dovremo quindi
sommare il vettore a ciascuno dei vettori che individuano la poligonale v.
{Author trasl(v,a,b) := vector([a,b],k,1,dimension(v)) + v}
19: TRASL(v,a,b):= VECTOR([a,b],k,1,DIMENSION(v))
+v
{Author trasl(v,3,1)}
20: TRASL(v,3,1)
{Simplify}
21: . . . . . . . . . . .
{Plot Plot}
Si noti che la funzione TRASL è stata definita costruendo un "vettore di vettori",
cioè una matrice con due colonne e con tante righe (tutte uguali al vettore [a, b]
che individua la traslazione) quante sono quelle della matrice v data
(DIMENSION(v)).
Ormai è giunto il momento di salvare il lavoro finora svolto:
{Algebra Transfer Save Derive TRASFOR.MTH}
6 - Alcuni esempi di composizioni
Si possono utilizzare le funzioni "primitive" sopra definite per costruire nuove
funzioni attraverso la loro composizione. Ad esempio la simmetria centrale di
centro [a, b] può essere realizzata come composizione tra:
una traslazione di [−a, −b];
una simmetria centrale rispetto all'origine;
una traslazione di [a, b].
{Plot Delete All Algebra Jump to 1}
{Plot Plot Algebra}
{Author simmcen(v,a,b) := trasl(simmo(trasl(v,-a,-b)),a,b)}
22: SIMMCEN(v,a,b):= TRASL(SIMMO(TRASL(v,-a,-b)),
a,b)
{Author simmcen(v,4,1)}
23: SIMMCEN(V,4,1)
{Simplify)
24: . . . . . . . . . . . .
{Plot Plot}
Come ormai è noto, i primi comandi servono per cancellare l'ambiente di grafica
e tracciare ancora la poligonale v.
Chi lo desidera, può tracciare con il comando Plot anche il centro di
simmetria, indicato nella forma [a, b].
Ancora utilizzando le funzioni TRASL e SIMMASS, può facilmente essere definita
la funzione SIMMASS2 che fornisce il risultato di una simmetria assiale avente
come asse la retta di equazione y = mx + q.
Sarà sufficiente applicare al vettore v, nell'ordine:
una traslazione individuata dal vettore [0, − q];
una simmetria assiale avente come asse la retta, passante per l'origine, di
equazione y = mx e che forma, quindi, un angolo di ampiezza
arctang(m) con il semiasse positivo delle ascisse;
una traslazione individuata dal vettore [0, q].
{Delete All Algebra Jump to 1}
{Plot Plot Algebra}
{Author simmass2(v,m,q):=trasl(simass
(trasl(v,0,-q),atan(m)),0,q)}
25: SIMMASS2(v,m,q):=TRASL(SIMASS (TRASL(v,0,-q),
ATAN(m)),0,q)
{Author simmass2(v,3,2)}
26: SIMMASS2(v,3,2)
{Simplify}
27: . . . . . . . . . . . .
{Plot Plot}
Chi lo desidera, può tracciare con il comando Plot anche l'asse di simmetria,
nella forma y = mx + q.
Naturalmente la funzione SIMMASS2 non potrà essere utilizzata nel caso di asse
di simmetria parallelo all'asse delle ordinate. Costruiremo ora una terza
funzione, SIMMASS3, per ottenere il risultato anche in quest'ultimo caso.
È molto facile trovare l'ascissa del punto A' simmetrico di A rispetto a C:
O
A
C
A'
Indicando rispettivamente con a e con k le ascisse di A e di C, avremo:
OA' = OC + CA' = OC + AC = k + (k − a) = 2k − a
L'ascissa di A' può quindi essere ottenuta cambiando il segno all'ascissa a di A
ed aggiungendo 2k; di conseguenza la trasformazione desiderata potrà essere
ottenuta con la composizione di una simmetria assiale rispetto all'asse delle
ordinate a cui viene successivamente applicata una traslazione secondo il vettore
[2k, 0].
{Delete All Algebra Jump to 1}
{Plot Plot Algebra}
{Author simmass3(v,k):= trasl(simmy(v),2k,0)}
28: SIMMASS3(v,k):=TRASL(SIMMY(V),2K,0)
{Author simmass3(v,4)}
29: SIMMASS3(v,4)
{Simplify}
30: . . . . . . . . . . . .
{Plot}
{Algebra}
Anche in questo caso potrebbe essere utile visualizzare l'asse di simmetria;
poichè non è possibile visualizzare direttamente con Derive una retta avente
equazione x = k, si potrebbe ricorrere ad un piccolo trucco definendo la
seguente funzione:
{Author retta(k):=[[k, -100],[k, 100]]}
k −
31: RETTA(k) := 




{Author retta(4)}
32: RETTA(4)
{Plot Plot}
In realtà così non viene tracciata la retta desiderata ma solo il segmento
congiungente i punti di coordinate (k, − 100), (k, 100): si ricordi che è tuttora
attiva l'opzione State Mode Connected.
7 - Oltre le isometrie
Tutte le trasformazioni finora viste sono isometrie. Accenneremo ora ad alcune
trasformazioni non isometriche: l'omotetia e l'affinità.
Per realizzare una omotetia sulla matrice v sarebbe sufficiente moltiplicare v per
uno scalare k (rapporto di omotetia) . Per coerenza con le precedenti
esposizioni preferiremo realizzarla con il prodotto di v per la matrice
k 0 

.
0 k 
{Delete All Algebra Jump to 1}
{Plot Plot Algebra}
{Author omot(v,k):=v.[[k,0],[0,k]]}
Essendo il prodotto per uno scalare, non è necessario il simbolo di operazione
"punto".
k

33: OMOT(v,k):=v 



{Author omot(v,2)}
34: OMOT(v, 2)
{Simplify}
35: . . . . . . . . . . . .
{Plot Plot}
Lasciamo al Lettore il facile compito di costruire la funzione DILAT (v,k,h)
che realizza la "dilatazione" della poligonale v di un fattore k lungo la direzione
dell'asse delle ascisse e di un fattore h lungo la direzione dell'asse delle ordinate.
Concludiamo accennando alla costruzione della funzione che realizza una
affinità, cioè una trasformazione che fa corrispondere rette a rette e che
conserva il parallelismo. Questa trasformazione comprende tutte le precedenti
come casi particolari e può essere considerata come ottenuta attraverso il
prodotto della matrice v per una matrice m 2 × 2 (non singolare) a cui è stata
applicata la traslazione individuata dal vettore z.
{Delete All Algebra Jump to 1}
{Plot Plot Algebra}
{Author affin(v,m,z):=trasl(v.m,element(z,1),
element(z,2))}
36: AFFIN(v,m,z):=TRASL(v.m,ELEMENT(z,1),
ELEMENT(z,2))
{Author m:=[[4,3],[1,2]]}


37: m:= 



{Author z := [-3,-6]}
38: z := [-3, -6]
{Author affin(v,m,z)}
39: AFFIN(v,m,z)
{Simplify}
39: . . . . . . . . . . . .
{Plot Plot)
La funzione ELEMENT(z,k) fornisce il k-esimo elemento del vettore z.
Le linee 37 e 38 servono per definire un esempio su cui operare.
Questo è il risultato che appare sullo schermo con i valori proposti:
8 - Cambiamo poligonale
Tutti gli esempi finora visti facevano riferimento alla poligonale v definita
all'inizio, ma potrebbe essere interessante esaminare altre poligonali.
Un caso particolarmente interessante e utile è quello in cui si opera con una
conica, in particolare con una circonferenza; ad esempio una circonferenza con
centro nell'origine e raggio unitario può essere così "simulata" con una
opportuna poligonale:
40:
41:
42:
41:
42:
{Algebra}
{Author circ := vector([cosθ, sinθ], θ ,0,2π,π/12)}
CIRC := VECTOR([COS(θ), SIN(θ)],θ,0,2π,π/12)
{Author circ}
CIRC
{approX}
. . . . . . . . . . . .
{Plot Plot Algebra}
{Author affin(circ,a,z)}
AFFIN(CIRC,a,z)
{approX}
. . . . . . . . . . . .
{Plot Plot}
Si consiglia di usare il comando approX invece del comando Simplify per
rendere più veloce l'esecuzione dei calcoli da parte di Derive.
Analogamente può essere definito, ad esempio, un opportuno vettore per
"simulare" una parabola con il vertice nell'origine:
para:= vector([x,x^2],x,-10,10,0.2)
9 - Un cenno sulla proiettività
Ci limiteremo, vedi [3], a considerare il caso particolare descritto nella seguente
figura in cui al punto P sul piano π viene fatto corrispondere sul piano π' il
punto P' allineato con esso e con il centro S; si noti in particolare che sul piano
π l'asse delle ascisse è la retta limite, cioè la retta appartenente al piano per S
parallelo a π'; analogamente l'asse delle ascisse sul piano π' è la retta limite, vale
a dire la retta appartenente al piano per S parallelo a π. Le rette limite sono le
rette, rispettivamente di π e di π', a cui non corrisponde sull'altro piano alcuna
retta.
L'asse delle ordinate, rispettivamente su π e su π', è la retta individuata dal piano
per S perpendicolare a π ed a π'.
π
x
S
y
O'
P
y'
π'
O
P'
x'
È possibile dimostrare (v. ancora [3]) che le coordinate di P' sono
 x =

 y =
bx
y
ab
y
ove a e b indicano rispettivamente le misure dei segmenti OS ed O'S.
Ecco come costruire una funzione di Derive per realizzare questo tipo di
proiettività applicata alla poligonale v:
PROIETT(v,a,b):=
VECTOR([ELEMENT(v,k,1)b/ELEMENT(v,k,2),
ab/ELEMENT(v,k,2)],k,1,DIMENSION(v))
Viene così costruito una nuova poligonale, cioè un nuovo "vettore di vettori"
avente la stessa dimensione di v e le cui componenti sono i corrispondenti dei
punti di v stesso.
Una applicazione interessante potrebbe essere quella di sottoporre a questa
trasformazione le circonferenze di raggio unitario e centro, rispettivamente,
(0,0), (0,1), (0,2), (0,3).
Ecco ciò che appare sullo schermo di grafica con a = 1 e b = 3:
10 - Come utilizzare questi strumenti
Se si segue una impostazione di tipo "tradizionale" sarà opportuno utilizzare
queste funzioni come "scatole nere", senza indagare su come sono state
costruite; se invece si segue una impostazione che potremmo chiamare
"vettoriale", la costruzione di queste e di altre funzioni sarà esercizio facile ma
non banale per applicare le cose viste a lezione. Ad esempio l'insegnante
potrebbe proporre ai propri alunni come esercizio, dopo aver commentato la
funzione SIMMBIS, la costruzione della simmetria rispetto alla bisettrice del
secondo e quarto quadrante.
Le funzioni viste si prestano ad una impostazione induttiva basata sulla scoperta
guidata: ad esempio ci si potrebbe chiedere per tutte le isometrie (tranne la
traslazione) di esaminare il valore del determinante della matrice corrispondente
e di formulare ipotesi sui valori ottenuti per giungere così al concetto di
isometria diretta o inversa.
Si potrebbero inoltre proporre esperimenti per arrivare al prodotto tra matrici
come matrice corrispondente alla composizione delle corrispondenti
trasformazioni.
Insomma, come sempre l'unico limite è la fantasia dell'insegnante.....
Bibliografia
[1] G. C. Barozzi, DERIVE: un sistema di calcolo simbolico al servizio della
didattica, La matematica e la sua didattica, n. 2, 1990.
[2] S. Cappuccio, Per un uso "creativo" del laboratorio di informatica, La
matematica e la sua didattica, n. 4, 1993.
[3] Castelnuovo, Gori Giorgi, Valenti, Matematica oggi, vol. 2, La Nuova
Italia, Firenze, 1992.
[4] C. Mammana, B. Micale, Gruppi di trasformazioni geometriche e
geometria elementare - Geometria del piano, La matematica e la sua didattica
n. 2 1991.
Summary
Subject of this paper is "Geometric Transformations with Derive".
A vector-oriented study of Geometry is assumed.
Some Derive functions are built to execute isometric transformations
like: axial symmetry, central symmetry, rotation, translation.
Examples are given about composite transformations.
There is also some information about functions for non-isometric
transformations like particular cases of homothety, affine and
projective transformations.
Finally the paper gives teachers some suggestion and proposal about
the use of these functions in classrooms.