Algorithmes de dessin 2D en infographie
Algorithmes de dessin 2D en infographie
Algorithmique de
base de l'Infographie
DESSIN DES Dessin 2D des objets de base
OBJETS
BASIQUES Algorithmes de tracé de segments
Segments
Cercles Algorithme de base pour beaucoup de traitements de
Ellipses l'Informatique Graphique:
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 2 of 31
Le programme GLUt
Exécutable GLUt
Trois impératifs:
4-connexité 8-Connexité
Le programme GLUt
Exécutable GLUt
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 3 of 31
Bons tracés
Mauvais tracés
Mauvais tracés
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 4 of 31
Le programme GLUt
Exécutable GLUt
y = a x + b avec a = et b = yi - a xi
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 5 of 31
Caractéristiques:
simplicité algorithmique
lenteur due à l'utilisation de réels, d'une division et de
multiplications
Algorithme incrémental en x et en y
incrémenté de 1.
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 6 of 31
Caractéristiques
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 7 of 31
for ( i = 1 ; i <= dx ; i++ ) {
x += xinc ;
cumul += dy ;
if (cumul >= dx) {
cumul -= dx ;
y += yinc ; }
allume_pixel(x,y) ; } }
else {
cumul = dy / 2 ;
for ( i = 1 ; i <= dy ; i++ ) {
y += yinc ;
cumul += dx ;
if ( cumul >= dy ) {
cumul -= dy ;
x += xinc ; }
allume_pixel(x,y) ; } }
}
Exemple d'exécution
-> dx = 15, dy = 9.
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 8 of 31
Le programme GLUt
Exécutable GLUt
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 9 of 31
Principes
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 10 of 31
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 11 of 31
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 12 of 31
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 13 of 31
-> dinit = 1 + r2 - r + - r2 = - r.
Implantation
void arcDeCercle(int r) {
int x,y,d ;
x = 0 ;
y = r ;
d = 1 - r ;
allume_pixel(x,y) ;
while ( y > x ) {
if ( d < 0 )
d += 2 * x + 3 ;
else {
d += 2 * (x - y) + 5 ;
y-- ; }
x++ ;
allume_pixel(x,y) ; }
}
Exemple d'exécution
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 14 of 31
Le programme GLUt
Exécutable GLUt
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 15 of 31
Le tracé d'ellipses
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 16 of 31
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 17 of 31
Le programme GLUt
Exécutable GLUt
Le clipping (découpage)
Définition
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 18 of 31
Le programme GLUt
Exécutable GLUt
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 19 of 31
Le programme GLUt
Exécutable GLUt
Dans tous les autres cas, on ne peut pas conclure avec certitude
(cas (4)).
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 20 of 31
Le programme GLUt
Exécutable GLUt
Principe de l'algorithme
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 21 of 31
Algorithme
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 22 of 31
Le remplissage 2D
Définition
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 23 of 31
Le programme GLUt
Exécutable GLUt
Suite gauche: B, A, F, E
Suite droite: B, C, D, E
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 24 of 31
Principe
Mise en œuvre
Cette liste indiquera quels sont les cotés ayant une intersection
avec la trame en cours de traitement.
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 26 of 31
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 27 of 31
Algorithme
Procedure remplir_polygone(p:polygone) ;
début
créer la structure SI
initialiser la structure LCA à vide
pour chaque trame intersectant
le polygone
début
gérer les entrées dans LCA à partir
de SI
gérer les sorties de LCA à partir
des informations contenues dans SI
afficher tous les morceaux de trames
décrits dans LCA
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 28 of 31
fin
fin
Définition
Un premier algorithme
Principe
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 29 of 31
int c,int lim) {
cp = getpixel(x,y) ;
if ( ( cp != lim ) && ( cp != c ) ) {
putpixel(x,y,c) ;
remplissage(x,y+1,c,lim) ;
remplissage(x,y-1,c,lim) ;
remplissage(x+1,y,c,lim) ;
remplissage(x-1,y,c,lim) ; }
}
Un deuxième algorithme
Principe
A chaque itération:
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 30 of 31
...
[Link] 15/08/2009
Algorithmique de base de l'Infographie Page 31 of 31
[Link]-- ;
x = xf ;
while ( x >= xi ) {
cp = getpixel(x,y+1) ;
while ( ((cp == lim) || (cp == c))
&& (x >= xi) ){
x-- ;
cp = getpixel(x,y+1) ; }
if ( (x >= xi) && (cp != lim)
&& (cp != c) ) {
p.x[[Link]] = x ;
p.y[[Link]] = y+1 ;
[Link]++ ; }
cp = getpixel(x,y+1) ;
while ( ( cp != lim )
&& ( x >= xi ) ) {
x-- ;
cp = getpixel(x,y+1) ; } }
x = xf ;
while ( x >= xi ) {
cp = getpixel(x,y-1) ;
while ( ((cp == lim) || (cp == c))
&& (x >= xi) ){
x-- ;
cp = getpixel(x,y-1) ; }
if ( (x >= xi)
&& (cp != lim)
&& (cp != c) ) {
p.x[[Link]] = x ;
p.y[[Link]] = y-1 ;
[Link]++ ; }
cp = getpixel(x,y-1) ;
while ( ( cp != lim )
&& ( x >= xi ) ) {
x-- ;
cp = getpixel(x,y-1) ; } } }
free(p.x) ;
free(p.y) ;
}
[Link] 15/08/2009