Algorithme de Bresenham (1)
Fiche élève 1S
Auteurs : J-MD, PL, RM
Voici, à gauche, l’image d’un segment produite par « scilab » et exportée dans le format « png », puis, à
droite, l’image d’une partie de ce segment obtenue à la suite de plusieurs grossissements (« zoom »).
Figure 1 Figure 2
C’est l’image de gauche que l’on voit mais si notre vision était parfaite, ce que l’on verrait ressemblerait à
l’image de droite. En effet, la machine se contente de « colorier » ou d’« allumer » des pixels (des carrés,
constituants de base de l’écran, en bleu sur la figure 2, si l’on a une imprimante couleur). Il y a donc deux
niveaux dans le problème de l’affichage d’un segment sur un écran d’ordinateur, le niveau du pixel et le
niveau usuel (quand il s’agit par exemple d’afficher un segment de plusieurs cm de longueur). Nous allons
étudier la solution qui est utilisée dans les ordinateurs actuels et est due à John Bresenham (1962). Elle
concerne le niveau du pixel. Il s’agit de l’un des premiers algorithmes de synthèse d’image.
Nous supposons donc que le plan est rapporté à un
repère orthonormé (O;
ı ,
ȷ)dont l’unité de lon-
gueur est la longueur du côté d’un pixel, soit 0.18
mm (pour fixer les idées, cela dépend de votre ins-
tallation). La disposition des pixels est indiquée sur
la figure 3. Les centres des pixels sont les points à
coordonnées entières (les nœuds du quadrillage). Les
côtés des pixels ont donc pour abscisse ou pour or-
donnée des nombres de la forme n+1
2ndésigne
un entier. Un pixel a, ici, été coloré en vert. Figure 3
Le cas particulier d’abord traité par Bresenham, qui conduira au cas général au moyen de quelques
transformations géométriques simples, est le suivant :
Représenter sur un écran d’ordinateur un segment [AB]en coloriant certains pixels, sachant que
- les points A(xA;yA)et B(xB;yB)sont à coordonnées entières telles que
xA< xB(1)
(ces points sont alignés sur les horizontales et les verticales de la figure 3),
- la pente ade la droite (AB)est un nombre réel tel que
06a61(2)
1
1 Description de l’algorithme de Bresenham
Les horizontales et verticales de la figure 3sont représentées en gras sur la figure 4.
Algorithme 1 : Algorithme de base de la méthode de Bresenham
Étape 1 : Coloriage du pixel de centre A;
Étape 2 : déplacement jusqu’à la verticale en gras immédiatement à droite, choix sur cette
verticale du centre de pixel Mle plus proche de l’intersection Pde la verticale et du segment [AB]
(quand il y a deux plus proches centres de pixel, on conviendra que Mest le plus bas), coloriage du
pixel de centre M;
Étape 3 : Itération de l’étape 2 jusqu’au coloriage du pixel de centre B.
1 - Démontrer que yayb.
2 - À titre d’exemple, reproduire la figure 4ci-dessous et appliquer l’algorithme de Bresenham en justifiant
chaque étape.
Figure 4
2 Choix des positions successives du point M
3 - Le critère du choix de Ma été indiqué à l’étape 2 de l’algorithme 1. Nous avons besoin de le transfor-
mer en vue de la programmation. En fait, le point Mchoisi peut se trouver au-dessous ou au-dessus du
segment [AB], ce qui donne deux cas de figure pour choisir la position suivante de M, notée M1:
Figure 5
(x+1,y)
(x,y)
MM1
PQ1
P1
Figure 6
(x+1,y)(x,y)
MM1
PQ1
P1
On rappelle que aest la pente du segment [AB]. Dans les deux cas de figure :
2
1. dire pourquoi il existe un réel etel que
MP =e
j.
2. dire pourquoi il existe un réel e1tel que
M1P1=e1
j.
3. démontrer que
M1P1= (e+a)
ȷ.
4. en déduire que e1=a+e.
4 - Expliquer pourquoi le critère de choix du point Mdécrit dans l’algorithme 1équivaut à la recherche
du pixel dont le centre est le plus proche de la droite (AB). On pourra s’appuyer sur le schéma suivant :
Figure 7
MM1
P
H
P1
H1
3 Algorithme de Bresenham
L’algorithme qui suit se trouve sous une forme programmable :
Algorithme 2 : Tracé d’un segment dans le plan pixellisé par la méthode de Bresenham
Entrées :
Saisir xA,yA,xB,yB, coordonnées entières respectives de Aet B
Condition de validité n˚1 : xA< xB
Sorties :
Graphe du segment [AB]
début
ayByA
xBxA
; Condition de validité n˚2 : 06a61
e0;
yyA;
pour xvariant de xAàxBfaire
Allumer le pixel de centre (x;y);
ee+a;
si e > 0.5alors
yy+ 1 ;
ee1;
fin
fin
5 - Vérifier qu’il est identique à l’algorithme 1.
6 - Vérifier que l’algorithme 2a bien été traduit ci-dessous en code scilab (fichier « Bresenham1.sci ») :
Listing 1 – source scilab
// Algorithme de base de Bresenham ( f i c h i e r fonction ).
// Entrées : xA , yA , xB , yB , coordonnées de A e t B e t a pe nte de [AB]
// (a=(yByA)/(xBxA ) ) .
3
// CONDITIONS DE VALIDI : xA , yA, xB e t yB sont des nombres e n t i e r s
// v é r i f i a n t xA < xB et 0 <= a <= 1.
// S o r t i e s : Xpix e t Ypix . Xpix e t Ypix s on t des m at ric es à 5 l i g n e s e t n
// colonnes (n ét ant l e nombre de p i x e l s u t i l i s é s ) . Xpix c on tie nt l e s
// a b s c i ss e s des sommets des p i x e l s ( une colonne par pix el , l e s p i x e l s sont
// d é c r i t s de l a gauche ve rs l a d r o i t e ) ; de même pour Ypix e t l e s ordonnées .
function [ Xpix , Ypix ] = bresenham1 (xA, yA, xB , yB , a ) ;
Xpix = [ ] ;
Ypix = [ ] ; // Les matrices Xpix e t Ypix ser ont remplies au f u r et à mesure .
y=yA;
e=0;
for x=xA: xB
X=[x1/2,x+1/2,x+1/2,x1/2,x 1/2] ; // a bsc iss es , p i x e l de cen tre ( x , y ) .
Y=[y1/2,y1/2,y+1/2 ,y+1/2,y 1/2] ; // ordonnées , p i x e l de centre ( x , y ) .
Xpix=[Xpix ,X ] ; // On a joute l a colonne X aux colonnes déjà st o c k é e s .
Ypix=[Ypix ,Y ] ; // On a joute l a colonne Y aux colonnes déjà st o c k é e s .
e=e+a ;
i f e >0.5 ,
y=y+1;
e=e 1;
end ;// Les i n é g a l i t é s 0.5 < e <= 0.5 sont constamment v é r i f i é e s .
end ;
endfunction
 
7 - Exécuter l’algorithme de Bresenham dans chacun des trois cas suivants, à l’aide du fichier « Af-
fichage1.sce » qui est le fichier précédent auquel on a ajouté les commandes de graphe, notamment la
commande de coloriage des pixels :
cas 1 : A(-5 ;-5), B(10 ;7),
cas 2 : A(-50 ;-50), B(100 ;70),
cas 3 : A(-500 ;-500), B(1000 ;700).
On pourra procéder de la manière suivante :
3avec l’éditeur de texte de « scilab », ouvrir les fichiers « Bresenham1.sci » et « Affichage1.sce »;
3charger le fichier-fonction dans « scilab » (Exécuter ? > Charger dans scilab),
3puis exécuter « Affichage1.sce » (Exécuter ? > Exécuter le fichier dans scilab).
8 - Quels commentaires peut-on faire concernant l’affichage du segment [AB] selon le couple de points pris
en entrée ?
4
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !