1 / 57

Clipping

Clipping. Antonio Cisternino. Parte di queste slides sono a cura del Dott. Cignoni. Clipping. Il problema del clipping è genericamente risolvibile per qualunque superficie chiusa

terrel
Télécharger la présentation

Clipping

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Clipping Antonio Cisternino Parte di queste slides sono a cura del Dott. Cignoni

  2. Clipping • Il problema del clipping è genericamente risolvibile per qualunque superficie chiusa • A noi però interessa risolvere solo il problema di fare clipping su rettangoli, dato che le porzioni di schermo che l’applicazione gestisce sono rettangoli

  3. Clipping di un punto • Un punto si trova all’interno del rettangolo di clipping se sono soddisfatte le 4 disuguaglianze: Qualora una qualsiasi di queste disuguaglianze non valesse il punto è al di fuori del rettangolo di clipping

  4. Clipping di un segmento • Per fare il clipping di un segmento, si considera la posizione dei suoi punti estremi: • Se i due punti sono entrambi dentro, l’intero segmento lo è • Se un punto è dentro e uno fuori il segmento interseca il rettangolo e si deve calcolare l’intersezione • Se entrambi i punti sono fuori dal rettangolo il segmento può o non può intersecare il rettangolo e si devono fare altri calcoli per determinare se le intersezioni ci sono, e se ci sono dove sono

  5. Se i due punti sono entrambi dentro, l’intero segmento (AB) lo è Clipping di un segmento Per fare il clipping di un segmento, si considera la posizione dei suoi punti estremi: D F D B H C E H J A J G I G I

  6. Se un punto è dentro e uno fuori il segmento (CD) interseca il rettangolo e si deve calcolare l’intersezione (D’) Clipping di un segmento Per fare il clipping di un segmento, si considera la posizione dei suoi punti estremi: D F D B H C E H J A J G I G I

  7. Se entrambi i punti sono fuori dal rettangolo (EF, GH, IJ) il segmento può o non può intersecare il rettangolo e si devono fare altri calcoli per determinare se le intersezioni ci sono, e se ci sono dove sono Clipping di un segmento Per fare il clipping di un segmento, si considera la posizione dei suoi punti estremi: D F D B H C E H J A J G I G I

  8. L’approccio più diretto alla soluzione del problema sarebbe quello di fare il calcolo delle intersezioni tra la retta su cui giace il segmento e le 4 rette su cui giacciono i lati del rettangolo di clipping D F D B H C E H J A J G I G I Clipping di un segmento

  9. Una volta individuati i punti di intersezione verificare poi se essi appartengono effettivamente al segmento ed al lato (G e H) oppure no (I e J). D F D B H C E H J A J G I G I Clipping di un segmento

  10. Questo calcolo si può facilmente compiere utilizzando l’equazione parametrica della retta: D F D B H C E H J A J G I G I Clipping di un segmento

  11. Le rette si intersecano se, dopo aver risolto contemporaneamente i due insiemi di equazioni che descrivono il segmento ed il lato in tlato e tsegm i due valori rientrano entrambi nell’intervallo [0, 1] D F D B H C E H J A J G I G I Clipping di un segmento

  12. Si dovrebbe inoltre verificare in anticipo se per caso le linee sono parallele prima di calcolare l’intersezione Un algoritmo del genere funziona ma è costoso e quindi inefficiente D F D B H C E H J A J G I G I Clipping di un segmento

  13. Algoritmo di Cohen-Sutherland • L’algoritmo di clipping di Cohen-Sutherland si basa su un approccio completamente diverso • La considerazione di base che si fa è che le rette che delimitano il rettangolo che definisce la regione di clipping suddividono il piano in nove regioni

  14. La considerazione di base che si fa è che le rette che delimitano il rettangolo che definisce la regione di clipping suddividono il piano in nove regioni Algoritmo di Cohen-Sutherland

  15. Ad ogni regione viene associato un codice numerico di quattro cifre binarie Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  16. Il codice è formato da 4 bit, vero o falso: bit 1 sopra l’edge in alto y ymax bit 2 sotto l’edge in basso y ymin bit 3 a dx dell’edge di dx x xmax bit 4 a sx dell’edge di sx x xmin Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  17. Il codice è formato da 4 bit, vero o falso: bit 1 sopra l’edge in alto y ymax bit 2 sotto l’edge in basso y ymin bit 3 a dx dell’edge di dx x xmax bit 4 a sx dell’edge di sx x xmin Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  18. Il codice è formato da 4 bit, vero o falso: bit 1 sopra l’edge in alto y ymax bit 2 sotto l’edge in basso y ymin bit 3 a dx dell’edge di dx x xmax bit 4 a sx dell’edge di sx x xmin Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  19. Il codice è formato da 4 bit, vero o falso: bit 1 sopra l’edge in alto y ymax bit 2 sotto l’edge in basso y ymin bit 3 a dx dell’edge di dx x xmax bit 4 a sx dell’edge di sx x xmin Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  20. Il codice è formato da 4 bit, vero o falso: bit 1 sopra l’edge in alto y ymax bit 2 sotto l’edge in basso y ymin bit 3 a dx dell’edge di dx x xmax bit 4 a sx dell’edge di sx x xmin Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  21. Con queste premesse l’operazione di clipping si risolve con opportune codifiche e confronti tra codici numerici Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  22. Per fare il clipping di un segmento si codificano i suoi punti estremi sulla base della regione del piano a cui appartengono e poi si confrontano i due codici Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  23. Se il codice di entrambi i punti estremi è 0000, allora si può banalmente decidere che il segmento è interamente all’interno Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  24. Altrettanto banalmente si può decidere che un segmento è tutto all’esterno quando l’operazione di AND logico tra i codici dei due punti ha un risultato diverso da 0 1001 1010 = 1000 0001 0101 = 0001 0100  0100 = 0100 Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  25. In questo caso, infatti, entrambi i punti stanno in uno stesso semipiano (quello identificato dal bit a 1 del risultato) e quindi il segmento non interseca il rettangolo di clipping Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  26. Se il risultato dell’AND è invece 0000 Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  27. Se il risultato dell’AND è invece 0000 si cerca quale dei due punti estremi giace fuori dal rettangolo (almeno uno lo è) Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  28. Se il risultato dell’AND è invece 0000 si cerca quale dei due punti estremi giace fuori dal rettangolo (almeno uno lo è) si suddivide il segmento in due parti calcolando l’intersezione del segmento con i bordi del rettangolo Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  29. Se il risultato dell’AND è invece 0000 si cerca quale dei due punti estremi giace fuori dal rettangolo (almeno uno lo è) si suddivide il segmento in due parti calcolando l’intersezione del segmento con i bordi del rettangolo una si scarta (poiché giace fuori dal rettangolo) e si itera il procedimento Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  30. Se il risultato dell’AND è invece 0000 si cerca quale dei due punti estremi giace fuori dal rettangolo (almeno uno lo è) si suddivide il segmento in due parti calcolando l’intersezione del segmento con i bordi del rettangolo una si scarta (poiché giace fuori dal rettangolo) e si itera il procedimento Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  31. Se il risultato dell’AND è invece 0000 si cerca quale dei due punti estremi giace fuori dal rettangolo (almeno uno lo è) si suddivide il segmento in due parti calcolando l’intersezione del segmento con i bordi del rettangolo una si scarta (poiché giace fuori dal rettangolo) e si itera il procedimento Algoritmo di Cohen-Sutherland 1001 1000 1010 0001 0000 0010 0101 0100 0110

  32. L’algoritmo Liang-Barsky • L’algoritmo di Cohen-Sutherland può fare intersezioni a vuoto • Un altro algoritmo di Clipping è quello di Liang-Barsky • Questo algoritmo elabora un metodo ingegnoso per calcolare le intersezioni usando la forma parametrica dell’equazione della retta

  33. Le disuguaglianze • Se usiamo la forma parametrica nel test di appartenenza otteniamo: xmin≤ xa + (xb - xa)t ≤ xmax ymin≤ ya + (yb - ya)t ≤ ymax • I punti del segmento sono ottenuti per valori t[0, 1] • Poniamo: x = xb – xa y = yb – ya

  34. Le disuguaglianze • Riscriviamo le disuguaglianze nella forma: skt ≤ qk • Dove kè un indice da 0 a 3 che riferisce una delle quattro disuguaglianze • Abbiamo s1 = -x q1 = xa - xminxmin≤ xa + x t s2 = x q2 = xmax - xaxa + x t ≤ xmax s3 = -y q3 = ya - yminymin≤ ya + y t s4 = y q4 = ymax - yaya + y t ≤ ymax

  35. Osservazioni • Notiamo che l’intersezione tra il vincolo k e la retta su cui giace il segmento si ha quando skt= qk. • Inoltre analizzando sk e qk con il vincolo per t è possibile trovare criteri per evitarne il calcolo se non necessario • Per i vincoli 1 e 3 se ci muoviamo da A a B andiamo dall’interno verso l’esterno • Viceversa per i vincoli 2 e 4 in senso opposto

  36. Il test • Poniamo quindi: tk = qk/sk sk≠ 0 te = max(0, t1, t3) tu = min(1, t2, t4) • Se sk= 0 per qualche k allora siamo paralleli ad uno dei vincoli: testiamo quindi esplicitamente l’appartenenza • Se te > tuallora il segmento viene scartato • Altrimenti si calcolano x e y delle intersez.

  37. Clipping di poligoni

  38. Fare clipping di un poligono è un’operazione più complessa che farlo di un segmento dato che i casi da trattare sono vari e diversi tra loro Poligono convesso Clipping di poligoni

  39. Fare clipping di un poligono è un’operazione più complessa che farlo di un segmento dato che i casi da trattare sono vari e diversi tra loro Poligono concavo che clippato si divide Clipping di poligoni

  40. Fare clipping di un poligono è un’operazione più complessa che farlo di un segmento dato che i casi da trattare sono vari e diversi tra loro Poligono con molti spigoli esterni Clipping di poligoni

  41. L’approccio iniziale di soluzione potrebbe essere quello di confrontare ogni lato del poligono con le 4 rette che delimitano il rettangolo di clipping Clipping di poligoni

  42. Un approccio di questo tipo porta a compiere molte operazioni (costose quali i calcoli di intersezioni) di cui una gran parte possono essere inutili Clipping di poligoni

  43. Algoritmo diSutherland-Hodgman • L’idea alla base dell’algoritmo di Sutherland-Hodgman è applicare una strategia risolutiva del tipo divide et impera • Il problema viene così ricondotto a quello di calcolare il clipping di un poligono qualsiasi rispetto ad una retta

  44. L’applicazione, in successione, della procedura alle 4 rette che definiscono il rettangolo di clipping avrà come risultato il clipping del poligono sul rettangolo Clip a destra Clip in basso Clip a sinistra Clip in alto Algoritmo diSutherland-Hodgman Poligono originale

  45. Algoritmo diSutherland-Hodgman • L’algoritmo riceve in ingresso una serie di vertici v1, v2,,vn che definiscono n spigoli: gli n1 da via vi+1 e quello da vn a v1 • Dopo aver fatto clipping su una retta ritorna in output un’altra serie di vertici che definiscono il poligono clippato

  46. Algoritmo diSutherland-Hodgman • Il confronto si effettua scandendo il poligono in senso orario partendo dal vertice vn fino a v1 per poi tornare a vn • Per ogni passo si confronta la relazione esistente tra due vertici successivi e la retta di clipping • Per ogni caso i vertici indicati con verranno inseriti nella lista di output

  47. Le relazioni possono essere di 4 tipi: Spigolo tutto interno Algoritmo diSutherland-Hodgman Dentro Fuori s p Caso 1

  48. Le relazioni possono essere di 4 tipi: Spigolo tutto interno Spigolo uscente Algoritmo diSutherland-Hodgman Dentro Fuori s p i Caso 2

  49. Le relazioni possono essere di 4 tipi: Spigolo tutto interno Spigolo uscente Spigolo tutto esterno Algoritmo diSutherland-Hodgman Dentro Fuori p s Caso 3

  50. Le relazioni possono essere di 4 tipi: Spigolo tutto interno Spigolo uscente Spigolo tutto esterno Spigolo entrante Algoritmo diSutherland-Hodgman Dentro Fuori s i p Caso 4

More Related