Section courante

A propos

Section administrative du site

Génération de ligne

L'algorithme de Bresenham est utilisé pour tracer une ligne entre deux points (X1,Y1) et (X2,Y2) sur une grille (écran) de manière entière, c'est-à-dire en utilisant uniquement des entiers, sans calculs à virgule flottante.

Il est très efficace pour :

Principe général

Une ligne peut avoir deux types de pente :

L'algorithme de Bresenham utilise une variable Delta (erreur) pour décider quand incrémenter l'autre coordonnée.

Variables principales :

Cas particulier : ligne horizontale

Si Y1 = Y2 :

SI Y2 = Y1 ALORS
   Afficher Ligne Horizontale (X1, Y1, X2), Couleur
FIN SI

C'est un cas simple : on peut dessiner tous les pixels de X1 à X2 à la même hauteur Y1.

Cas général : pente < 1 ou pente ≥ 1

Pente ≥ 1 (ligne plus verticale)

Condition :

SI Abs(X2 - X1) < Abs(Y2 - Y1) ALORS

On parcourt Y (axe principal) de Y1 à Y2.

On ajuste X uniquement quand l'erreur cumulative dépasse un seuil.

Étapes :

DeltaY ← Y2 - Y1
DeltaX ← Abs(X2 - X1)
Delta ← 2 × DeltaX - DeltaY
A_inc ← 2 × (DeltaX - DeltaY)
B_inc ← 2 × DeltaX

On parcourt Y, on ajuste X selon Delta :

J ← X1
Afficher Pixel(J, Y1), Couleur
BOUCLE POUR I ← Y1+1 JUSQU'A Y2
   SI Delta ≥ 0 ALORS
      J ← J + DirectionIncrementation
      Delta ← Delta + A_inc
   SINON
      Delta ← Delta + B_inc
   FIN SI
   Afficher Pixel(J, I), Couleur
FIN BOUCLE

Pente < 1 (ligne plus horizontale)

Sinon :

SINON

Étapes :

DeltaX ← X2 - X1
DeltaY ← Abs(Y2 - Y1)
Delta ← 2 × DeltaY - DeltaX
A_inc ← 2 × (DeltaY - DeltaX)
B_inc ← 2 × DeltaY

On parcourt X, on ajuste Y selon Delta :

J ← Y1
Afficher Pixel(X1, J), Couleur
BOUCLE POUR I ← X1+1 JUSQU'A X2
   SI Delta ≥ 0 ALORS
      J = J + DirectionIncrementation
      Delta ← Delta + A_inc
   SINON
      Delta ← Delta + B_inc
   FIN SI
   Afficher Pixel(I, J), Couleur
FIN BOUCLE

Version complète du pseudo-code finalisé

Voici l'algorithme complet de la ligne de Bresenham :

MODULE Ligne(variable X1 , variable Y1 , variable X2, variable Y2 , variable Couleur )
   SI Y2 = Y1 ALORS
      Afficher Ligne Horizontale ( X1 , Y1 , X2 ), Couleur
   SINON
      SI Abs ( X2X1 ) < Abs( Y2 - Y1) ALORS
         SI Y1 > Y2 ALORS
            ECHANGER X1 , X2
            ECHANGER Y1 , Y2
         FIN SI
         SI X2 > X1 ALORS
            Direction Incrémentation ← 1
         SINON
            Direction Incrémentation ← -1
         FIN SI
         Delta YY2 - Y1
         Delta X ← Abs ( X2X1 )
         DeltaDelta X x 2 ← Delta Y
         A inc ← ( Delta XDelta Y ) x 2
         B incDelta X x 2
         J X1
         Afficher Pixel ( X1 , Y1 ), Couleur
         I Y1 + 1
         BOUCLE FAIRE TANT QUE I <= Y2
            SI Delta >= 0 ALORS
               JJ + Direction Incrémentation
               DeltaDelta + A inc
            SINON
               DeltaDelta + B inc
            FIN SI
            Afficher Pixel( J , I ), Couleur
            I I + 1
         FIN BOUCLE FAIRE TANT QUE
      SINON
         SI Y1 > Y2 ALORS
            ECHANGER X1 , X2
            ECHANGER Y1 , Y2
         FIN SI
         SI Y2 > Y1 ALORS
            Direction Incrémentation ← 1
         SINON
            Direction Incrémentation ← -1
         FIN SI
         Delta XX2X1
         Delta Y ← Abs ( Y2Y1 )
         Delta ← ( Delta Y x 2 ) - Delta X
         A inc ← ( Delta YDelta X ) x 2
         B incDelta Y x 2
         JY1
         Afficher Pixel ( X1, Y1 ), Couleur
         IX1 + 1
         BOUCLE FAIRE TANT QUE I <= X2
            SI Delta >= 0 ALORS
               JJ + Direction Incrémentation
               DeltaDelta + A inc
            SINON
               DeltaDelta + B inc
            FIN SI
            Afficher Pixel ( I, J ), Couleur
            II + 1
         FIN SI
      FIN SI
   FIN SI


Dernière mise à jour : Dimanche, 1er février 2026