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

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