Corso di Informatica grafica 1 Introduzione Quando si rappresentano modelli di oggetti 3D costituiti da facce poligonali secondo delle proiezioni alcune.

Slides:



Advertisements
Presentazioni simili
Algoritmi di ordinamento
Advertisements

INFORMATICA Algoritmi fondamentali
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Code con priorità Ordinamento
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Ordinamenti lineari.
Process synchronization
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Algoritmi e strutture Dati - Lezione 7
Il problema del dizionario
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 prove.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 prove generali.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Algoritmi e Strutture Dati III. Algoritmi di Ordinamento
Algoritmi di ordinamento
QuickSort Quick-Sort(A,s,d) IF s < d THEN q = Partiziona(A,s,d) Quick-Sort(A,s,q-1) Quick-Sort(A,q + 1,d)
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Fondamenti di Informatica1 Ripetizioni di segmenti di codice Spesso è necessario ripetere più volte uno stesso segmento dell'algoritmo (e.g. I/O, elaborazioni.
COMPLESSITÀ DEGLI ALGORITMI
1 Superfici nascoste Daniele Marini. 2 Ray casting adatto a CSG o superfici parametriche dipende dal punto di vista è una sorta di campionamento spaziale.
Smoothing Daniele Marini.
Infomatica Grafica a.a DICGIM – University of Palermo Dipartimento di Ingegneria Chimica, Gestionale, Informatica e Meccanica Environment Mapping.
Elementi di Informatica di base
Radix-Sort(A,d) // A[i] = cd...c2c1
Determinazione delle superfici visibili
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Heap Ordinamento e code di priorità Ugo de Liguoro.
La complessità media O(n log n) di Quick-Sort vale soltanto se tutte le permutazioni dell’array in ingresso sono ugualmente probabili. In molte applicazioni.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Daniele Marini, Maurizio Rossi
Daniele Marini Con contributi di Maurizio Rossi
1 Scan conversione di poligoni Daniele Marini. 2 Test interno-esterno Scan conversione di un poligono = decidere se pixel interno Test di intersezione:
Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica.
Superfici nascoste Daniele Marini.
Complessità di un algoritmo
1 Ottimizzazione della scena: culling (decimazione) Daniele Marini.
Corso di Programmazione Grafica e Laboratorio Daniele Marini
Architettura di OGL e pipe-line Daniele Marini Davide Gadia Davide Selmo Corso Di Programmazione Grafica aa2005/2006.
Ottimizzazione della scena: culling (decimazione) Daniele Marini.
Ottimizzazione della scena: culling (decimazione) Daniele Marini Corso di Programmazione Grafica per il Tempo Reale.
Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile mediante un algoritmo.
Algoritmi di Ordinamento
Algoritmi CHE COS’è UN ALGORITMO di ORDINAMENTO?
Definizione di un algoritmo
ALGORITMI Un algoritmo è un insieme di istruzioni: -ordinate -non ambigue -effettivamente computabili.
ALGORITMO Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un formalismo che permette di rappresentare.
GLI ALGORITMI VISIBILE SUL BLOG INFORMATICA ANNO SCOLASTICO 2013 / 2014 GABRIELE SCARICA 2°T.
Definizione di algoritmo: Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile.
Soluzione 6: Algoritmo Quicksort
Ordinamento in tempo lineare Il limite inferiore Ω(n log n) vale per tutti gli algoritmi di ordinamento generali, ossia per algoritmi che non fanno alcuna.
Algoritmi e Strutture Dati
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Algoritmi e strutture Dati - Lezione 7 1 Algoritmi di ordinamento ottimali L’algoritmo Merge-Sort ha complessità O(n log(n))  Algoritmo di ordinamento.
Esercitazione sull’ ordinamento 20 maggio 2003
Flusso di Costo Minimo Applicazione di algoritmi: Cammini Minimi Successivi (SSP) Esercizio 1 Sia data la seguente rete di flusso, in cui i valori riportati.
Problema dell’Ordinamento. Problema dell’ordinamento Formulazione del problema –Si vuole ordinare una lista di elementi secondo una data proprietà P Esempio:
GLI ALGORITMI DI ORDINAMENTO
L’ALGORITMO Un algoritmo è un procedimento formale che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile mediante.
6/11/01Ordinamento 1 Un esempio di algoritmi: ordinamento.
Transcript della presentazione:

Corso di Informatica grafica 1 Introduzione Quando si rappresentano modelli di oggetti 3D costituiti da facce poligonali secondo delle proiezioni alcune delle facce non sono visibili. Bisogna mostrare sul piano di proiezione solamente le facce visibili. Esistono diverse strategie per: z determinare quali facce sono visibili z rimuovere le superfici nascoste

Corso di Informatica grafica 2 Back face culling Molti oggetti sono tali che il loro volume è racchiuso da superfici (es. cubo). Quando guardiamo questi oggetti possiamo vedere solo le facce che stanno di fronte a noi, ma non quelle dietro. Quando i poliedri sono convessi è possibile applicare la tecnica di back face culling per determinare le superfici visibili. Nel caso di poliedri concavi viene comunque impiegata, anche se non elimina completamente tutte le facce nascoste.

Corso di Informatica grafica 3 Back face culling (2) Questa tecnica utilizza il concetto di vettore normale alla superficie. Un poligono è visibile se la normale alla superficie rispetto al vettore che va dallosservatore al punto del piano è inferiore a 90°.

Corso di Informatica grafica 4 Back face culling (3) Per calcolare la normale alla superficie basta considerare due lati consecutivi del poligono, in ordine antiorario (per convenzione), e calcolarne il prodotto vettoriale:

Corso di Informatica grafica 5 Back face culling (4) Occorre quindi effettuare il prodotto scalare tra questa normale ed il vettore che va dallosservatore al punto della faccia. Se il prodotto scalare è negativo la faccia è visibile. Assumendo di aver già compiuto la proiezione prospettica il prodotto scalare si riduce a selezionare il poligono facendo semplicemente un test sulla coordinata z della normale alla superficie: se è negativa la faccia è visibile.

Corso di Informatica grafica 6 Back face culling (5) Solitamente questa tecnica viene applicata prima di compiere eventuali clipping, in modo da ridurre il numero di poligoni da clippare. I vettori normali possono essere pre-computati per tutte le direzioni possibili della faccia (per tutte le rotazioni e scaling non uniformi 3D). Si noti che i vettori normali vengono utilizzati anche per lilluminazione della superficie.

Corso di Informatica grafica 7 Back to front sorting Il back face culling non è in grado di eliminare tutte le superfici nascoste se il poliedro è concavo: infatti, non individua eventuali sovrapposizioni tra poligoni. Lo stesso problema si verifica se il mondo contiene 2 o più poliedri (anche se convessi).

Corso di Informatica grafica 8 Back to front sorting (2) Una tecnica per risolvere questo problema consiste nello sfruttare le architetture frame buffer degli hardware grafici (matrice di memoria in cui si rappresenta il grafico). Ogni volta che un poligono nella scena può oscurare un altro poligono, è possibile rappresentare correttamente la scena disegnando (rasterizzando) le primitive in ordine inverso dalla più distante alla più vicina allosservatore, in modo da sovrascrivere gli oggetti più distanti. Questa tecnica è nota anche come algoritmo del pittore.

Corso di Informatica grafica 9 Back to front sorting (3) Per ottenere un algoritmo back-to-front basta applicare un algoritmo di sorting utilizzando un particolare criterio di comparazione. Il criterio più semplice effettua lordinamento rispetto alla massima coordinata z. Algoritmi di sorting: z Bubble-sort (complessità O(n 2 )) z Quick-sort (complessità O(n log n)) z Radix-sort (complessità O(n) lineare!! - richiede però più memoria!)

Corso di Informatica grafica 10 Ripasso algoritmi ORDINAMENTO PER SCAMBIO void ordinamentoScambio(int vett[], int dim) { int ordinato; int temp; ordinato = FALSO; while (!ordinato) { ordinato = VERO; for(int j = 0; j < dim-1; j++) if (vett[j] > vett[j+1]) { temp = vett[j]; vett[j] = vett[j+1]; vett[j+1] = temp; ordinato = FALSO; }

Corso di Informatica grafica 11 Ripasso algoritmi ORDINAMENTO PER INSERIMENTO void ordinamentoInserimento(int vett[], int dim) { int curr; for(int i = 1; i < dim; i++) { curr = vett[i]; int j = i; while ((j > 0) && (curr < vett[j-1])) { vett[j] = vett[j-1]; j--; } vett[j] = curr; }

Corso di Informatica grafica 12 Ripasso algoritmi ORDINAMENTO PER SELEZIONE void ordinamentoSelezione(int vett[], int dim) { int temp, posmin; for(int i = 0; i < dim-1; i++) { posmin = i; for(int j = i + 1; j < dim; j++) if (vett[j] < vett[posmin]) posmin = j; temp = vett[i]; vett[i] = vett[posmin]; vett[posmin] = temp; }

Corso di Informatica grafica 13 Ripasso algoritmi Quick sort: void quicksort (int left, int right, int array []) { int i = 0, j = 0, pivot = 0; i = left; j = right; pivot = array[(left + right) / 2]; do { while (array[i] < pivot) i++; while (pivot < array[j]) j--; if (i <= j) { swap (array[i], array[j]); i++; j--; } while (!(i > j)); if (left < j) quicksort(left, j, array); if (i < right) quicksort(i, right, array); }

Corso di Informatica grafica 14 Back to front sorting (4) Radix-sort Sfrutta il fatto che è molto facile ordinare un array di numeri che appartengono ad un range limitato di valori.

Corso di Informatica grafica 15 Back to front sorting (5) Con questo algoritmo vengono ordinate le radici (es. unità, decine, centinaia etc. in base 10), dalle meno significative (unità in base 10) alle più significative. Al primo passo si ordinano i numeri rispetto alla prima radice (ad es. le unità). Al secondo passo si ordinano i numeri ordinati al passo precedente rispetto alla seconda radice (ad es. le decine). E così via. Ad ogni passo occorre preservare lordine dei passi precedenti. Numero di iterazioni necessarie: numero dei dati x numero delle radici (costante per un insieme dato di numeri) --> complessità lineare

Corso di Informatica grafica 16 Back to front sorting (6) Questalgoritmo funziona molto bene per numeri in base 2 (il test può essere compiuto con un AND). Codice: // consideriamo numeri da 8 bit short data[]; short oneArray[numData], zeroArray[numData]; int numOnes, numZeros; int mask=1; //per calcolare lAND for (radix=0; radix<8; radix++){ numZeros=0; numOnes=0;

Corso di Informatica grafica 17 Back to front sorting (7) for (i=0; i<numData; i++){ if(data[i]&mask){ oneArray[numOnes]=data[i]; numOnes++; } else { zeroArray[numZeros]=data[i]; numZeros++; } memcpy(data,oneArray,numOnes); memcpy(data+(numOnes),zeroArray, numZeros); mask<<=1; }

Corso di Informatica grafica 18 Back to front sorting (8) Nota: memcpy(s,ct,n) copia n caratteri di ct in s e restituisce s Il criterio di scegliere la z massima non è corretto in generale:

Corso di Informatica grafica 19 Back to front sorting (9) Lordinamento basato sulla massima z oppure sulla z media è ammissibile quando i poligoni hanno la stessa dimensione, altrimenti è necessario applicare metodi di sorting più complessi. Ad es. nel seguente grafico o nel grafico precedente si può applicare la z media.

Corso di Informatica grafica 20 Back to front sorting (10) In questesempio però non funziona neppure la z media: Lalgoritmo del pittore, può essere ancora applicato.

Corso di Informatica grafica 21 Back to front sorting (11) Se invece si ha mutua sovrapposizione di poligoni lalgoritmo del pittore non si può più applicare. Non è possibile ordinare in nessun modo i poligoni.