L'approccio adottato in GEObject è viceversa di tipo procedurale, si basa cioè sulla specifica costruttiva delle proprietà geometriche e delle relazioni (o vincoli) tra gli oggetti che compongono la figura. Attraverso l'interfaccia grafica l'utente è in grado di realizzare complesse figure geometriche mimando l'approccio manuale del disegnatore che faccia uso di riga e compasso. La costruzione geometrica cosi' realizzata definisce un insieme di vincoli tra gli oggetti che compongono la figura. Quand si sottopone una figura così costruita a una trasformazione geometrica, vengono ripetuti automaticamente tutti i passi della costruzione, a partire dalla nuova posizione degli oggetti trasformati. Questo procedimento garantisce la consistenza dei vincoli imposti durante la costruzione.
Per capire meglio questo approccio supponiamo di voler disegnare un segmento ed il proprio asse; dopo aver tracciato un segmento a partire dai suoi estremi A e B, si determina la retta ortogonale al segmento e passante per il suo punto medio. Usando riga e compasso è possibile ottenere tale retta disegnando 2 cerchi centrati rispettivamente in ciascun estremo del segmento e con raggio pari al segmento stesso, e intersecandoli per ottenere la coppia di punti per i quali passa l'asse del segmento. In figura 1 è mostrato il risultato del procedimento.
Alla figura così ottenuta è possibile applicare delle trasformazioni, per esempio traslare un estremo del segmento. Dopo una tale operazione l'asse precedentemente disegnato non sarà più tale, ma sarà comunque possibile ricalcolarne la nuova posizione ripetendo automaticamente il processo di costruzione precedentemente realizzato (vedi figura 2).
Usando il paradigma riga-compasso come tecnica di modellazione geometrica si ottengono cosi' due grossi benefici: si evita di dover specificare algebricamente i vincoli tra gli oggetti (il che richiederebbe all'utilizzatore una buona preparazione matematica) e non si deve ricorrere ad un constraint solver numerico per mantenere i vincoli in seguito ad una trasformazione geometrica (con notevole riduzione del costo computazionale).
Gli oggetti primitivi sono un insieme di entità geometriche che possono essere direttamente istanziate (ovvero disegnate) dall'utente: sono il punto, la retta, la semiretta, il segmento, il cerchio, l'arco, l'angolo, il poligono. Premendo il bottone sinistro del mouse in un qualunque punto del foglio da disegno, verrà visualizzato un menù dove sono elencate queste entità geometriche di base. Come si puo' vedere in figura 3 esse sono strutturate secondo una gerarchia (evidenziata dalla indentazione) che riflette la gerarchia interinseca nella geometria euclidea. Il sistema è stato infatti costruito in modo perfettamente aderente alla disciplina che si propone di studiare: questa è una condizione irrinunciabile che ogni buon sistema orientato alla didattica deve possedere.
Una volta selezionato l'oggetto che si vuole disegnare, sarà neccessario indicare quale, tra i metodi di creazione, si vuole utilizzare. Per esempio un cerchio puo' essere disegnato a partire dal suo centro e da un altro punto, o a partire da 3 punti non allineati, o a partire dal centro e dal raggio ... (vedi figura 4). Una volta selezionato il metodo di creazione, l'utente è invitato a specificare i parametri neccessari a tracciare l'oggetto richiesto, che potrà cosi' venire disegnato.
Quando un oggetto geometrico viene disegnato esso non è semplicemente un insieme di pixel attivati sullo schermo: esso continua ad essere un vero e proprio oggetto geometrico che ne conserva tutte le sue proprietà, a loro volta derivate dalla classe di appartenenza.
Questo risulta evidente se, invece di premere il mouse sullo sfondo, lo si preme su un oggetto precedentemente disegnato. Il sistema riconosce l'azione di interrogazione dell'oggetto e fornisce un menù di metodi di interazione (specifici per ogni classe di oggetti) con i quali manipolare l'oggetto stesso (figura 5).
Tra i metodi di interazione principali c'è il metodo traslazione (per applicare una trasformazione geometrica di traslazione; è comune a tutti gli oggetti geometrici), il metodo hide (per nascondere un oggetto) ed il metodo intersect che è lo strumento fondamentale per creare legami, cioè vincoli, tra gli oggetti geometrici.
Riepilogando, l'interfaccia di GEObject fornisce 3 classi di strumenti atti a creare e manipolare figure geometriche:
Abbiamo visto che una figura è un insieme di oggetti geometrici eventualmente vincolati tra loro. Le trasformazioni vengono normalmente applicate individualmente ai singoli oggetti geometrici costituenti la figura, ma saranno automaticamente trasmesse (propagate) a tutti gli altri oggetti collegati da una costruzione, cosi' che l'intera figura risulterà trasformata.
Nell'esempio precedente, di costruzione dell'asse del segmento, quando se ne trasla un estremo l'intera figura si modifica in funzione della nuova posizione. Ma cosa succede se invece di traslare un estremo del segmento trasliamo il segmento intero o addirittura il suo asse? La trasformazione che otteniamo sarà quella che ci aspettiamo?
Prima di discutere le diverse trasformazioni possibili in un caso del genere, è neccessario distinguere, all'interno di una figura, tra oggetti primitivi e oggetti derivati. Gli oggetti primitivi, che possono essere solo punti, sono quelli direttamente istanziati dall'utente sul foglio da disegno "cliccando" liberamente su di esso. Essi, dunque, non sono creati come intersezione tra altri oggetti percio' sono privi di vincoli. Ogni altro oggetto disegnato, il quale quindi dipenderà direttamente o indirettamente dai punti primitivi, è detto oggetto derivato. Nella costruzione dell'asse del segmento, gli estremi A e B sono gli unici punti primitivi, mentre il segmento, i 2 cerchi e l'asse stesso sono tutti oggetti derivati.
Quando si applica una trasformazione geometrica ad un qualunque oggetto, normalmente esistono molteplici configurazioni che soddisfano sia la nuova posizione dell'oggetto trasformato sia i vincoli geometrici imposti. Per esempio quando trasliamo un estremo del segmento, perchè l'intera figura non trasla rigidamente? Di fronte a questa ambiguità il sistema deve compiere una scelta che, nel caso di oggetti primitivi, corrisponde a ridisegnare l'intera figura a partire dalla nuova posizione degli oggetti primitivi (il sistema quindi scarta la traslazione rigida dell'intera figura). Nel caso di oggetti derivati l'azione di default scelta dal sistema, è la traslazione rigida della figura. Tuttavia, l'utente puo' guidare il sistema ad applicare trasformazioni diverse, in particolare costruzion inverse.
Per ottenere entrambi i comportamenti su un'unica figura è neccessario sovrappore la costruzione di figura 7 a quella di figura 6. In altre parole, partendo dai punti A e B prima si genera il punto M come descritto in figura 6, poi a partire da A ed M si costruisce B' attraverso la costruzione di figura 7. Cosi' facendo, ovviamente, si genereranno punti doppi: B e B', i quali, anche se occupano fisicamente la stessa posizione, sono di fatto 2 entità distinte. Sta all'utente segnalare la coincidenza tra essi cosi' che il sistema possa trattarli in modo uniforme.
La costruzione di figura 7 potrà essere poi riprodotta simmetricamente per ottenere un nuovo punto A' (coincidente con A) a partire da B e da M, in modo da avere un comportamente completamente simmetrico.
Per meglio capire come sono fatte queste costruzioni, abbiamo definito un formalismo grafico: il GCG (Grafo Associato ad una costruzione Geometrica) [Evi94]. Si tratta di un grafo orientato bipartito, in cui i nodi circolari rappresentano oggetti geometrici, i nodi rettangolari rappresentano azioni (ovvero metodi di creazione o di interazione) e gli archi, che uniscono solo nodi di tipo diverso, definiscono per ogni azione quali sono i parametri e quali sono gli oggetti risultanti. In figura 9 è rappresentato il GCG associato alla costruzione del punto medio di un segmento, in figura 10 la costruzione inversa ed in figura 11 la costruzione completa per ottenere ogni tipo di trasformazione.
Ma vediamo ora tutte le possibili costruzioni che è possibile ottenere con la costruzione di figura 11:
Trasformazione su: Vincoli Effetto segmento traslazione rigida del segmento stesso A stiramento del segmento con B fisso B stiramento del segmento con A fisso M A ancorato A fisso, B è ricalcolato in funzione di A ed M M B ancorato B fisso, A è ricalcolato in funzione di B ed M A M ancorato B si sposta simmetricamente ad A rispetto ad M B M ancorato A si sposta simmetricamente a B rispetto ad M
Ogni ulteriore vincolo di ancoraggio rende impossibile qualunque movimento.
Fig. 10 - GCG per la costruzione inversa del punto medio
Fig. 11 - GCG completo per la costruzione del punto medio di un segmento
Un noto teorema sui quadrilateri afferma che: dato un qualunque quadrilatero e collegati i punti medi dei suoi lati con segmenti, la figura risultante è un parallelogramma. La verifica di questo teorema richiederà la costruzione di un poligono di 4 lati e di calcolare su ognuno di essi il punto medio. Quindi si procede costruendo un secondo poligono avente per vertici i punti medi cosi' ottenuti. Appare evidente che, il secondo poligono è un parallelogramma e resterà tale anche in seguito a qualunque trasformazione sui vertici o sui lati dei poligoni. Per rendere più ampia la gamma di trasformazioni possibili, si puo' realizzare per ogni punto medio la costruzione inversa, come descritto nel paragrafo precedente.
Nell'ambito della geometria, molte figure sono definite come luogo geometrico dei punti del piano che soddisfano determinate condizioni. E' il caso per esempio dell'ellisse o dell'iperbole. GEObject consente anche di provare questo tipo di proprietà geometriche. Supponiamo per esempio di voler disegnare un ellisse, ovvero il luogo geometrico dei punti del piano la cui somma delle distanze da due punti fissi detti fuochi è costante. Definiamo, attraverso un segmento, la somma delle distanze dai fuochi. Dividiamo poi il segmento con un punto P, libero di muoversi sopra di esso (per fare questo è sufficiente ottenere P come intersezione tra il segmento ed una generica retta non parallela, in modo che traslando uno dei punti che definiscono la retta, il punto P si muove lungo il segmento). Il primo pezzo del segmento (AP) rappresenterà la distanza dei punti dell'ellisse dal primo fuoco, mentre il secondo pezzo (PB), rappresenterà la distanza dal secondo fuoco. Per trovare ora i punti dell'ellisse sarà sufficiente disegnare 2 circonferenze centrate nei 2 fuochi e con raggio pari rispettivamente al primo pezzo e al secondo pezzo del segmento. L'intersezione tra queste circonferenze saranno 2 punti dell'ellisse. Facendo variare il punto P lungo il segmento, le circonferenze cambieranno raggio e la loro intersezione genererà progressivamente tutti i punti dell'ellisse (figura 13). Modificando la posizione dei fuochi, la loro distanza e la lunghezza del segmento è possibile a livello teorico tracciare tutte le possibili ellissi. Inoltre è facile verificare cosa succede se la distanza tra i fuochi è maggiore della lunghezza del segmento.
Grazie al versatile algoritmo di trasformazione implementato in GEObject è possibile simulare, studiandone il comportamento in diverse configurazioni, molti di questi cinematismi. Nel seguito verranno presentati solo alcuni semplici esempi, ma sta alla fantasia dell'utilizzatore di GEObject costruire e animare qualunque cinematismo, purchè si apossibile desriverlo attraverso una costruzione geometrica.
Il primo esempio è quello della biella (si veda figura 14). Una biella è un meccanismo costituito da un disco nel quale è incernierato l'estremo (P1) di un'asta rigida (asta), avente l'altro estremo (P2) vincolato a scorrere all'interno di una guida rettilinea. In una biella reale, facendo ruotare il disco, il perno P1 trascina l'asta che rimane comunque vincolata nell'altro suo estremo, che è obbligato a seguire un movimento rettilineo. Viceversa, facendo scorrere P2 nella sua guida, l'asta rigida fa ruotare il disco della biella. Con tale meccanismo è possibile convertire un movimento circolare in uno rettilineo e viceversa.
Nella biella è dunque presente un movimento diretto (da P1 verso P2) e uno inverso (da P2 verso P1), di conseguenza il modello che dobbiamo realizzare con GEObject per simulare la biella, dovrà contenere una costruzione diretta ed una inversa. Partiamo dunque col descrivere la costruzione diretta (figura 15). Gli elementi invarianti del modello sono: la lunghezza dell'asta rigida, il disco della biella e la guida rettilinea. Si procederà quindi col disegnare un segmento (per definire la lunghezza dell'asta), un cerchio (il disco) ed una retta (la guida). Faremo inoltre in modo che la distanza tra qualunque punto sul cerchio e la retta sia inferiore alla lunghezza del segmento (in caso contrario ci sarebbero alcune configurazioni della biella che la porterebbero ad una "rottura").
Invece di fare ruotare il cerchio intorno al suo centro possiamo pensare di avere un punto vincolato a muoversi lungo la circonferenza. Per fare cio' è sufficiente tracciare una semiretta con origine nel centro del cerchio e passante per un punto qualsiasi (C) che sarà il nostro punto di controllo. Intersecando la semiretta con il cerchio si ottiene cosi' il punto P1 che rappresenta l'estremo dell'asta rigida, vincolato sulla circonferenza. Muovendo liberamente C, il punto P1 scorrerà sulla circonferenza. A questo punto è neccessario collegare a P1 l'asta rigida di lunghezza pari al segmento 1. Per fare cio' basta tracciare una circonferenza centrata in P1 e raggio pari al segmento 1. L'intersezione con la retta "guida" ci permetterà di ottenere il secondo estremo dell'asta rigida P2. E' evidente dalla costruzione che, muovendo liberamente il punto C, l'estremo P1 scorre lungo la circonferenza e P2 lungo la guida. La distanza tra P1 e P2 sarà sempre la stessa e precisamente pari alla lunghezza del segmento di riferimento. Abbiamo ottenuto il movimento diretto della biella. Passiamo ora a quello inverso.
Cio' che ci serve è di poter muovere il punto P2 lungo la guida. Tuttavia P2 è un oggetto derivato quindi, per quanto detto in precedenza, ogni suo movimento provocherebbe la traslazione rigida dell'intera figura. Per rendere P2 mobile lungo la guida dobbiamo applicareuna costruzione inversa: si tracci una retta per P2 e per un qualunque punto non appartenente alla guida. Intersecando tale retta con la guida si ottiene un nuovo punto (diciamo P2') sovrapposto a P2. Imponendo a questi due punti la relazione di coincidenza comunichiamo al sistema di trattare P2 non come punto derivato ma come punto primitivo, per cui sarà possibile muoverlo liberamente lungo la guida. Ora dobbiamo far si che muovendo P2 anche l'asta rigida venga trascinata e di conseguenza anche P1 scorra lungo la circonferenza. Disegnamo dunque un nuovo cerchio centrato in P2' e raggio pari alla lunghezza dell'asta rigida (segment1). Intersechiamo tale cerchio con il disco della biella ottenendo cosi' due punti uno dei quali (P1') perfettamente sovrapposto a P1,e imponiamo anche ad essi la relazione di coincidenza .
Tutto sembra funzionare: sia muovendo il punto di controllo C sia muovendo P2, accade che P1 ruota lungo il disco della biella, P2 scorre lungo la guida e la loro distanza è fissa e pari alla lunghezza di segment1. Tuttavia vanno notate alcune cose: quando si muove P2 è vero che viene spostato P1' e quindi P1, ma non viene spostato C in quanto non esiste una costruzione inversa che permetta di calcolare C a partire dal centro della circonferenza e da P1'. Cio' porta ad una inconsistenza in quanto P1, per definizione, è dato dall'intersezione tra il cerchio e la semiretta passante per A e C. Per ovviare a questo è neccessario realizzare la seguente costruzione inversa: cerchio centrato in A e passante per C, semiretta con origine in A e passante per P1'; l'intersezione produrrà il punto C' che viene posto coincidente con C.
Il movimento di P2 lungo la guida deve restare entro un determinato intervallo altrimenti è impossibile che l'asta connetta rigidamente cerchio e guida: cio' equivale ad una rottura della biella. Affinchè il sistema controlli questa condizione, è sufficiente fissare un "vincolo di esistenza sul punto P1' " (metodo forced to exist per oggetti di tipo punto). In questo modo quando si tenta di spostare P2 oltre l'intervallo di ammissibilità, l'intersezione tra la parte circolare della biella e il cerchio centrato in P2' diviene vuota (P1' cessa di esistere); il sistema se ne accorge ed inibisce il movimento.
Un secondo cinematismo che vogliamo riportare è quello che simula il meccanismo di apertura e chiusura delle porte dell'ascensore (figura 16). Per motivi di brevità non descriveremo l'intera costruzione (che comunque è relativamente semplice non includendo costruzioni inverse). Daremo comunque alcune indicazioni su come è stata realizzata invitando il lettore a provarla direttamente.
Il funzionamento delle due porte è del tutto simmetrico, per cui ci limiteremo a descriverne solo la parte sinistra (guardando il disegno). Ci sono 3 aste rigide collegate in cascata tra loro con dei giunti mobili che ne permettono la rotazione dell'una rispetto altra. Esse sono: CA, CE (incernierata nel punto fisso P2) ed EG. In comune alle due porte esiste poi un'ulteriore asta AB vincolata a ruotare intorno al suo punto medio P1.
Il punto G è fisso sulla porta dell'ascensore. Facendo ruotare l'asta AB intorno al proprio centro, le porte si aprono e si chiudono. Provare per credere ...
Ogni entità geometrica fondamentale è stata astrattamente descritta da una classe Eiffel. E' stata dunque creata la classe GeoPoint, la classe GeoLine, la classe GeoHalfline e cosi' via. Per coerenza con la tassonomia della geometria euclidea si è fatta discendere la classe GeoHalfline dalla classe GeoLine, la GeoSegment dalla GeoHalfline, la classe GeoArc dalla classe GeoCircle ...
Ogni classe contiene una feature per ogni metodo di creazione ed una feature per ogni metodo di interazione specifico della classe, ereditando eventualmente altri metodi dalle classi antenate. In questo modo abbiamo potuto descrivere con rigore e coerenza tutte le entità geometriche con le loro proprietà.
Per permettere di definire entità geometriche "composte" ovvero costituite da più elementi semplici (come puo' essere per esempio un poligono che è costituito da n segmenti, o una spirale che è costituita da un certo numero di archi) è stata predefinita la classe GeoLink. Si tratta di una classe deferred (o astratta) che implementa certi metodi (come per esempio il metodo di intersezione) utilizzabili da qualunque classe discendente.
L'insieme di queste classi permette di definire coerentemente la geometria euclidea; esse sono strutturate in modo da garantirne l'estendibilità ad altre entità geometriche. Tuttavia le classi non sono sufficienti a descrivere una generica costruzione. Quest'ultima non è altro che un insieme di nodi (che possono essere oggetti geometrici o anche valori numerici (detti visori) come per esempio quelli usati in figura 12), connessi tra loro da legami che ne specificano la dipendenza costruttiva (corrispondono agli archi del GCG). Per rappresentare tali costruzioni è stata definita la classe deferred GeoNode. Ogni oggetto prodotto in una costruzione geometrica discende da GeoNode. Questa classe implementa variabili per definire vincoli tra i nodi (un array di antenati ed una lista di discendenti), variabili per definirne l'identità (il nome), ed introdce metodi la cui implementazione sarà specificata solo nelle classi discendenti (per esempio il metodo translate).
Ad un successivo livello di astrazione, possiamo riconoscere tra i nodi di una costruzione, delle entità geometriche oppure i cosiddetti visori. Le prime verranno astrattamente descritti dalla classe deferred GeometricObj, i secondi dalla classe GeoValue. In GeometricObj saranno dichiarati alcuni metodi (per esempio intersect, point on, ecc.) la cui implementazione sarà definita nelle classi discendenti che descrivono le entità geometriche vere e proprie. Tali classi rappresentano l'ultimo livello di astrazione delle nostre costruzioni geometriche. Esse discenderanno da GeometricObj o da qualche altra entità geometrica, ed implementeranno tutti i metodi introdotti nelle antenate (translate, intersect, ...) più i propri.
I discendenti della classe GeoValue saranno invece i differenti tipi di visori che è possibile avere, come per esempio il visore che riporta la lunghezza di un segmento, la misura di un angolo, ecc.
La gerarchia completa è riportata in figura 17. Per una descrizione più dettagliata si faccia riferimento a [Evi94].
In generale, una qualunque costruzione riga compasso, puo' essere ottenuta da
un insieme molto ristretto di strumenti; tuttavia puo' essere comodo avere
già predefiniti e pronti all'uso il maggior numero di strumenti (ovvero
di costruzioni) possibile, onde evitare di ripetere ogni volta una costruzione
complessa.
Si pensi per esempio alla costruzione del pentagono regolare (si veda figura
18). Tale costruzione è molto elaborata e, se l'utente deve ripeterla
più di una volta, rischia di commettere errori, senza contare la perdita
di tempo. Per questo motivo è data la possibilità di "insegnare"
al sistema la costruzione del pentagono, in modo da inserire la classe
pentagono tra quelle degli oggetti primitivi.
Esistono a tale scopo due editor: quello dei metodi di creazione, per definire
nuove classi di oggetti e nuovi metodi per disegnarli, e quello dei metodi di
interazione, per definire nuove operazioni sugli oggetti disegnati.
Supponiamo di voler definire la nuova classe dei pentagoni: una volta
realizzata la costruzione di figura 18, sarà sufficiente invocare
l'editor delle classi (menu EDIT, voce creation method),
quindi il sistema richiederà all'utente di selezionare il risultato
della costruzione (ovvero il pentagono) poi i parametri a partire dai quali
è stata realizzata (per esempio un lato o 2 vertici) ed infine
verrà richiesto (figura 19) il nome della nuova classe
(Pentagon), la classe di discendenza (Polygon) ed un nome per il
metodo di creazione.
A questo punto il sistema memorizzerà la costruzione ed inserirà
la nuova entità geometrica tra quelle preesistenti (figura 20).
Si noti che la nuova classe viene messa in discendenza con quella dei poligoni
dalla quale eredita tutti i metodi di interazione ovvero il comportamento. Per
disegnare un nuovo pentagono è ora sufficiente selezionare la voce
Pentagon nel menù delle classi e specificare i parametri
richiesti (2 vertici). Sui pentagoni cosi' disegnati sarà possibile
effettuare qualunque operazione applicabile ai poligoni, più
eventualmente altre che l'utente voglia definire.
Un analogo discorso vale per i metodi di creazione: l'utente puo' definirne di
nuovi per ciascuna delle classi esistenti a seconda di come è più
comodo per lui disegnare tali oggetti. Per esempio, un quadrato viene
normalmente costruito a partire da due vertici. Tuttavia, l'utente puo' avere
la neccessità di disegnarlo a partire dalla sua diagonale.
Realizzerà dunque un'appropriata costruzione, quindi invocherà
l'editor dei metodi di creazione specificando il nome del nuovo metodo (with
diagonal), poi il prototipo (cioè il quadrato) ed in ultimo i
parametri (la diagonale). Il sistema inserirà automaticamente il metodo
tra quelli già esistenti per il quadrato (figura 21).
Infine è possibile definire nuovi metodi di interazione. Si supponga di
aver bisogno di un metodo per tracciare la mediana di un generico triangolo. La
costruzione per realizzare cio' consiste nel calcolare il punto medio di uno
dei lati e di unirlo con il vertice opposto. Invocando poi l'editor dei metodi
di interazione (menu EDIT, voce interaction method) il sistema
richiederà il prototipo (cioè la mediana), i parametri
(cioè il triangolo) ed il nome del nuovo metodo; dopodichè lo
inserirà tra i metodi predefiniti della classe triangle. Ogni altra
classe discendente da Triangle (per esempio Equilateral)
erediterà automaticamente tale metodo.
Questa caratteristica di estendibilità di GEObject, che tra l'altro si
integra perfettamente con il carattere fortemente incrementale della geometria
euclidea, lo rende uno strumento estremamente versatile per lo studio di questa
disciplina. Si pensi per esempio alla possibilità di definire oggetti in
discendenza gerarchica (es. poligoni, triangoli, rettangoli e quadrati,
pentagoni, ...) e definire per essi nuovi metodi al fine di verificare
proprietà geometriche o teoremi, constatando la compatibilità
nell'applicazione di questi metodi tra le classi antenate e quelle discendenti.
O ancora, si pensi alla possibilità di definire figure geometriche
ricorsive, quali possono essere spirali, o addirittura i frattali (per esempio
la curva di Von Koch). Per tutte queste potenzialità rimandiamo alla
lettura di [Evi94].
Per ogni nuovo strumento definito dall'utente, il sistema genera
automaticamente il codice Eiffel, corrispondente ad una nuova classe o ad un
nuovo metodo per una delle classi già esistente. Essendo Eiffel un
linguaggio compilato, onde evitare l'attesa di una compilazione prima di poter
utilizzare il nuovo strumento, è stato implementato un interprete cosi'
da rendere immediatamente disponibili i nuovi strumenti definiti dall'utente.
Solo alla fine della sessione di lavoro il sistema verrà automaticamente
ricompilato al fine di includere il codice relativo ai nuovi metodi definiti.
Il tutto avviene in modo assolutamente trasparente per l'utente, e nessuna
differenza emerge tra i metodi predefiniti e quelli nuovi.
Questo sistema presenta grandi potenzialità qualora se ne estendano le
funzionalità al trattamento della geometria nello spazio
tridimensionale. Futuri sviluppi, infatti, puntano alla costruzione di un
modellatore geometrico tridimensionale basato sulle tecniche di modellazione
usate in GEObject 2D. Un'altra direzione di potenziamento del sistema consiste
nella animazione da applicare di modelli geometrici in 2 e 3 dimensioni. Il
sistema di animazione sarà poi in grado di simulare fenomeni fisici,
come collisioni tra oggetti, movimento di corpi, rigidi o deformabili,
sottoposti a forze ecc., il tutto partendo dall'idea di modellazione riga e
compasso introdotta con GEObject. A questi sviluppi collabora l'Institut
Gaspard Monge, Université de Marne la Vallée (Paris), con la
collaborazione del professor Didier Arquès.
Per provare direttamente GEObject:
[AM95] Alberti M.A., Marini D., "Knowledge Representation in a Learning
Environment for Euclidean Geometry", in: A.A. di Sessa, C. Hoyles and R. Noss
Ed's "Computers and Exploratory Learning", NATO ASI Series F, Vol. 146,
Springer Verlag, pp. 109-126 (1995).
Abstract.
[AEM95] Alberti M.A., Evi P., Marini D. "Modelling Geometric Objects with OBJSA Nets", 16th Internat. Conf. on Application and Theory of Petri Nets, Torino,
June 26-30 (1995)
[BDM88] E.Battiston, F.De Cindio, G.Mauri, "OBJSA nets: a class of
high level nets having objects as domains", Advances in Petri Nets 88,
G.Rozemberg (ed.), LNCS 340, pp. 20-43, Springer Verlag, 1988.
[Evi94] P.Evi, "Rappresentazione della conoscenza della geometria
euclidea mediante paradigma ad oggetti e reti di Petri", Tesi di Laurea in
Scienze dell'Informazione, Università degli Studi di Milano, A.A.
1993-94.
[FPR85] N.Fuller, P.Prusinkiewicz, G.Rambally, "L.E.G.O. - An interactive
computer graphics system for teaching geometry", Computer in Education,
Elsevier Science Publishers B.V., 1985, pp.359-364.
[Mey91] B.Meyer, "Eiffel: The Language", Interactive Software
Engineering Inc., TR-EI-17/RM Version 2.2.
[Nom89] T. Noma et al., "Constructive picture description with euclidean
geometry", The Visual Computer, vol.5, 1989, pp. 40-52.
[Wis90] P.Wisskirchen, "Object-Oriented Graphics. From GKS and PHIGS to
Object-Oriented Systems", Springer-Verlag, 1990.
Definizione di nuovi strumenti da parte dell'utente
In questa sezione presenteremo GEObject come sistema incrementale, ovvero
sistema in grado di accrescere progressivamente le proprie funzionalità.
Come descritto in precedenza, l'utente ha a disposizione tre strumenti
fondamentali per realizzare le costruzioni geometriche: entità
geometriche primitive, metodi di creazione e metodi di interazione.Conclusioni
Cio' che ha portato alla realizzazione di GEObject è stata da una parte
la ricerca di tecniche di modellazione che fossero il più intuitive
possibile senza richiedere all'utente un background elevato, dall'altra il
tentativo di creare un ambiente didattico la cui trasparenza e chiarezza
implementativa permettesse all'utilizzatore di apprendere la geometria euclidea
in modo diretto, ovvero sperimentando con esempi le congetture che poteva
formulare durante il proprio studio.Bibliografia
[ABM95] M.A.Alberti, E.Bastioli, D.Marini, "Towards Object-Oriented
Modelling of Euclidean Geometry", The Visual Computer, 11, pp. 378-389
(1995). Abstract.