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
- Soit celui à sa droite (borne inférieure de la ligne)
- 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'.
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
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 Remplacer m par et introduction de la variable de décision Où c= 2△y+△x (2b-1) On peut écrire la variable de décision dje+1pour le prochain slip Puisque x_(i+1)=xje+1, nous avons Cas spéciaux Si le pixel choisi est au pixel supérieur T (c'est-à-dire dje≧0)⟹ etje+1=ouije+1 Si le pixel choisi se trouve au pixel inférieur T (c'est-à-dire dje<0)⟹ yje+1=yje Finalement, on calcule d1 Depuis mx1+par-yje=0 et m = , nous avons 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. 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. Étape 1: Démarrer l'algorithme Étape 2: Déclarer la variable x1,X2,et1,et2,d,je1,je2,dx,dy Étape 3: Entrez la valeur de x1,et1,X2,et2 Étape 4: Calculer dx = x2-X1 Étape 5 : Considérons (x, y) comme point de départ et xfincomme valeur maximale possible de x. É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. Étape 8 : Calculer les coordonnées du pixel suivant É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 Sortir:
s-t = (y-yi)-[(yi+1)-y]
= 2a - 2yi -1
dje=△x (s-t)
dje=△x (2 (Xje+1)+2b-2aje-1)
=2△xyje-2△y-1△x.2b-2yje△x-△x
dje=2△y.xje-2△x.yje+c
dje+1=2△y.xje+1-2△x.yje+1+c
dje+1-dje=2△y.(xje+1-Xje)- 2△x(yje+1-etje)
dje+1+dje=2△y.(xje+1-xje)- 2△x(yje+1-etje)
dje+1=dje+2△y-2△x
dje+1=dje+2△y0)⟹>
d1=△x[2m(x1+1)+2b-2a1-1]
d1=△x[2(mx1+par-y1)+2m-1]
d1=2△y-△xAvantage:
Désavantage:
Algorithme de ligne de Bresenham :
générateur de nombres aléatoires en c
chaîne ajouter
Où x1,et1sont les coordonnées du point de départ
Et x2,et2sont les coordonnées du point final
Calculer dy = y2-et1
Calculer je1=2*tu
Calculer je2=2*(dy-dx)
Calculer d=i1-dx
Si dx<0
Alors x = x2
y = y2
Xfin=x1
Si dx > 0
Alors x = x1
y = y1
Xfin=x20>
Si x > = xfin
Arrêt.
Si d<0
Alors d = d + je1
Si d ≧ 0
Alors d = d + je2
Incrément y = y + 10>
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(&gdriver, &gmode, 'c:\turboc3\bgi'); printf('Enter co-ordinates of first point: '); scanf('%d%d', &x0, &y0); printf('Enter co-ordinates of second point: '); scanf('%d%d', &x1, &y1); drawline(x0, y0, x1, y1); return 0; }
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.