I triangoli equilateri nella Geometria del Taxi 25 maggio 2006 Relazione progetto Matematica del discreto Enrico Brusati (702184) Yari Melzani (703242) Prof.ssa Laura Citrini A.A. 2005/2006 1 La geometria dei taxi Particolare tipo di geometria non euclidea, la cui creazione è dovuta a Minkowski. Il piano è una griglia, a maglie quadrate, rappresentanti le strade di una città ideale. In sostanza è come pensare di lavorare su un piano quadrettato, come un foglio da quaderno. Rispetto alla geometria euclidea cambia la definizione di distanza: se consideriamo due punti sul piano quadrettato la distanza non sarà quella “in linea d’aria” calcolata con l’usuale teorema di Pitagola, bensì, la distanza calcolata sulla strada, dal momento che il “taxi” si muove lungo le vie della città. Supponiamo di essere in uno spazio a due dimensioni, la distanza fra due punti assegnati P ≡ (x0 , y0 ) e Q ≡ (x1 , y1 ) si calcolerebbe usualmente come PQ = p (x0 − x1 )2 + (y0 − y1 )2 1 2 I TRIANGOLI EQUILATERI mentre, nella geometria dei taxi la distanza è calcolata nel seguente modo: P Q = |x0 − x1 | + |y0 − y1 | Se consideriamo v il vettore P Q si possono derivare le proprietà da quelle che valgono per la norma: 1. Positività: ||v|| > 0 se v 6= 0, ||v|| = 0 se e solo se v = 0 2. Omogeneità: ||kv|| = |k| ||v|| 3. Disuguaglianza triangolare: ||v + w|| ≤ ||v|| + ||w||, l’uguaglianza vale solo se (v = 0, w = 0, v = kw) Lo spazio sul quale si muove il “taxi” è di fatto un reticolo costituito da punti discreti che rappresentano gli incroci delle strade sulle quali il “taxi” si deve muovere per giungere a destinazione. La distanza che unisce due punti nella geometria del taxi, o equivalentemente la strada che il “taxi” deve percorrere è necessariamente un numero intero positivo. La geometria che stiamo considerando è discreta e definita sull’insieme numerico Z. 2 I triangoli equilateri Nel progetto ci siamo proposti di costruire dei triangoli equilateri partendo da due punti fissati dall’utente. Per determinare il terzo vertice del triangolo abbiamo utilizzato il metodo delle circonferenze, che consiste nel costruire due cerchi ognuno dei quali centrato in uno dei vertici scelti e raggio pari alla distanza tra gli stessi. I punti di intersezione tra le circonferenze sono i punti equidistanti dai due vertici di partenza. Nella geometria euclidea, se i due vertici non coincidono, le circonferenze hanno sempre esattamente due punti di intersezione. Nella geometria del taxi ne possono esistere più di due, ciò dipende da come vengono scelti i vertici di partenza. Dopo questa considerazione iniziale e dopo aver trovato i vertici del triangolo si è trattato di costruire i lati ottenuti congiungendo i vertici tra loro per ottenere infine tutti i possibili triangoli. Il numero dei triangoli che si possono costruire, dati tre vertici, se la lunghezza del lato è maggiore di 2, è maggiore di uno, questo è dovuto al fatto che i lati che congiungono due vertici, pur essendo della stessa lunghezza, non hanno necessariamente la stessa forma. I triangoli che vengono costruiti a partire dai vertici possono avere area differente, a questo proposito abbiamo focalizzato la nostra attenzione, sulla possibilità di catalogare tutti i triangoli costruiti, per poter stabilire quale è l’area massima e minima possibile. 2 2.1 La costruzione dei triangoli equilateri 2 I TRIANGOLI EQUILATERI Algorithm 1 Pseudocodice della funzione di ricerca della strada che congiunge due vertici void cammina(Passo passoCorrente) { if (distanzaArrivo == 0) { // SONO ARRIVATO! return; } strade = trovaPstradePossibili(); foreach (strada in strade) { strada.aggiornaStrada(); cammina(strada); } } 2.1 La costruzione dei triangoli equilateri Per costruire un triangolo equilatero è necessario conoscere i vertici che lo compongono; a questo punto può partire la costruzione di tutti i possibili lati che uniscono i vertici a due a due. Se per semplicità identifichiamo i vertici con A, B, C si tratterà di costruire il lato AB, BC ed infine CA. L’algoritmo implementato permette di costruire un lato per volta e di calcolare tutte le possibili strade del “taxi” che uniscono i due estremi del cammino. Ad ogni passo di computazione è necessario conoscere quel è il punto di destinazione e la direzione da prendere per raggiungerlo. E’ immediato verificare che, ad ogni passo di lunghezza è possibile considerare al massimo due strade possibili. Da questa considerazione ne deriva che il numero di strade è esponenziale nel numero dei passi: la base dell’esponente è chiaramente 2. Ad esempio, se la distanza AB misura k passi e ad ogni passo possiamo identificare 2 strade differenti, ne consegue che il numero totale di strade che il “taxi” può percorrere per arrivare a destinazione sono al più 2k . Ecco lo speudocodice utilizzato per la funzione che costruisce i lati del triangolo equilatero. Una volta costruite tutte le strade che uniscono il primo vertice A con il vertice B del triangolo, si tratta di richiamare la procedura cammina() per ogni strada trovata. Il punto di partenza sarà di volta in volta un punto di arrivo, appartenente ad una strada trovata, nella costruzione del lato precedente. Il procedimento si ripete nello stesso modo per costruire tutti i possibili lati che uniscono il terzo vertice al primo. La costrizione di tutti i possibili cammini, che uniscono i tre vertici del triangolo è equivalente a costruire un albero binario di profondità 3 k dove k è la lunghezza del lato. Dalla considerazione precedente sul numero di possibili strade ad ogni punto intermedio del percorso, il numero di foglie dell’albero binario, ossia il numero totale di strade è al più 23k . 3 3 L’APPLICAZIONE 3 L’applicazione La scelta del linguaggio di programmazione è ricaduta su Java. L’applicazione consiste in una java application eseguibile direttamente dall’interfaccia grafica di Windows in modo semplice. Ecco brevemente riassunti i passi per utilizzare il programma: 1. Per avviare l’applicazione GeoTa, cliccare sul’archivio GeoTa.jar oppure eseguire il comando java -jar GeoTa.jar 2. Selezionare 2 punti sulla Griglia, facendo attenzione che siano posti ad una distanza inferiore a 8. 3. Premere il Tasto ’Run’ per effettuare il calcolo di tutti i Triangoli. 4. Scorrere i Triangoli calcolati utilizzando i tasti ’<’ , ’>’ posti nel menù dell’applicazione. 5. Selezionare una voce della ’ComboBox’ del menù, per eseguire una classificazione dei Triangoli in base a : Area Minima, Area Massima e ai vari Punti C. 6. Terminata la simulazione corrente premere il tasto ’Reset’ per eseguire una nuova simulazione. Nella figura 1 si può vedere l’interfaccia grafica dell’applicazione con un triangolo precedentemente costruito. Il pannello alla destra indica quali sono i vertici del triangolo, l’area e perimetro del triangolo corrente nonché l’area massima e minima trovata considerando i 3 vertici. E’ possibile colorare l’area del triangolo, visualizzare una sovrapposizione colorata di tutti i triangoli facenti parte del gruppo di triangoli attivi (tutti, quelli di area massima, quelli di area minima, triangoli aventi un determinato punto C). In figura 2 è mostrato il contenuto della combo box che permette di selezionare un sottoinsieme di triangoli dall’insieme di tutti i quelli generati secondo un particolare criterio. 4 3 L’APPLICAZIONE Figura 1: screenshot dell’applicazione Figura 2: screenshot dell’applicazione 5