logo

Algoritem Bresenhamove črte

Ta algoritem se uporablja za skeniranje pretvorbe vrstice. Razvil ga je Bresenham. Je učinkovita metoda, ker vključuje samo celoštevilske operacije seštevanja, odštevanja in množenja. Te operacije je mogoče izvesti zelo hitro, tako da je mogoče hitro ustvariti vrstice.

Pri tej metodi je naslednji izbrani piksel tisti, ki je najmanj oddaljen od prave črte.

Metoda deluje na naslednji način:

Predpostavimo slikovno piko P1'(x1',in1'), nato izberite naslednje slikovne pike, ko delamo do noči, eno slikovno piko naenkrat v vodoravni smeri proti P2'(x2',in2').

Ko je piksel vstavljen, izberite na katerem koli koraku

Naslednji piksel je

  1. Bodisi tista na njegovi desni (spodnja meja za črto)
  2. Eden zgoraj desno in navzgor (zgornja meja za črto)

Črto najbolje približajo tiste slikovne pike, ki so najmanj oddaljene od poti med P1',P2'.

Bresenham

Izbere naslednjo med spodnjo slikovno piko S in zgornjo slikovno piko T.
Če je izbran S
Imamo xi+1=xjaz+1 in yi+1=yjaz
Če je izbran T
Imamo xi+1=xjaz+1 in yi+1=yjaz+1

Dejanske koordinate y premice pri x = xi+1je
y=mxi+1+b

Bresenham

Razdalja od S do dejanske črte v smeri y
s = y-yjaz

Razdalja od T do dejanske črte v smeri y
t = (yjaz+1)-y

Zdaj razmislite o razliki med tema dvema vrednostma razdalje
s - t

Kdaj (s-t)<0 ⟹ s < t< p>

Najbližji piksel je S

Ko je (s-t) ≧0 ⟹ s

Najbližji piksel je T

Ta razlika je
s-t = (y-yi)-[(yi+1)-y]
= 2y - 2yi -1

Bresenham

Zamenjava m z Bresenhamin uvedbo odločitvene spremenljivke
djaz=△x (s-t)
djaz=△x (2 Bresenham(xjaz+1)+2b-2yjaz-1)
=2△xyjaz-2△y-1△x.2b-2yjaz△x-△x
djaz=2△y.xjaz-2△x.yjaz+c

Kjer je c= 2△y+△x (2b-1)

Odločitveno spremenljivko lahko zapišemo di+1za naslednji zdrs naprej
di+1=2△y.xi+1-2△x.yi+1+c
di+1-djaz=2△y.(xi+1-xjaz)- 2△x(yi+1-injaz)

Ker je x_(i+1)=xjaz+1, imamo
di+1+djaz=2△y.(xjaz+1-xjaz)- 2△x(yi+1-injaz)

chmod 755

Posebni primeri

Če je izbrani piksel na vrhu, je piksel T (tj. djaz≧0)⟹ ini+1=yjaz+1
di+1=djaz+2△y-2△x

Če je izbrana slikovna pika na dnu slikovne pike T (tj. djaz<0)⟹ yi+1=yjaz
di+1=djaz+2△y

Na koncu izračunamo d1
d1=△x[2m(x1+1)+2b-2y1-1]
d1=△x[2(mx1+b-y1)+2m-1]

Ker je mx1+b-yjaz=0 in m = , imamo
d1=2△y-△x

Prednost:

1. Vključuje samo aritmetiko celih števil, zato je preprosta.

2. Izogne ​​se ustvarjanju podvojenih točk.

3. Lahko se izvede s strojno opremo, ker ne uporablja množenja in deljenja.

4. Je hitrejši v primerjavi z DDA (digitalni diferencialni analizator), ker ne vključuje izračunov s plavajočo vejico, kot je algoritem DDA.

Slabost:

1. Ta algoritem je namenjen le osnovnemu risanju črt. Inicializacija ni del Bresenhamovega algoritma črt. Torej, če želite risati gladke črte, bi morali pogledati v drug algoritem.

Algoritem Bresenhamove črte:

Korak 1: Zaženi algoritem

2. korak: Deklarirajte spremenljivko x1,x2,in1,in2,d,i1,jaz2,dx,dy

java dvojno v niz

3. korak: Vnesite vrednost x1,in1,x2,in2
Kjer je x1,in1so koordinate začetne točke
In x2,in2so koordinate končne točke

4. korak: Izračunajte dx = x2-x1
Izračunajte dy = y2-in1
Izračunajte i1=2*ti
Izračunajte i2=2*(dy-dx)
Izračunajte d=i1-dx

5. korak: Upoštevajte (x, y) kot izhodišče in xkoneckot največjo možno vrednost x.
Če dx<0
Potem je x = x2
y = y2
xkonec=x1
Če je dx > 0
Potem je x = x1
y = y1
xkonec=x2

6. korak: Ustvari točko na (x,y) koordinatah.

7. korak: Preverite, ali je ustvarjena cela vrstica.
Če je x > = xkonec
Stop.

8. korak: Izračunajte koordinate naslednje piksle
Če d<0
Potem je d = d + i1
Če je d ≧ 0
Potem je d = d + i2
Povečaj y = y + 1

9. korak: Povečaj x = x + 1

10. korak: Narišite točko zadnje (x, y) koordinate

11. korak: Pojdite na 7. korak

12. korak: Konec algoritma

primer: Začetni in končni položaj črte sta (1, 1) in (8, 5). Poiščite vmesne točke.

rešitev: x1=1
in1=1
x2=8
in2=5
dx= x2-x1=8-1=7
ti=y2-in1=5-1=4
jaz1=2* ∆y=2*4=8
jaz2=2*(∆y-∆x)=2*(4-7)=-6
d = jaz1-∆x=8-7=1

x in d=d+jaz1ali jaz2
1 1 d+jaz2=1+(-6)=-5
2 2 d+jaz1=-5+8=3
3 2 d+jaz2=3+(-6)=-3
4 3 d+jaz1=-3+8=5
5 3 d+jaz2=5+(-6)=-1
6 4 d+jaz1=-1+8=7
7 4 d+jaz2=7+(-6)=1
8 5

Program za implementacijo Bresenhamovega algoritma za risanje črt:

 #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; } 

Izhod:


Razlikujte med algoritmom DDA in algoritmom Bresenhamove črte:

Algoritem DDA Algoritem Bresenhamove črte
1. Algoritem DDA uporablja plavajočo vejico, tj. realno aritmetiko. 1. Bresenhamov linijski algoritem uporablja fiksno točko, tj. aritmetiko celih števil
2. Algoritmi DDA za svoje delovanje uporabljajo množenje in deljenje 2.Bresenhamov linijski algoritem uporablja samo odštevanje in seštevanje
3. Algoritem DDA je pri risanju črt počasnejši od Bresenhamovega črtnega algoritma, ker uporablja pravo aritmetiko (operacija s plavajočo vejico) 3. Bresenhamov algoritem je v liniji hitrejši od algoritma DDA, ker pri izračunu vključuje samo seštevanje in odštevanje ter uporablja samo aritmetiko celih števil.
4. Algoritem DDA ni natančen in učinkovit kot Bresenhamov linijski algoritem. 4. Bresenhamov linijski algoritem je natančnejši in učinkovitejši pri algoritmu DDA.
5. Algoritem DDA lahko nariše krog in krivulje, vendar ni natančen kot Bresenhamov linijski algoritem 5. Bresenhamov črtni algoritem lahko nariše krog in krivulje bolj natančno kot algoritem DDA.