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