logo

Bresenham Çizgi Algoritması

Bu algoritma bir satırı taramak için kullanılır. Bresenham tarafından geliştirilmiştir. Yalnızca tamsayılarda toplama, çıkarma ve çarpma işlemlerini içerdiğinden etkili bir yöntemdir. Bu işlemler çok hızlı bir şekilde gerçekleştirilebildiğinden satırlar hızlı bir şekilde oluşturulabilmektedir.

Bu yöntemde seçilen bir sonraki piksel, gerçek çizgiye en az mesafeye sahip olandır.

Yöntem şu şekilde çalışır:

Bir piksel P varsayalım1'(X1',Ve1'), ardından mayıs ayından geceye kadar çalışırken sonraki pikselleri seçin, P'ye doğru yatay yönde her seferinde bir piksel konumu2'(X2',Ve2').

Herhangi bir adımda bir piksel seçildiğinde

Bir sonraki piksel

dize Java içerir
  1. Ya sağındaki (satırın alt sınırı)
  2. Biri sağda ve yukarısında (çizginin üst sınırı)

Çizgi, P arasındaki yoldan en az mesafeye düşen piksellerle en iyi şekilde tahmin edilir.1',P2'.

Bresenham

Alt piksel S ile üst piksel T arasında bir sonrakini seçmek için.
S seçilirse
elimizde x varben+1=xBen+1 ve yben+1=yBen
T seçilirse
elimizde x varben+1=xBen+1 ve yben+1=yBen+1

Doğrunun x = x noktasındaki gerçek y koordinatlarıben+1dır-dir
y=mxben+1+b

Bresenham

S'den y yönünde gerçek çizgiye olan mesafe
s = y-yBen

T'den y yönünde gerçek çizgiye olan mesafe
t = (yBen+1)-y

Şimdi bu 2 mesafe değeri arasındaki farkı düşünün
s - t

Ne zaman (s-t)<0 ⟹ s < t< p>

En yakın piksel S'dir

(s-t) ≧0 ⟹ sn olduğunda

En yakın piksel T'dir

Bu fark
s-t = (y-yi)-[(yi+1)-y]
= 2y - 2yi -1

Bresenham

m'yi yerine koyma Bresenhamve karar değişkeninin tanıtılması
DBen=△x (s-t)
DBen=△x (2 Bresenham(XBen+1)+2b-2yBen-1)
=2△xyBen-2△y-1△x.2b-2yBen△x-△x
DBen=2△y.xBen-2△x.yBen+c

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

Karar değişkenini d yazabilirizben+1bir sonraki kayma için
Dben+1=2△y.xben+1-2△x.yben+1+c
Dben+1-DBen=2△y.(xben+1-XBen)- 2△x(yben+1-VeBen)

x_(i+1)=x olduğundanBen+1, elimizde
Dben+1+dBen=2△y.(xBen+1-xBen)- 2△x(yben+1-VeBen)

dizeyi json java'ya dönüştür

Özel Durumlar

Seçilen piksel T pikselinin üst kısmındaysa (yani, dBen≧0)⟹ veben+1=yBen+1
Dben+1=dBen+2△y-2△x

Seçilen piksel T pikselinin alt kısmındaysa (yani, dBen<0)⟹ yi+1=yBen
Dben+1=dBen+2△y

Son olarak d'yi hesaplıyoruz1
D1=△x[2m(x1+1)+2b-2y1-1]
D1=△x[2(mx1+b-y1)+2m-1]

mx'den beri1+b-yBen=0 ve m = , sahibiz
D1=2△y-△x

Avantajı:

1. Yalnızca tamsayı aritmetiği içerir, dolayısıyla basittir.

2. Yinelenen noktaların oluşmasını önler.

3. Çarpma ve bölme kullanılmadığı için donanım kullanılarak gerçekleştirilebilir.

4. DDA Algoritması gibi kayan nokta hesaplamaları içermediğinden DDA (Dijital Diferansiyel Analizör) ile karşılaştırıldığında daha hızlıdır.

c++ dizesinde bul

Dezavantajı:

1. Bu algoritma yalnızca temel çizgi çizmeye yöneliktir. Başlatma, Bresenham'ın çizgi algoritmasının bir parçası değildir. Yani düzgün çizgiler çizmek için farklı bir algoritmaya bakmanız gerekir.

Bresenham Çizgi Algoritması:

Aşama 1: Algoritmayı Başlat

Adım 2: Değişken x'i bildirin1,X2,Ve1,Ve2,d,i1,Ben2,dx,dy

Aşama 3: X'in değerini girin1,Ve1,X2,Ve2
nerede x1,Ve1başlangıç ​​noktasının koordinatlarıdır
ve x2,Ve2Bitiş noktasının koordinatlarıdır

Adım4: dx = x'i hesaplayın2-X1
dy = y'yi hesaplayın2-Ve1
i'yi hesapla1=2*sen
i'yi hesapla2=2*(dy-dx)
d=i'yi hesapla1-dx

Adım 5: (x, y)'yi başlangıç ​​noktası ve x olarak düşününsonx'in mümkün olan maksimum değeri olarak.
Eğer dx<0
O zaman x = x2
y = y2
Xson=x1
Eğer dx > 0 ise
O zaman x = x1
y = y1
Xson=x2

Adım 6: (x,y) koordinatlarında nokta oluşturun.

Adım 7: Tüm satırın oluşturulup oluşturulmadığını kontrol edin.
Eğer x > = xson
Durmak.

Adım 8: Sonraki pikselin koordinatlarını hesapla
Eğer d<0
O zaman d = d + i1
Eğer d ≧ 0 ise
O zaman d = d + i2
y'yi artırın = y + 1

Adım 9: Artış x = x + 1

1'den 100'e kadar roma rakamları

Adım 10: En son (x, y) koordinatlarının bir noktasını çizin

Adım 11: 7. adıma git

Adım 1/2: Algoritmanın Sonu

Örnek: Çizginin Başlangıç ​​ve Bitiş konumları (1, 1) ve (8, 5)'tir. Ara noktaları bulun.

Çözüm: X1=1
Ve1=1
X2=8
Ve2=5
dx=x2-X1=8-1=7
sen=y2-Ve1=5-1=4
BEN1=2* ∆y=2*4=8
BEN2=2*(∆y-∆x)=2*(4-7)=-6
d = ben1-∆x=8-7=1

X Ve d=d+ı1ya da ben2
1 1 d+ı2=1+(-6)=-5
2 2 d+ı1=-5+8=3
3 2 d+ı2=3+(-6)=-3
4 3 d+ı1=-3+8=5
5 3 d+ı2=5+(-6)=-1
6 4 d+ı1=-1+8=7
7 4 d+ı2=7+(-6)=1
8 5

Bresenham Çizgi Çizim Algoritmasını uygulama programı:

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

Çıktı:


DDA Algoritması ile Bresenham Çizgi Algoritması arasındaki farkı ayırt edin:

DDA Algoritması Bresenham Çizgi Algoritması
1. DDA Algoritması kayan noktayı, yani Gerçek Aritmetiği kullanır. 1. Bresenham'ın Doğru Algoritması sabit nokta kullanır, yani Tamsayı Aritmetiği
2. DDA Algoritmaları işleminde çarpma ve bölmeyi kullanır 2.Bresenham Çizgi Algoritması işleminde yalnızca çıkarma ve toplama işlemlerini kullanır
3. DDA Algoritması, gerçek aritmetik kullandığından (Kayan Nokta işlemi) çizgi çiziminde Bresenham'ın Çizgi Algoritmasından daha yavaştır. 3. Bresenham Algoritması, DDA Algoritmasından daha hızlıdır çünkü hesaplamasında yalnızca toplama ve çıkarma işlemlerini içerir ve yalnızca tamsayı aritmetiği kullanır.
4. DDA Algoritması, Bresenham'ın Çizgi Algoritması kadar doğru ve verimli değildir. 4. Bresenham'ın Çizgi Algoritması DDA Algoritmasına göre daha doğru ve verimlidir.
5.DDA Algoritması daire ve eğriler çizebilir ancak Bresenham Çizgi Algoritması kadar doğru değildir 5. Bresenham'ın Çizgi Algoritması, DDA Algoritmasından daha doğru bir şekilde daire ve eğriler çizebilir.