Modulo 3. Rappresentazione di solidi mediante forntiera e strutture dati collegate.



Documenti analoghi
Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Il controllo della visualizzazione

Capitolo 2. Operazione di limite

Introduzione al 3D con Autocad

Creare primitive solide

LEZIONI CON I PAD Docente scuola secondaria IC Moglia Carla Casareggio Classi seconde 2014/2015 Proprietà triangoli e quadrilateri con Sketchometry

ISTITUTO COMPRENSIVO MONTEGROTTO TERME SCUOLA PRIMARIA DISCIPLINA: MATEMATICA - CLASSE PRIMA OBIETTIVI DI APPRENDIMENTO

Librerie digitali. Video. Gestione di video. Caratteristiche dei video. Video. Metadati associati ai video. Metadati associati ai video

Database 1 biblioteca universitaria. Testo del quesito

Software per Helpdesk

SCHEDA M MOSAICI CLASSIFICARE CON LA SIMMETRIA

13. Campi vettoriali

Si sa che la via più breve tra due punti è la linea retta. Ma vi siete mai chiesti, Qual è la via più breve tra tre punti? o tra quattro punti?

Capitolo 13. Interrogare una base di dati

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

risulta (x) = 1 se x < 0.

Informatica per la comunicazione" - lezione 7 -

Capitolo 13: L offerta dell impresa e il surplus del produttore

Strutturazione logica dei dati: i file

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE

IL MIO PRIMO SITO NEWS USANDO GLI SCHEDARI

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

Appunti di: MICROSOFT EXCEL

Il calendario di Windows Vista

Database. Si ringrazia Marco Bertini per le slides

Lezione 9: Cambio di base

Tutorial 3DRoom. 3DRoom

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

I motori di ricerca. Che cosa sono. Stefania Marrara Corso di Sistemi Informativi

Cosa è un foglio elettronico

RILIEVO TRIDIMENSIONALE DEL «CONVENTO ROSSO», SOHAG (EGITTO)

ARCHIVI E DATABASE (prof. Ivaldi Giuliano)

Mac Application Manager 1.3 (SOLO PER TIGER)

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

S-TRAINER v.1.00 Esempio d uso

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Dispense di Informatica per l ITG Valadier

Analisi e diagramma di Pareto

FPf per Windows 3.1. Guida all uso

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Università di L Aquila Facoltà di Biotecnologie Agro-alimentari

Informatica 1 Lezione 1

LE FUNZIONI A DUE VARIABILI

APPENDICE LINEE GUIDA PER SPERIMENTAZIONE WEB

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

1. I database. La schermata di avvio di Access

Leggere un messaggio. Copyright 2009 Apogeo

4 3 4 = 4 x x x 10 0 aaa

Dimostrare alla Scuola media: dal perché al rigore spontaneamente

Raccomandazione del Parlamento europeo 18/12/2006 CLASSE PRIMA COMPETENZE ABILITÀ CONOSCENZE. Operare con i numeri

Dimensione di uno Spazio vettoriale

MODULO 5 Appunti ACCESS - Basi di dati

Veneto Lavoro via Ca' Marcello 67/b, Venezia-Mestre tel.: 041/

Osservazioni sulla continuità per le funzioni reali di variabile reale

TachyCAD 8.0 Anno 2010

Il database management system Access

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

Linguaggi di programmazione

Esercizio 1 Dato il gioco ({1, 2, 3}, v) con v funzione caratteristica tale che:

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

Guida alla costruzione di tavole con i database

Esercizi su. Funzioni

30 o. 60 o. assocubo.ggb. Disegno tecnico + costruzione cartellina. a cura di Manuela Menzaghi 1

TRASFORMAZIONI GEOMETRICHE NEL PIANO. Parte 1

Obiettivo Principale: Aiutare gli studenti a capire cos è la programmazione

Costruite un grafo che rappresenti la situazione del torneo (in modo che siano rappresentate le squadre e le partite). Che tipo di grafo ottenete?

NAVIGAORA HOTSPOT. Manuale utente per la configurazione

Registratori di Cassa

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL

Dispensa di database Access

Moto circolare uniforme

Trasformazioni Geometriche 1 Roberto Petroni, 2011

Manuale Helpdesk per utenti

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

Funzioni in C. Violetta Lonati

Dispensa DB Mercato del Lavoro

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme

ESAME DI STATO DI LICEO SCIENTIFICO CORSO SPERIMENTALE P.N.I. 2004

IL SISTEMA OPERATIVO

lo PERSONALIZZARE LA FINESTRA DI WORD 2000

CORSO ACCESS PARTE II. Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?)

ControlloCosti. Cubi OLAP. Controllo Costi Manuale Cubi

NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT.

I TUTORI. I tutori vanno creati la prima volta seguendo esclusivamente le procedure sotto descritte.

DISEGNO 3D IN AutoCad.

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

Pagina 1 di 10

Esercizio data base "Biblioteca"

FASCI DI RETTE. scrivere la retta in forma esplicita: 2y = 3x + 4 y = 3 2 x 2. scrivere l equazione del fascio di rette:

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

Rappresentazione di oggetti 3D

PointCloud 7.0 Anno 2011

Creare superfici. Le superfici. Informatica Grafica ][ Le superfici. Le superfici. Le superfici. Le superfici

ISTITUTO COMPRENSIVO BARBERINO MUGELLO

Introduzione alla teoria dei database relazionali. Come progettare un database

per immagini guida avanzata Uso delle tabelle e dei grafici Pivot Geometra Luigi Amato Guida Avanzata per immagini excel

Transcript:

Modulo 3. Rappresentazione di solidi mediante forntiera e strutture dati collegate. Nel precedente modulo abbiamo presentato le modalità di rappresentazione di un solido mediante enumerazione o mediante algoritmi decisionali/costruttivi. In questo modulo passiamo in rassegna il modello vincente che è alla base della maggior parte dei sistemi 3d diffusi oggi. Si tratta del metodo di rappresentazione mediante la frontiera: boundary representation, o brevemente B-rep. Secondo questo approccio visualizzare un modello 3d significa univocamente visualizzare la sua superficie (buccia). 2-manifold In grafica si sceglie di lavorare solo con superficie che siano 2-manifold. Una 2-manifold è una superficie bidimensionale tale che: preso comunque un punto su di essa è possibile scegliere una sferetta centrata nel punto la cui intersezione con la superficie si può deformare con continuità (senza strappi, tagli o auto-intersezioni) in un disco piano con al centro il punto. La superficie esterna della maggior parte degli oggetti fisici reali è, (almeno in prima approssimazione) una 2-manifold. Non è sempre così infatti la superficie esterna di un solido ideale costituito da due cubi che condividono un intero spigolo tra loroo un singolo vertice non è una 2-manifold. Come rappresentare la superficie? Soluzione universalmente adottata: una superficie sarà un mosaico di poligoni piani definiti tramite i loro vertici. Quali poligoni? In hardware non c è scelta: TRIANGOLI (semplicità=efficienza); In software: è comodo usare in certe operazioni quadrilateri, pentagoni eccetera. Tale scelta però alla fine prevede sempre al momento della resa sullo schermo la riconversione in triangoli. In pratica si può pensare ad un sistema grafico 3d come un software con due layer. Il layer più basso che parla con le librerie grafiche (nel caso di Blender con le librerie OpenGL) utilizza solo triangoli. Il layer superiore, che è quello visibile dall'utente e direttamente gestibile tramite la interfaccia invece offre maggiore flessibilità ed include poligoni arbitrari. Formula di Eulero-Poincarè Qualunque genere di poligoni si scelga gli elementi che descriveranno la superficie ai fini della computer grafica sono: i vertici, i lati (o spigoli) e le facce (o poligoni). La matematica ha da molto tempo trovato la relazione che lega il numero dei vertici, dei lati e delle facce alla cosiddetta topologia dell oggetto solido che si sta modellando. Vale infatti per solidi connessi e senza buchi la cui frontiera sia una 2-manifold la cosiddetta formula di Eulero-Poincarè: #vertici - #lati + #facce = 2 In realtà esiste una formula di Eulero-Poincarè più generale che include tutti i tipi di solidi: #vertici - #lati + #facce = 2(s h) Ove s è il numero di componenti connesse del solido e h il numero dei buchi nel solido. Attenzione: queste sono condizioni necessarie che una rappresentazione di un solido mediante poligoni dovrà avere ma non sono sufficienti: posso costruire collezioni di poligoni che soddisfino la equazione sopra senza definire alcun solido.

Problemi più pratici da risolvere se si vuole modellare con i poligoni. Resta da capire: i) come definire (con quali strumenti interattivi, con quali operazioni matematiche) i triangoli che compongono l oggetto ii) come memorizzarli in RAM (al momento della elaborazione e utilizzo dei modelli) iii) come memorizzarli in memoria di massa. iv) è inoltre indispensabile avere una modalità rapida di visualizzazione che sacrifichi la qualità per la immediatezza e la interattività. Al punto i) si risponde in moltissimi modi diversi. Tutto il software comune adotta la seguente filosofia: offrire e combinare tra loro le seguenti operazioni: a) la creazione di modelli base predefiniti, o configurabili in base ad alcuni semplici parametri. Successivamente si interviene su tali modelli mesh con operazioni globali (scala, traslazione) o con operazioni locali (spostare vertici della mesh, eliminare vertici, aggiungere vertici e lati, estrudere facce, lati, vertici eccetera). b) La creazione di oggetto complessi mediante operazioni semplici: solidi di rotazione a partire da profili, solidi estrusi in 3d a partire dalla loro silouette 3d. c) La definizione di superficie che appaiono curve e non piatte definendo alcuni punti di controllo. Curve e superficie di Bezier, spline e variazioni raffinate sul tema. d) L uso (anche se non esclusivo) della cosiddetta solid constructive geometry che definisce gli oggetti come primitive solide semplici (cubi, sfere, cilindri, coni, eccetera) e li combina con le operazioni di intersezione, unione, sottrazione eccetera (nelle versioni regolarizzate ). Questa modalità è molto intuitiva e si ritrova nei software più comuni ma presenta il problema che è difficile ottenere i triangoli finali a partire da questi modelli almeno nelle situazioni più complesse. Ovviamente la combinazione di questi strumenti pone numerosi problemi: ogni metodo usa una struttura dati a lui più conveniente e combinare metodi diversi implica una integrazione/trasformazione tra strutture dati diverse un bel problema di algoritmi! Il punto ii) è stato oggetto di molti studi e proposte. Il modello che ha vinto è ormai quello a lati alati (winged edges o la sua variazione degli half edges ). Raramente chi usa un software di modellazione si pone questo problema. Esso è però centrale per l informatico che deve disegnare e scrivere tali software! Il punto iii) è invece noto come problema dei formati 3d. Non possiamo trattare appieno, per mancanza di tempo, questo argomento. Tuttavia gli studenti possono avere una idea di un formato grafico estremamente comune: il formato obj leggendone la descrizione nella dispensa scaricabile dal sito del corso. Al punto iv) tipicamente si risponde visualizzando SOLO i vertici dei poligoni (puntini) e i lati dei poligoni stessi, come fossero fili di ferro ( wireframe ). Un modello visualizzato in questo modo assomiglia ad un cestino intessuto in vimini, una rete o in inglese mesh. Altre soluzioni sono ormai rese possibili dalla velocità dell hardware (visualizzazione solid o a ombreggiatura/colore costante su tutta la superficie del poligono eccetera). Come organizzare il DB dei punti/lati/facce di un modello I dati essenziali da memorizzare sono: a) i vertici e le loro coordinate nello spazio 3d di riferimento; b) le relazioni a due a due tra vertici (lati o spigoli);

c) le relazioni di gruppi di vertici che definiscono un poligono piano o faccia del solido; E però spesso utile conoscere: dato un vertice quali sono tutti i lati incidenti in esso; dato un lato, quali sono tutti lati con cui esso condivide un vertice; data una faccia, quali sono tutti i lati che compongono il suo perimetro; data una faccia, quali sono tutte la altre facce che condividono con essa un lato. Una particolare query è di enorme utilità: data una faccia conoscere le componenti del vettore che indica la direzione normale alla faccia nella direzione rivolta verso l esterno del solido. Tale informazione sulla normale è essenziale sia per decidere l ombreggiatura della faccia sia per comprendere se essa è visibile o meno dalla telecamera che ritrae una scena. Ottimizzare l occupazione di memoria e mantenere la possibilità di rispondere rapidamente a queste query è uno dei grandi problemi della modellazione. Per illustrare le idee seguenti la cosa migliore è partire da un esempio. Un semplice cubo di lato unitario con uno spigolo nella origine e con i lati allineati agli assi coordinati. Lo studente è invitato a costruire (carta e penna) analoghi DB di semplici solidi di sua scelta per verificare la comprensione delle strutture dati che andiamo a presentare di seguito. Un DB semplice ma poco utile TABELLA DEI VERTICI vertice x y z A 0 0 1 B 1 0 1 C 1 1 1 D 0 1 1 E 0 0 0 F 1 0 0 G 1 1 0 H 0 1 0 faccia vertici (in senso orario rispetto ad un omino che sia orientato come la normale alla faccia rivolta verso l esterno del solido) 1 A E F B 2 E H G F 3 H D C G 4 D A B C 5 E A D H 6 G C B F

lato parte da arriva a a A B b E F c H G d D C e E A f E H g H D h D A i B C l B F m F G n G C Questa prima strutturazione delle informazioni descrive le entità e le relazioni fondamentali ma rende poco agevoli le query di cui si parlava prima. Si osservi che la situazione non cambia di molto se invece di registrare i vertici che compongono il perimetro di ciascuna faccia registro i lati (percorrendoli in senso orario) La struttura winged edges (lati alati) Alcune semplici osservazioni: Se scegliamo in maniera arbitraria l ordinamento dei lati (ed è questo ciò che abbiamo fatto sopra) quando descriviamo il perimetro delle facce, in senso orario a partire da un lato arbitrario, ciascun lato verrà percorso due volte, cioè una volta per ciascuna faccia cui appartiene.una volta verrà percorso in senso concorde al suo orientamento ed un altra volta nel senso discorde al suo orientamento. Questa osservazione e l aggiunta di una piccola ridondanza di informazioni nel DB che andiamo a costruire permetterà di realizzare alcune delle query elencate prima in maniera naturale ed efficiente. Il nuovo DB sarà imperniato su una nuova tabella i cui record sono detti winged edges. Per comprendere meglio cosa è un winged edge guardiamo un ingrandimento di un lato tratto dal nostro modello geometrico e definiamo alcune importanti entità ad esso relative. b d b V_end Faccia 1 a c Faccia 2 V_start e Osserviamo il lato a. Chiamiamo V_start (VS) e V_end(VE) i vertici del lato (scelti in maniera arbitraria) Si osservi che una volta che siano stati fissati l orientamento del lato è fissato arbitrariamente di conseguenza. Le due facce incidenti in tale lato siano la 1 e la 2. Se ci orientiamo con la normale della faccia 1 e percorriamo i lati in senso orario il lato a verrà percorso in verso concorde al suo orientamento.

Se ci orientiamo con la normale della faccia 2 e percorriamo i lati in senso orario il lato a verrà percorso in verso discorde al suo orientamento. Chiameremo la faccia 1 ClockWiseFace o brevemente CWF del lato a e la faccia 2 CounterClockWiseFace o brevemente CCWF del lato a. Se ci muoviamo sulla faccia CWF, nel nostro caso la 1, il lato b è il NextClockWiseEdge (NCWE) di a. Similmente il lato d è il PreviousClockWiseEdge (PCWE) di a. Se ci muoviamo sulla faccia CCWF di a, il lato e è il NextCounterClockWiseEdge di a. (NCCWE). Similmente il lato c è il PreviousCounterClockWiseEdge di a (PCCWE). Si noti che gli altri eventuali lati incidenti in V_start o V_end non hanno importanza per noi. Possiamo dunque definire il record che memorizzerà il nostro lato e la sua geometria relativamente al solido di cui ci stiamo occupando: record winged edge Id. lato V start V end CWF CCWF PCWE NCWE PCCWE NCCWE Il nostro cubo genererà quindi una tabella con 12 record di tipo winged edge. Il Data base sarà completato: a) da una tabella per i vertici come nel caso precedente. A tale tabella sarà però aggiunta una colonna che conterrà l id di uno dei lati incidenti in tale vertice. b) da una tabella che elenca le facce del solido. Per ciascuna faccia verrà solo indicato uno dei lati che ne formano il perimetro. Si osservi che sebbene la tabella dei lati risulti adesso più complessa essa ha record di dimensioni fisse. Ma anche la tabella delle facce adesso ha record (piccoli) e di dimensione fissata. Nel rpecedente caso invece tale tabella aveva record di dimensioni variabili a seconda del numero dei suoi vertici (nel nostro esempio solo casualmente tale numero era 4 per ciascuna faccia). Si intuisce che questo è un enorme vantaggio per la implementazione. Il vantaggio è però anche nella esecuzione di alcune query. Per illustrarlo riporto di seguito le tabelle WingedEdegs, Vertici e Facce del nostro cubo: Tabella Winged Edges Id Vs Ve CWF CCWF PCWE NCWE PCCWE NCCWE a A B 4 1 h i l e b E F 1 2 e l m f c H G 2 3 f m n g d D C 3 4 g n i h e E A 5 1 f h a b f E H 2 5 b c g e g H D 3 5 c d h f h D A 4 5 d a e g i B C 4 6 a d n l l B F 6 1 i m b a m F G 6 2 l n c b n G C 6 3 m i d c (il prof. spera di non avere sbagliato qualche etichetta come si vede la compilazione di tabelle di questo tipo è un compito tipico da COMPUTER e non da UMANO)

Tabella estesa dei vertici vertice x y z Un lato incidente (scelto arbitrariamente) A 0 0 1 a B 1 0 1 a C 1 1 1 d D 0 1 1 d E 0 0 0 e F 1 0 0 m G 1 1 0 m H 0 1 0 f Nuova tabella delle facce Id faccia 1 a 2 b 3 c 4 d 5 e 6 n Un lato del perimetro della faccia scelto arbitrariamente Nella prossima pagina illustreremo al esecuzione di alcune query usando le tre tabelle riportate qui.

Query 1 trovare tutti i lati di una faccia. Proviamo a trovare i lati che formano il perimetro della faccia 6 Partiamo dalla tabella delle facce. Ne ricaviamo subito che il lato n fa parte di questa faccia. Nella tabella WE scopriamo che la faccia 6 è la CWF del lato n. Il lato della faccia 6 successivo ad n si trova dunque nella colonna NCWE ed è il lato i. Nella tabella WE al rigo del lato i leggiamo che la faccia 6 è la CCWF di i. Il lato sulla faccia 6 successivo a i è quindi indicato dalla colonna NCCWE ed è il lato l. Nella tabella WE al rigo del lato l leggiamo che la faccia 6 è la CWF del alto l. Il lato sulla faccia 6 successivo ad l è quindi scritto nella colonna NCWE del rigo l. Esso è il lato m. Nella tabella WE al rigo del lato m leggiamo che la faccia 6 è la CWF del lato m. Il lato sulla faccia 6 successivo ad m è quindi scritto nella colonna NCWE del rigo m. Esso è il lato n da cui eravamo partiti. Abbiamo dunque ricostruito la intera sequenza: n-i-l-m. Query 2 trovare tutti i vertici di una faccia. Si esegua la query 1 e man mano che si scorrono i lati si annotino i loro estremi (tenendo conto dell orientazione del lato). Giusto per scrivere la procedura noiosa che ne viene fuori: Partiamo dalla tabella delle facce. Ne ricaviamo subito che il lato n fa parte di questa faccia. Nella tabella WE scopriamo che la faccia 6 è la CWF del lato n. I vertici G e C sono quindi i primi due vertici della faccia 6 letti in senso orario rispetto alla normale della faccia 6. Il lato della faccia 6 successivo ad n si trova nella colonna NCWE ed è il lato i. Nella tabella WE al rigo del lato i leggiamo che la faccia 6 è la CCWF di i. I vertici C e B (attenzione all ordine) sono dunque i vertici successivi della faccia 6. Il lato sulla faccia 6 successivo a i è indicato dalla colonna NCCWE ed è il lato l. Nella tabella WE al rigo del lato l leggiamo che la faccia 6 è la CWF del alto l. I vertici B e F sono dunque i vertici successivi della faccia 6. Il lato sulla faccia 6 successivo ad l è scritto nella colonna NCWE del rigo l. Esso è il lato m. Nella tabella WE al rigo del lato m leggiamo che la faccia 6 è la CWF del lato m. I vertici F e G sono i due vertici successivi. Il lato sulla faccia 6 successivo ad m è quindi scritto nella colonna NCWE del rigo m. Esso è il lato n da cui eravamo partiti. Abbiamo dunque ricostruito la intera sequenza: n-i-l-m. dei lati e GCBF dei vertici. Query 3 trovare tutti i lati incidenti in un vertice. Cerchiamo tutti i lati incidenti nel vertice A. La tabella dei vertici ci dice che il lato a è incidente in A. La tabella WE alla riga del lato a ci informa che il vertice A è il vertice di partenza del lato a. Data la struttura dei winged edge il precedente lato incidente in A, girando in senso orario attorno ad A stesso è il lato nel campo PCWE cioè il lato h. La tabella WE alla riga del lato h ci informa che il vertice A è il vertice di arrivo del lato A. Data la struttura dei winged edge il precedente lato incidente in A, continuando a girare in senso orario attorno ad A stesso è il lato nel campo PCCWE cioè il lato e. La tabella WE alla riga del lato e ci informa che il vertice A è il vertice di arrivo del lato A. Data la struttura dei winged edge il precedente lato incidente in A, continuando a girare in senso orario attorno ad A stesso è il lato nel campo PCCWE cioè il lato a. Il cerchio si è chiuso.