Algorithmique
Algorithmique
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:
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 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
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 3 of 31
Bons tracés
Mauvais tracés
Mauvais tracés
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 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
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 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.
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 6 of 31
Caractéristiques
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 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.
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 8 of 31
Le programme GLUt
Exécutable GLUt
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 9 of 31
Principes
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 10 of 31
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 11 of 31
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 12 of 31
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 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
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 14 of 31
Le programme GLUt
Exécutable GLUt
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 15 of 31
Le tracé d'ellipses
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 16 of 31
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 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
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 18 of 31
Le programme GLUt
Exécutable GLUt
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 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)).
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 20 of 31
Le programme GLUt
Exécutable GLUt
Principe de l'algorithme
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 21 of 31
Algorithme
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 22 of 31
Le remplissage 2D
Définition
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 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
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 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.
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 26 of 31
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 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
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 28 of 31
fin
fin
Définition
Un premier algorithme
Principe
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 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:
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 30 of 31
...
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009
Algorithmique de base de l'Infographie Page 31 of 31
p.sp-- ;
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[p.sp] = x ;
p.y[p.sp] = y+1 ;
p.sp++ ; }
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[p.sp] = x ;
p.y[p.sp] = y-1 ;
p.sp++ ; }
cp = getpixel(x,y-1) ;
while ( ( cp != lim )
&& ( x >= xi ) ) {
x-- ;
cp = getpixel(x,y-1) ; } } }
free(p.x) ;
free(p.y) ;
}
file://C:\Inetpub\Raphaello\Ig\Algorithme\Algorithmique.htm 15/08/2009