logo

Algorithme de ligne de Bresenham

Cet algorithme est utilisé pour convertir une ligne par balayage. Il a été développé par Bresenham. Il s’agit d’une méthode efficace car elle implique uniquement des opérations d’addition, de soustraction et de multiplication d’entiers. Ces opérations peuvent être effectuées très rapidement afin que les lignes puissent être générées rapidement.

Dans cette méthode, le prochain pixel sélectionné est celui qui a le moins de distance par rapport à la vraie ligne.

La méthode fonctionne comme suit :

réseaux informatiques

Supposons un pixel P1'(X1',et1'), puis sélectionnez les pixels suivants au fur et à mesure que nous travaillons jusqu'à la nuit, une position de pixel à la fois dans la direction horizontale vers P.2'(X2',et2').

Une fois un pixel entré, choisissez à tout moment

Le pixel suivant est

  1. Soit celui à sa droite (borne inférieure de la ligne)
  2. Un en haut à droite et en haut (limite supérieure de la ligne)

La ligne est mieux approchée par les pixels qui se trouvent le moins à distance du chemin entre P1',P2'.

Bresenham

To choisit le suivant entre le pixel du bas S et le pixel du haut T.
Si S est choisi
Nous avons xje+1=xje+1 et yje+1=ouije
Si T est choisi
Nous avons xje+1=xje+1 et yje+1=ouije+1

Les coordonnées y réelles de la ligne à x = xje+1est
y=mxje+1+b

Bresenham

La distance de S à la ligne réelle dans la direction y
s = a-yje

La distance de T à la ligne réelle dans la direction y
t = (yje+1)-y

Considérons maintenant la différence entre ces 2 valeurs de distance
St

Quand (merde)<0 ⟹ s < t< p>

Le pixel le plus proche est S

Quand (s-t) ≧0 ⟹ s

Le pixel le plus proche est T

Cette différence est
s-t = (y-yi)-[(yi+1)-y]
= 2a - 2yi -1

Bresenham

Remplacer m par Bresenhamet introduction de la variable de décision
dje=△x (s-t)
dje=△x (2 Bresenham(Xje+1)+2b-2aje-1)
=2△xyje-2△y-1△x.2b-2yje△x-△x
dje=2△y.xje-2△x.yje+c

Où c= 2△y+△x (2b-1)

On peut écrire la variable de décision dje+1pour le prochain slip
dje+1=2△y.xje+1-2△x.yje+1+c
dje+1-dje=2△y.(xje+1-Xje)- 2△x(yje+1-etje)

Puisque x_(i+1)=xje+1, nous avons
dje+1+dje=2△y.(xje+1-xje)- 2△x(yje+1-etje)

Cas spéciaux

Si le pixel choisi est au pixel supérieur T (c'est-à-dire dje≧0)⟹ etje+1=ouije+1
dje+1=dje+2△y-2△x

Si le pixel choisi se trouve au pixel inférieur T (c'est-à-dire dje<0)⟹ yje+1=yje
dje+1=dje+2△y

Finalement, on calcule d1
d1=△x[2m(x1+1)+2b-2a1-1]
d1=△x[2(mx1+par-y1)+2m-1]

Depuis mx1+par-yje=0 et m = , nous avons
d1=2△y-△x

Avantage:

1. Cela implique uniquement de l’arithmétique entière, donc c’est simple.

2. Cela évite la génération de points en double.

3. Il peut être implémenté à l’aide de matériel car il n’utilise ni multiplication ni division.

4. Il est plus rapide que le DDA (Digital Differential Analyser) car il n'implique pas de calculs à virgule flottante comme l'algorithme DDA.

Désavantage:

1. Cet algorithme est destiné uniquement au dessin de lignes de base. L'initialisation ne fait pas partie de l'algorithme de lignes de Bresenham. Donc, pour tracer des lignes douces, vous devriez envisager un algorithme différent.

Algorithme de ligne de Bresenham :

Étape 1: Démarrer l'algorithme

générateur de nombres aléatoires en c

Étape 2: Déclarer la variable x1,X2,et1,et2,d,je1,je2,dx,dy

chaîne ajouter

Étape 3: Entrez la valeur de x1,et1,X2,et2
Où x1,et1sont les coordonnées du point de départ
Et x2,et2sont les coordonnées du point final

Étape 4: Calculer dx = x2-X1
Calculer dy = y2-et1
Calculer je1=2*tu
Calculer je2=2*(dy-dx)
Calculer d=i1-dx

Étape 5 : Considérons (x, y) comme point de départ et xfincomme valeur maximale possible de x.
Si dx<0
Alors x = x2
y = y2
Xfin=x1
Si dx > 0
Alors x = x1
y = y1
Xfin=x2

Étape 6 : Générez un point aux coordonnées (x, y).

Étape 7 : Vérifiez si la ligne entière est générée.
Si x > = xfin
Arrêt.

Étape 8 : Calculer les coordonnées du pixel suivant
Si d<0
Alors d = d + je1
Si d ≧ 0
Alors d = d + je2
Incrément y = y + 1

Étape 9 : Incrément x = x + 1

Étape 10 : Dessiner un point de dernières coordonnées (x, y)

Étape 11 : Passez à l'étape 7

Étape 12 : Fin de l'algorithme

Exemple: Les positions de début et de fin de la ligne sont (1, 1) et (8, 5). Trouvez des points intermédiaires.

Solution: X1=1
et1=1
X2=8
et2=5
dx = x2-X1=8-1=7
tu=o2-et1=5-1=4
je1=2* ∆y=2*4=8
je2=2*(∆y-∆x)=2*(4-7)=-6
d = je1-∆x=8-7=1

X et d = d + je1ou Je2
1 1 j+je2=1+(-6)=-5
2 2 j+je1=-5+8=3
3 2 j+je2=3+(-6)=-3
4 3 j+je1=-3+8=5
5 3 j+je2=5+(-6)=-1
6 4 j+je1=-1+8=7
7 4 j+je2=7+(-6)=1
8 5

Programme pour implémenter l'algorithme de dessin de lignes de Bresenham :

 #include #include void drawline(int x0, int y0, int x1, int y1) { int dx, dy, p, x, y; dx=x1-x0; dy=y1-y0; x=x0; y=y0; p=2*dy-dx; while(x=0) { putpixel(x,y,7); y=y+1; p=p+2*dy-2*dx; } else { putpixel(x,y,7); p=p+2*dy;} x=x+1; } } int main() { int gdriver=DETECT, gmode, error, x0, y0, x1, y1; initgraph(&amp;gdriver, &amp;gmode, &apos;c:\turboc3\bgi&apos;); printf(&apos;Enter co-ordinates of first point: &apos;); scanf(&apos;%d%d&apos;, &amp;x0, &amp;y0); printf(&apos;Enter co-ordinates of second point: &apos;); scanf(&apos;%d%d&apos;, &amp;x1, &amp;y1); drawline(x0, y0, x1, y1); return 0; } 

Sortir:


Faites la différence entre l'algorithme DDA et l'algorithme de ligne de Bresenham :

Algorithme DDA Algorithme de ligne de Bresenham
1. L'algorithme DDA utilise la virgule flottante, c'est-à-dire l'arithmétique réelle. 1. L'algorithme de ligne de Bresenham utilise un point fixe, c'est-à-dire l'arithmétique entière
2. Les algorithmes DDA utilisent la multiplication et la division pour leur fonctionnement 2.L'algorithme de ligne de Bresenham utilise uniquement la soustraction et l'addition pour son fonctionnement
3. L'algorithme DDA est plus lent que l'algorithme de ligne de Bresenham en matière de dessin au trait car il utilise l'arithmétique réelle (opération à virgule flottante) 3. L'algorithme de Bresenham est plus rapide que l'algorithme DDA en ligne car il n'implique que des additions et des soustractions dans son calcul et utilise uniquement l'arithmétique entière.
4. L'algorithme DDA n'est pas précis et efficace comme l'algorithme de ligne de Bresenham. 4. L'algorithme de ligne de Bresenham est plus précis et plus efficace que l'algorithme DDA.
5. L'algorithme DDA peut dessiner des cercles et des courbes mais n'est pas précis comme l'algorithme de ligne de Bresenham. 5. L'algorithme de ligne de Bresenham peut dessiner des cercles et des courbes avec plus de précision que l'algorithme DDA.