Prosedur
untuk menggambar kembali garis dengan membulatkan nilai x atau y kebilangan
integer membutuhkan waktu, serta variable x,y dan m merupakan bilangan real
karena kemiringan merupakan nilai pecahan. Bressenham mengembangkan algoritma
klasik yang lebih menarik, karena hanya menggunakan perhitungan matematika
dengan bilangan integer. Dengan demikian tidak perlu membulatkan nilai posisi
setiap pixel setiap waktu. Algoritma garis Bressenhem disebut juga midpoint
line algorithm adalah algoritma konversi penambahan nilai integer yang juga
dapat diadaptasi untuk menggambar sebuah lingkaran. Langkah-langkah untuk
membentuk garis menurut algoritma ini adalah :
1.
Tentukan dua titik yang akan dihubungkan dalam pembentukan garis.
2.
Tetukan salah satu titik disebelah kiri sebagai titik awal (x0, y0 ) dan titik
lainnya sebagai titik akhir (x1, y1 ).
3.
Hitung deltax, deltay, 2deltax, dan 2deltay – 2deltax.
4.
Hitung parameter p0 = 2deltay – deltax.
5.
Untuk setiap xk sepanjang jalur garis, dimulai dengan k = 0
bila
pk <0 maka titik selanjutnya (xk+1, yk) dan pk+1 = pk +2deltay
bila tidak
maka titik selanjutnya adalah (xk +1, yk +1) dan pk+1 = pk +2deltay–2deltax.
6. Ulangi
langkah nomor 5 untuk menentukan posisi pixel selanjutnya, sampai x = x1 dan y
= yk.
Contoh
: Untuk
menggambarkan algoritma Bressenham dalam pembentukan suatu garis yang
menghubungkan titik (10,10) dan (17,16), pertama-tama ditentukan bahwa titik
(10,10) berada disebelah kiri merupakan titik awal, sedangkan (17,16) merupakan
titik akhir. Posisi yang membentuk garis dapat ditentukan dengan perhitungan
sebagai berikut :
deltax = x1
– x0 dan deltay= y1 – y0
deltax = 7
dan deltay = 6
parameter
p0 = 2deltay – deltax
p0 = 5
increment
2deltay = 12 2deltay – 2delatax = -2
Setelah
kita mengetahui teori Algoritma garis Bressenham langsung saja kita praktekkan ke program.
Buka Delphi anda dan tambahkan 1 buah komponen button. Klik 2x pada
komponen button dan tuliskan listing dibawah ini:
procedure TForm1.Button4Click(Sender: TObject);
var x1,x2,y1,y2,deltax,deltay,p,x,y,f,xend :
integer;
begin
x1 := strtoint(edit1.text);
x2 := strtoint(edit2.text);
y1 := strtoint(edit3.text);
y2 := strtoint(edit4.text);
deltax :=
abs(x2-x1);
deltay :=
abs(y2-y1);
p := (2 *
deltay) - deltax;
if x1 >
x2 then
begin
x :=
x2;
y :=
y2;
xend
:= x1;
end else
begin
x :=
x1;
y :=
y1;
xend
:= x2;
end;
image1.Canvas.Pixels[x,y] := clred;
for f := x
to xend do
begin
x := x
+ 1;
if p
< 0 then
p
:= p + (2 * deltay)
else
begin
y
:= y + 1;
//
x := x + 1;
p
:= p + ((2 * deltay) - (2 * deltay));
end;
image1.Canvas.Pixels[x,y] := clred;
end;
end;
programnya bisa di donload di sini
Mantap nie...
BalasHapussangat bermanfaat dan membantu dalam pembelajaran Grafika Komputer...
Lanjut berkarya bro