Minggu, 23 September 2012

Algoritma garis DDA


DDA adalah algoritma pembentukan garis berdasarkan perhitungan x dan y, menggunakan rumus y = m. x. Garis dibuat dengan menentukan dua endpoint yaitu titik awal dan titik akhir. Setiap koordinat titik yang membentuk garis diperoleh dari perhitungan, kemudian dikonversikan menjadi nilai integer. Langkah-langkah pembentukan menurut algoritma DDA, yaitu : 

1. Tentukan dua titik yang akan dihubungkan.
2. Tentukan salah satu titik sebagai titik awal (x0, y0) dan titik akhir (x1, y1).
3. Hitung deltax = x1 - x0 dan deltay = y1 - y0.
4. Tentukan step, yaitu jarak maksimum jumlah penambahan nilai x maupun nilai y dengan cara :
bila nilai |deltay| > |deltax| maka step = nilai |deltay|.
bila tidak maka step = |deltax|.
5. Hitung penambahan koordinat pixel yaitu x_increment = deltax / step dan y_increment = deltay / step.
6. Koordinat selanjutnya (x+x_incerement, y+y_increment).
7. Posisi pixel pada layer ditentukan dengan pembulatan nilai koordinasi tersebut.
8. Ulangi step 6 dan 7 untuk menentukan posisi pixel selanjutnya, sampai x = x1 dan y = y1 . 

Contoh : Untuk menggambarkan algoritma DDA dalam pembentukan suatu garis yang menghubungkan titik (10,10) dan (17,16), pertama-tama ditentukan dx dan dy, kemudian dicari step untuk mendapatkan x_increment dan y_increment.
deltax = x1 - x0 = 17-10 = 7
deltay = y1 - y0 = 16 -10 = 6
selanjutnya hitung dan bandingkan nilai  absolutnya.
|deltax| = 7 
|deltay| = 6
karena |deltax| > |deltay|, maka step = |deltax| = 7, maka diperoleh :
x_inc = 7/7= 1
y_inc = 6/7 = 0,86



























Setelah kita mengetahui teori Algoritma garis DDA langsung saja kita praktekkan ke program.
Buka Delphi anda dan tambahkan 1 buah komponen button ke form. Klik 2x pada komponen button dan tuliskan listing dibawah ini:


procedure TForm1.Button3Click(Sender: TObject);
var dx,dy,fstep,f,x1,x2,y1,y2 : integer;
    deltax,deltay,x,y : real;
begin
    x1 := 100;
    y1 := 150;
    x2 := 300;
    y2 := 250;

    dx := x2 - x1;
    dy := y2 - y1;

    if abs(dx) > abs (dy) then
        fstep := abs(dx)
    else
        fstep := abs(dy);

    deltax := dx/fstep;
    deltay := dy/fstep;
    x := x1;
    y := y1;
    image1.canvas.Pixels[trunc(x),trunc(y)] := clgreen;
    for f := 0 to fstep -1 do
    begin
        x := x + deltax;
        y := y + deltay;
        image1.Canvas.Pixels[trunc(x),trunc(y)] := clgreen;
    end;

end;

0 komentar:

Posting Komentar