song

Senin, 08 November 2010

Algoritma Bresenham

Bresenham pada tahun 1965, melakukan perbaikan dari algoritma perhitungan koordinat piksel yang menggunakan persamaan (1), dengan cara menggantikan operasi bilangan rii perkalian dengan operasi penjumlahan, yang kemudian dikenal dengan Algoritma Bresenham. Pada algoritma bresenham, nilai y kedua dan seterusnya, dihitung dari nilai y sebelumnya, sehingga hanya titik y pertama yang perlu dilakukan operasi secara lengkap. Perbaikan algoritma ini ternyata tidak menghasilkan perbaikan yang cukup siginifikan. Perbaikan berikutnya dilakukan dengan cara menghilangkan operasi bilangan riel dengan operasi bilangan integer. Operasi bilangan integer jauh lebih cepat dibandingkan dengan operasi bilangan riel, terutama pada penambahan dan pengurangan.

Cara menentukan garis dengan algoritma bresenham :

1. Tentukan koordinat awal garis (x0,y0)
2. Tentukan koordinat akhir garis (x1,y1)
3. Hitung jarak mendatar ke 2 titik (dx) Dx=x1-x0
4. Hitung jarak mendatar ke 2 titik (dx) Dy=y1-y0
5. Tentukan faktor pembagi (mencari yg lebih panjang). Apakah dx>dy, bila ya
Step=dx Bila tidak Step=dy
6. Hitung faktor penambah ke koordinat mendatar dan vertikal titik berikut (x_tambah, y_tambah) X_tambah=dx/step Y_tambah=dy/step
7. Buat loop mulai titik ke 1 sampai titik ke step For k=1 to step
8. Hitung koodinat titik berikutnya. X=x+x_tambah Y=y+y_tambah
9. Gambar pikxel pada koordinat (x,y)

Catatan : koordinat x,y harus bulat (integer), sehingga hasil dari perhitungan diatas harus diinteger-kan
10. Ulangi langkah ke 7, dan setetrrsnya sampai titik ke step.


DDA (Digital Defferential Analyzer)

Prinsip algoritma ini adalah mengambil nilai integer terdekat dengan jalur garis berdasarkan atas sebuah titik yang telah ditentukan sebelumnya(titik awal garis).

Algoritma pembentukan garis DDA :
1. Tentukan dua titik yang akan dihubungkan dalam pembentukan garis.
2. Tentukan salah satu titik sebagai awal(x0,y0) dan titik akhir(x1,y1).
3. Hitung dx=x1¬x0, dan dy= y1¬y0.
4. Tentukan langkah, yaitu dengan cara jarak maksimum jumlah penambahan nilai x maupun nilai y, dengan cara :
- Bila nilai absolut dari dx lebih besar dari absolut dy, maka langkah= absolut
dari dx.
- Bila tidak maka langkah= absolut dari dy
5. Hitung penambahan koordinat pixel yaitu x_increment=dx/langkah, dan y_increment=dy/langkah.
6. Koordinat selanjutnya (x+x_increment, y+y_increment).
7. Posisi pixel pada layar ditentukan dengan pembulatan nilai koordinat tersebut.
8. Ulangi nomor 6 dan 7 untuk menentukan posisi pixel selanjutnya,sampai x=x1
dan y=y1.

Garis merupakan kumpulan dari titik-titik, untuk membentuk garis lurus adalah dengan mengetahui titik awal dan titik akhir. Dengan mengetahui titik awal dan titik akhir maka kita dapat membentuk garis. Untuk menggambarkan proses pembuatan garis dari titik awal ke titik akhir ada berbagai algoritma. Algoritam yang umum adalah DDA dan Bresenham.
Perkembangan kemampuan komputasi prosesor yang pesat telah membuat komputer desktop mempunyai kemampuan komputasi yang besar. Hal ini mendorong perkembangan program aplikasi yang memerlukan komputasi yang besar seperti program aplikasi yang menggunakan grafik 3 dimensi. Peningkatan kemampuan komputasi prosesor untuk aplikasi grafik yang sarat komputasi, perlu dibarengi peningkatan efisiensi algoritma, sehingga pembuatan grafik garis dan kurva yang merupakan dasar pembuatan grafik dapat memberikan hasil yang optimal.

GARIS LURUS
Garis lurus dinyatakan dinyatakan dalam persamaan :
y = mx + c (1)
dimana :
m : gradient dan
c : konstanta.
Untuk menggambarkan piksel-piksel dalam garis lurus, parameter yang digunakan tergantung dari gradient, jika besarnya gradient diantara 0 dan 1, maka digunakan sumbu x sebagai parameter dan sumbu y sebagai hasil dari fungsi, sebaliknya, bila gradient melebihi 1, maka sumbu y digunakan sebagai parameter dan sumbu x sebagai hasil dari fungsi, hal ini bertujuan untuk menghindari terjadinya gaps karena adanya piksel yang terlewatkan. Hasil dari fungsi biasanya merupakan bilangan riil, sedangkan koordinat pixel dinyatakan dalam bilangan integer (x,y), maka diperlukan operasi pembulatan kedalam bentuk integer terdekat.
Penggambaran garis lurus dengan metode diatas dimulai dengan operasi bilangan riil untuk menghitung gradient m dan konstanta c.
m = (y2 - y1 ) / (x2-x1) (2)
c = y1 – m* x1 (3)
Operasi bilangan real berikutnya adalah menghitung nilai y dengan persamaan (1) untuk mendapatkan koordinat piksel (x,y), untuk setiap nilai x, dari =x1 sampai x=x2, operasi inilah yang perlu dihindari, karena operasi ini memerlukan waktu operasi yang besar.


Source code garis:

' Gambas class file
PUBLIC SUB form_Open()
'Membuat Garis menggunakan label
LabelGaris.Text = "__________________________________"
'membuat form menjadi maximize saat dibuka
ME.Maximized = TRUE

END

PUBLIC SUB Form_Keypress()
'Perintah Select Case untuk mengatur koordinat garis menggunakan tombol arah di keyboard

SELECT Key.Code
'Menset tombol arah kiri, bila ditekan maka koordinat X garis akan berpindah sebanyak -20 dari koordinat sebelumnya

CASE Key.Left
LabelGaris.X = LabelGaris.X - "20"
'Menset tombol arah kanan, bila ditekan maka koordinat X garis akan berpindah sebanyak +20 dari koordinat sebelumnya

CASE Key.Right
LabelGaris.X = LabelGaris.X + "20"
'Menset tombol arah atas, bila ditekan maka koordinat Y garis akan berpindah sebanyak -20 dari koordinat sebelumnya

CASE Key.Up
LabelGaris.Y = LabelGaris.Y - "20"
'Menset tombol arah bawah, bila ditekan maka koordinat Y garis akan berpindah sebanyak +20 dari koordinat sebelumnya

CASE Key.Down
LabelGaris.Y = LabelGaris.Y + "20"
END SELECT
END
PUBLIC SUB Form_Close()
FMain.Close
END



Tampilan from Garis



Tampilan Garis berubah


Source code titik :


' Gambas class file
PUBLIC SUB form_Open()
'Membuat Garis menggunakan label
LabelGaris.Text = "__________________________________"
'membuat form menjadi maximize saat dibuka
ME.Maximized = TRUE
END
PUBLIC SUB Form_Keypress()
'Perintah Select Case untuk mengatur koordinat garis menggunakan tombol arah di keyboard

SELECT Key.Code
'Menset tombol arah kiri, bila ditekan maka koordinat X garis akan berpindah sebanyak -20 dari koordinat sebelumnya

CASE Key.Left
LabelGaris.X = LabelGaris.X - "20"
'Menset tombol arah kanan, bila ditekan maka koordinat X garis akan berpindah sebanyak +20 dari koordinat sebelumnya

CASE Key.Right
LabelGaris.X = LabelGaris.X + "20"
'Menset tombol arah atas, bila ditekan maka koordinat Y garis akan berpindah sebanyak -20 dari koordinat sebelumnya

CASE Key.Up
LabelGaris.Y = LabelGaris.Y - "20"
'Menset tombol arah bawah, bila ditekan maka koordinat Y garis akan berpindah sebanyak +20 dari koordinat sebelumnya

CASE Key.Down
LabelGaris.Y = LabelGaris.Y + "20"
END SELECT
END
PUBLIC SUB Form_Close()
FMain.Close
END