Jumat, 21 September 2012

Algoritma Garis Bressenhem

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;


 oke sobat sekian program kecil kita ,,, semoga bermanfaat.
programnya bisa di donload di sini

1 komentar:

  1. Mantap nie...
    sangat bermanfaat dan membantu dalam pembelajaran Grafika Komputer...
    Lanjut berkarya bro

    BalasHapus