Algorithme de Bresenham Idée de l`algorithme Idée de l`algorithme

2004/2005 Licence Informatique L3 – F. Mallet A-1
Algorithme de Bresenham
Tracer un segment entre deux points (x1,y1) et (x2,y2)
Tracer un segment depuis (x1,y1) de largeur dx=x2-x1 et de
hauteur dy=y2-y1
On ne peut afficher que des points de coordonnée entière
L’écran est une matrice de pixels
L’algorithme de Bresenham affiche seulement les points
les plus proches de la droite.
2004/2005 Licence Informatique L3 – F. Mallet A-2
Idée de l’algorithme
On ne traite que les segments dont la pente est
inférieur à 45°
Dans les autres cas, on fait une symétrie
2 cas possibles:
Déplacement horizontal : pente < 1/2
Déplacement diagonal : pente >= 1/2
2004/2005 Licence Informatique L3 – F. Mallet A-3
Idée de l’algorithme
Déplacement horizontal
La pente est inférieure à 1/2 : dy/dx < 1/2
2*dy-dx < 0 (multiplication par 2 = décalage de bits)
Déplacement diagonal
La pente est supérieure à 1/2 : 2*dy – dx 0
Var = 2*dy-dx
Le retard par rapport à la droite de pente 1/2
Calcul du nouveau retard une fois le déplacement effectué
Algorithme incrémental dichotomique
2004/2005 Licence Informatique L3 – F. Mallet A-4
La pente est inférieure à 1/2
Déplacement horizontal : pente < 1/2
La pente est-elle inférieure ou supérieure à 1/4 ?
dy / dx < 1/4 ?
4*dy – dx < 0 ?
Si la pente est inférieure à 1/4,
On continue à l’horizontale
Sinon, on fait un déplacement en diagonale
Le calcul de var est incrémental
var = var + 2*dy
2004/2005 Licence Informatique L3 – F. Mallet A-5
La pente est supérieure à 1/2
Déplacement en diagonal : pente 1/2
La pente est-elle inférieure ou supérieure à 3/4 ?
dy / dx < 3/4 ?
4*dy – 3*dx < 0 ?
Si la pente est inférieure à 3/4,
On continue à l’horizontale
Sinon, on fait un déplacement en diagonale
Le calcul de var est incrémental
var = var + 2*dy – 2*dx
2004/2005 Licence Informatique L3 – F. Mallet A-6
Formulation
x = x1, y = y1
var = 2*dy - dx
Répète
Dessine(x, y)
x = x + 1
Si var < 0 alors
var = var + 2*dy
Sinon
y = y + 1
var = var + 2*dy – 2*dx
Tant que x!=x1
2004/2005 Licence Informatique L3 – F. Mallet A-7
Mise en œuvre : dx = 15, dy = 9
var = 2*9 – 15 = 3 (pente>1/2) diagonale
var = 3 + 18 – 30 = -9 (pente < 3/4) horizontale
var = -9 + 18 = 9 diagonale
var = 9 + 18 – 30 = -3 horizontale
var = -3 + 18 = 15 diagonale
var = 15 + 18 – 30 = 3 diagonale
Idem précédemment : -9, 9, -3, 15
1 / 2 100%