Sie sind auf Seite 1von 44

Remplissage Classication 2D

Algorithmes fondamentaux 2D
Christian Nguyen
Dpartement dinformatique e Universit de Toulon et du Var e

3 novembre 2009

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Introduction

Lorsquune primitive graphique doit tre ache, elle subit un e e certain nombre de transformations :
1 2 3 4

elle est fentre, e e elle est projete, e elle est discrtise, e e elle est colorie. e

A chaque fois quune image est cre ou modie, ces algorithmes ee e sont invoqus. Ils doivent donc tre particuli`rement ecaces. e e e

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Introduction
Objets manipuls e

On se limite aux polygones. En eet, dans lespace discret tout objet peut tre approxim par un polygone. e e Celui-ci sera dni par la suite des sommets qui le caractrisent, e e suivant un sens de parcours trigonomtrique ou horaire. Ce sens de e parcours permet dorienter la fronti`re du polygone. e An de pouvoir distinguer intrieur et extrieur dun polygone, il e e faut prciser le type de connexit : d ou i. e e

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Plan

Remplissage

Classication 2D

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Remplissage
Dans lespace discret

Zone dnie par un ensemble de pixels. e Ces pixels dnissent soit une surface (coloriage), soit un contour e ferm (remplissage). e Coloriage : pixel initial (appel germe) appartenant ` la surface, e a puis application dun algorithme rcursif qui examine les 8 pixels e voisins, dtermine si la limite de zone est atteinte et applique la e couleur choisie (backtracking).

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Remplissage
Dans lespace discret

Remplissage : germe, exploration des voisins droites et gauches du germe an de parvenir au contour. Une fois la fronti`re G-D dtermine, trac dun segment e e e e horizontal et poursuite de lalgorithme pour tous les pixels situs e au dessus et en dessous de la ligne qui vient dtre trace. e e Le processus se termine lorsque tous les pixels examins sont situs e e sur le contour.

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Remplissage
Approche gomtrique e e

Travail dans lespace objet, polygones dcrits par leurs sommets. e Calculs gomtriques prenant en compte lespace discret dans e e lesquels les objets seront reprsents. e e Parcours du polygone par une ligne de balayage (scan-line) et calcul des intersections de cette ligne avec les artes du polygone e en arithmtique enti`re et incrmental grce ` la notion de e e e a a cohrence spatiale (dartes) et temporelle (de lignes). e e

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Remplissage
Approche gomtrique e e

Algorithme pour une ligne de balayage :


1

trouver les intersections de la ligne de balayage avec les artes e concernes, e trier les points dintersection par abscisses croissantes. Cas particuliers :
une intersection qui a des coordonnes non enti`res, on e e raisonne alors en fonction de la parit du nombre e dintersections une intersection qui a des coordonnes enti`res mais un e e sommet partag par deux artes, on ne prend en compte un e e sommet que lorsquil est le sommet bas dune arte, e arte horizontale auquel cas on ne prend pas en compte ses e sommets.

tracer une ligne de pixels entre chaque couple de points dintersection.


Christian Nguyen Algorithmes fondamentaux 2D

Remplissage Classication 2D

Remplissage
Cohrence darte e e

Amlioration sensible des calculs des points dintersection e ligne-arte. e Une partie des artes est concerne par ce calcul dintersection ` e e a chaque ligne de balayage et beaucoup dartes intersectes par la e e ligne de balayage ` ltape courante le seront encore ` ltape a e a e suivante. Le calcul dintersection de la nouvelle ligne avec une arte peut se e rsumer par la formule : e 1 xi +1 = xi + , yi +1 = yi + 1 p Pour viter les calculs fractionnaires on conserve lexpression de la e pente sous la forme (y , x) et on les compare pour savoir quand et comment changer dabscisse.
Christian Nguyen Algorithmes fondamentaux 2D

Remplissage Classication 2D

Remplissage
Cohrence de ligne de balayage e

Utilisation dune table des artes actives (TAA), liste dartes, e e tries par abscisses dintersection croissantes et modie en e e fonction de la ligne de balayage : si y = ymax alors larte est enleve e e si y = ymin 1 alors larte est ajoute e e Chaque lment de cette liste sera de la forme : ee xinter ymax pente (N, D) suivant

Mise ` jour ecace avec une table des artes (TA), dont les a e lments sont tris par ymin croissante (sans les artes ee e e horizontales) : ymin xmin ymax pente (N, D) suivant

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Remplissage
Cohrence de ligne de balayage e
1 7 D(13,11) F(2,9) 3 2 E(7,7) 5 C(13,5) A(2,3) B(7,1) 7 7 EF 9 -5/2 7 ED 11 3/2 CD 13 11 8 AF 9 8 AB 3 -2/5 7 BC 5 3/2

Fig.: Un polygone et sa TA
Christian Nguyen Algorithmes fondamentaux 2D

Remplissage Classication 2D

Remplissage
Algorithme

Algorithme Remplissage Geometrique(pol ) donnes e pol : polygone variables TA, TAA : listes dartes e y, Ymax : entiers ajout : boolen e

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Remplissage
Remplissage par motif

On distingue deux mthodes : e pendant la discrtisation par balayage : dans lespace rel par e e rapport ` la primitive graphique ou dans lespace cran auquel a e cas la primitive joue le rle de rgion transparente laissant o e appara le motif, tre avant la discrtisation par balayage : dnition dun masque e e rectangulaire associe ` la primitive (0 pour la primitive, 1 e a pour le reste), oprateur ET pour le masque puis oprateur OU e e pour la primitive.

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Plan

Remplissage

Classication 2D

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Classication 2D
Classication point/droite

Soient P1(x1 , y1 , h1 ) et P2(x2 , y2 , h2 ). Une droite passant par ces deux points est donne par : e x x1 x2 : det(P, P1 , P2 ) = y y1 y2 = 0 h h1 h2 x(y1 h2 h1 y2 ) + y (h1 x2 h2 x1 ) + h(x1 y2 y1 x2 ) = 0

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Classication 2D
Classication point/droite

P P2

+
P1

Un point sera ` gauche (resp. ` droite) dun segment orient a a e joignant deux points P1 et P2 ssi det(P, P1 , P2 ) > 0 (resp. det(P, P1 , P2 ) < 0). Un point appartiendra au contour si det(P, P1 , P2 ) = 0.

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Classication 2D
Classication point/contour

Dans le cas des polygones convexes, on se ram`ne ` une e a classication point/droite. P est ` lintrieur (resp. ` lextrieur) du polygone si i (resp. i ), a e a e det(P, P1 , P2 ) > 0 (resp. det(P, P1 , P2 ) < 0).
Si+1

Si

+
P

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Classication 2D
Algorithme

Algorithme ClassicationPointPolygone(pt, poly) donnes e pt : point poly : polygone oriente variables continuer : booleen i : entier pos : reel

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Classication 2D
Lalgorithme de Shamos

Classement dun grand nombre de points par rapport ` un mme a e contour. Complexit est en O(log n) mais avec un prtraitement en e e O(n) qui consiste ` dcomposer le polygone en secteurs a e angulaires :
S2 S3 2 1 q Si P Si+1 S1 axe de rfrence

Calcul de langle = S1 qP puis recherche dichotomique du secteur auquel appartient P. Soit (Si , Si +1 ) larte de ce secteur, il e ne reste plus qu` classer P par rapport ` cette arte. a a e
Christian Nguyen Algorithmes fondamentaux 2D

Remplissage Classication 2D

Classication 2D
Point/polygone concave

Lalgorithme des angles capables permet de dterminer la e position dun point sauf si celui-ci appartient au contour. Calcul de tous les angles i = Si PSi +1 et de leur somme. Si N a e i =1 i 2 alors P se situe ` lintrieur du polygone sinon si N a e i =1 i 0 alors P est ` lextrieur. Coteux du fait de lutilisation de fonctions trigonomtriques. u e

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Polygones concaves
Algorithme des angles capables

Algorithme ClassicationPointPolygone(pt, poly) donnes e pt : point poly : polygone oriente variables i : entiers : reel constantes PRECISION = 1.0e-1 i 0 tantque (i < poly.nb som) faire + CalculAngle(pt, poly.pt[i], poly.pt[(i+1)%poly.nb som]) i i+1 ftq si (PRECISION < < PRECISION) alors retourner EXT sinon retourner INT fsi

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Classication 2D
Point/polygone concave

Autre solution : adapter lalgorithme scan-line. Calcul de la parit du nombre dintersections entre le point e considr et la table des artes. ee e Si ce nombre est pair alors le point est ` lextrieur sinon il est ` a e a lintrieur. e Cas particuliers (point appartenant ` la droite support dune arte, a e . . .) augmentant la complexit initiale, en O(n). e

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Classication 2D
Segment/segment

Mthode paramtrique naturelle et ecace. Soient deux segments e e de droites dnis par (A, B) et (C, D). Un point intersection de ces e deux segments sera solution du syst`me : e xA + t1 (xB xA ) = xC + t2 (xD xC ) yA + t1 (yB yA ) = yC + t2 (yD yC ) soit t1 (xB xA ) + t2 (xC xD ) = xC xA t1 (yB yA ) + t2 (yC yD ) = yC yA Le dterminant de ce syst`me (de Cramer) est : det = e e (xB xA )(yC yD ) (xC xD )(yB yA ).

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Classication 2D
Segment/segment
Algorithme Classication segment/segment(A, B, C , D) donnes e A, B, C , D : points variables det : rel e det (xB xA )(yC yD ) (xC xD )(yB yA ) si (det = 0) alors segments parall`les ou colinaires e e sinon t1 = ((xC xA )(yC yD ) (xC xD )(yC yA ))/det t2 = ((xB xA )(yC yA ) (xC xA )(yB yA ))/det si (t1 > 1 ou t1 < 0 ou t2 > 1 ou t2 < 0) alors pas dintersection sinon si (t1 = 0 (resp. t1 = 1)) alors intersection au point A (resp. B) sinon si (t2 = 0 (resp. t2 = 1)) alors intersection au point C (resp. D) sinon xi = xA + t1 (xB xA ) yi = yA + t1 (yB yA ) fsi fsi fsi fsi Christian Nguyen Algorithmes fondamentaux 2D

Remplissage Classication 2D

Classication 2D
Dun ensemble de segments

La classication dun ensemble de segments ncessite une mthode e e ecace. La mthode de Bentley et Ottmann recherche dans une famille e nie de segments, par balayage du plan, les paires qui se coupent. Toutes les insertions eectues dans lalgorithme se font par e abscisse ou ordonne croissante. e ` A noter cependant que cet algorithme est bien connu pour tre e tr`s sensible aux erreurs numriques. e e

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Classication 2D
Dun ensemble de segments

C B D E

lPtx = A0 , B0 , C0 , D0 , i2 , C1 , i3 , i4 , E0 , D1 , i1 , A1 , i5 , E1 , B1 lSeg = A, BA, BCA, DBCA, DCBA, DBA, BDA, BAD, EBAD, EBA, EAB, EB, BE, B
Christian Nguyen Algorithmes fondamentaux 2D

Remplissage Classication 2D

Classication dun ensemble de segments


Algorithme ClassicationEnsembleSegments(tseg) donnes e tseg : tableau des N segments variables lPtx : liste de points (associs a un type) e ` lSeg : liste de liste didenticateurs des segments x0 : couple (abscisse, type)

tris par ord. croissantes e

lPtx tri par abscisses croissantes des 2N sommets initialiser lSeg avec le 1er segment correspondant au 1er point de lPtx pt 1er point de lPtx tantque (non n(lPtx)) faire cas (type(pt)) de DEBUT : insrer dans lSeg par ord. croissante le segment de sommet pt e par intersections des segments de lSeg avec x = pt si (dans lSeg ce segment coupe ses voisins) alors insrer le(s) point(s) dintersection dans lPtx (par abs. croissantes) e fsi FIN : si (dans lSeg les voisins de ce segment se coupent) alors insrer le point dintersection dans lPtx (par abs. croissantes) e fsi enlever ce segment de lSeg INTERSECTION : changer les positions des segments concerns dans lSeg e e si (les segments nouvellement adjacents dans lSeg se coupent) alors insrer dans lPtx les points dintersection (par abs. croissantes) e fsi fcas Christian Nguyen Algorithmes fondamentaux 2D

Remplissage Classication 2D

Fentrage (clipping) e
De segments

Plusieurs cas se prsentent : e

Le fentrage des points extrmits rpondent au crit`re : e e e e e xmin x xmax ymin y ymax
Christian Nguyen Algorithmes fondamentaux 2D

Remplissage Classication 2D

Clipping
De segments

Rsolution dquations : comporte trop de calculs et de tests (test e e des points extrmits, intersection avec les 4 droites dnissant la e e e fentre, test dappartenance des points dintersection a la fentre, e ` e . . .). Fentrage de Cohen-Sutherland (1970) : bas sur la notion de e e contrle de rgions, test les points extrmits pour dterminer si o e e e e le segment peut tre accept, retrait ou rejet. e e e e Le plan de fentrage est divis en 9 rgions, chacune delles e e e comportant un code sur 4 bits, correspondant ` des ingalits a e e strictes et autorisant des tests dappartenance ecaces.

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Clipping
De segments

si les deux extrmits sont ` 0000 alors le segment est e e a totalement visible. si le ET logique appliqu aux deux points extrmits dun e e e segment est dirent de 0 alors le segment peut tre rejet. e e e sinon, on prend lun des sommets extrieur (il y en a au moins e un) et ` partir du premier bit rencontr ` 1, on dtermine le a ea e point dintersection avec un ct de la fentre. oe e on rit`re ainsi le processus jusqu` ce que les deux codes de e e a chacun des sommets soient ` 0000. a
Christian Nguyen Algorithmes fondamentaux 2D

Remplissage Classication 2D

Clipping
De segments

Algorithme FenSeg(seg, fen) donnes e seg : @segment fen : fenetre variables reg1, reg2 : entiers d : droite

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Clipping
De polygones

Lalgorithme de Sutherland-Hodgman (1974) consiste fondamentalement ` parcourir le polygone dans le sens a trigonomtrique. e
11 00 11 00 11 00 11 00 11 00 11 00 11 00 11 00 11 00 11 00

1111 0000 1111 0000 1111 0000 1111 0000 1111 0000 1111 0000

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Antialiasing (anticrnelage) e

Les algorithmes de gnration de tracs ont un probl`me commun : e e e e la cration de bords crnels. e e e Cet eet indsirable est d au passage du continu au discret : cest e u donc un probl`me dchantillonnage (traitement du signal). e e Les techniques misent en uvre pour rduire cet eet sont connus e sous le nom danticrnelage (antialiasing) et les primitives (ou les e images) produites en utilisant ces techniques sont dites anticrneles. e e

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Antialiasing
Augmentation de la rsolution e

Le nombre de crnelures est deux fois plus important mais les sauts e sont de taille deux fois moindre.

En multipliant par deux la rsolution horizontale et vertical dun e terminal, il est ncessaire de quadrupler le cot en mmoire, la e u e bande passante de la mmoire et le temps de discrtisation. e e

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Antialiasing
Full Scene Antialiasing

On calcule limage avec une dnition virtuelle plus leve que e e e celle du dispositif dachage, puis on moyenne les couleurs des pixels obtenus pour lachage dans une rsolution plus basse. e La discrtisation se fait ` une frquence suprieure, multiple de la e a e e frquence cible, cest le surchantillonnage. Une pondration est e e e ensuite eectue sur les chantillons ainsi obtenus : e e
n

p(x, y ) =
i =1

wi pi (x, y )

avec gnralement wi = 1/n (moyenne uniforme). e e

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Antialiasing
Full Scene Antialiasing

Application directe au cas n = 4 : on eectue quatre rendus successifs avec un lger dcalage spatial, puis on eectue un calcul e e de moyenne pour chaque pixel du buer daccumulation (` a rsolution suprieure). e e

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Antialiasing
Full Scene Antialiasing

Moyenne avec pondration (judicieuse) [Crow] : ` une rsolution e a e virtuelle triple, on utilise le ltre passe-bas bidimensionnel suivant : 1 2 1 2 4 2 1 2 1

Ainsi, des surfaces gales donnent une intensit dirente en e e e fonction de la distance entre le centre du pixel et la surface.

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Antialiasing
High Resolution Antialiasing

nVIDIA : surchantillonnage dont les chantillons inuencent e e plusieurs pixels. Cette mthode est plus conomique, car on ne e e prend en compte que deux chantillons en moyenne par pixel, et e meilleure que la mthode prcdente. e e e

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Antialiasing
Echantillonnage non pondr de surface ee

Un segment trac ` une largeur non nulle, variable le long de sa ea trajectoire (sauf horizontalement et verticalement). Dans lespace discret un segment est un rectangle (dune certaine largeur) recouvrant partiellement de nombreux pixels, ceux-ci contribuant pour un certain pourcentage. Du point de vue calculatoire, il est avantageux de considrer la e grille comme une succession de pixels juxtaposs. Lintensit e e attribue ` chaque pixel dpend du pourcentage de surface e a e rcouvert par le segment. e

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Antialiasing
Echantillonnage non pondr de surface ee

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Antialiasing
Echantillonnage pondr de surface ee

Plus une aire est pr`s du centre de la primitive, plus elle a une e contribution leve. e e Soit W (x, y ) une fonction de pondration, on calcule lintensit I e e dun pixel comme suit : I =
aire

W (x, y )dxdy

Rechercher lintgrale de cette fonction de pondration revient ` e e a chercher le volume dintersection dun cne avec le pixel. o

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Antialiasing
Echantillonnage pondr de surface ee

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Antialiasing
Prcalcul de Gupta-Sproull e e

Le calcul prcdent peut se ramener ` celui du calcul de la surface e e a dun cercle recouvert par une bande : table pr-calcule des valeurs e e dintensit en fonction de la distance. e Prise en compte des calculs de distance dans lalgorithme de Bresenham.

Christian Nguyen

Algorithmes fondamentaux 2D

Remplissage Classication 2D

Antialiasing
Prcalcul de Gupta-Sproull e e

Table de Gupta-Sproull pour 8 valeurs : Pondration e [0, 1/8] [1/8, 2/8] [2/8, 3/8] [3/8, 4/8] [4/8, 5/8] [5/8, 6/8] [6/8, 7/8] [7/8, 1] Pas 0 (noir) 1 2 3 4 5 6 7 (blanc) Distance [1.4, 2] [1.2, 1.4] [1.08, 1.2] [1, 1.08] [0.92, 1] [0.8, 0.92] [0.6, 0.8] [0, 0.6]

Christian Nguyen

Algorithmes fondamentaux 2D

Das könnte Ihnen auch gefallen