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.