Transcript (1) (2)
ALGORITHMA GARIS Hieronimus Edhi Nugroho, M.Kom Algorithma Garis Masalah : Pixel mana yang harus dipilih untuk menggambar sebuah garis ? H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 2 ALGORITHMA GARIS Algorithma garis adalah algorithma untuk menentukan lokasi pixel yang paling dekat dengan garis sebenarnya (actual line) Ada tiga algorithma utama untuk menggambar garis : Line Equation DDA Algorithm Bresenham’s Algorithm H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 3 Kuadran Garis Kuadran Kriteria Arah Garis (x2,y2) I (x1 < x2) dan (y1 < y2) (x1,y1) (x2,y2) II (x1 > x2) dan (y1 < y2) (x1,y1) (x1,y1) III (x1 > x2) dan (y1 > y2) (x2,y2) (x1,y1) IV (x1 < x2) dan (y1 > y2) (x2,y2) Contoh (1,1) – (4,5) (-3,2) – (-1,4) (4,2) – (3,4) (-3,-3) – (-6,-1) (6,-2) – (4,-5) (9,5) – (1,2) (3,9) – (6,2) (-2,1) – (4,-5) H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 4 Kuadran Garis 8 7 (x1,y1) 6 5 B 4 3 2 1 8 7 (x2,y2) A 6 5 4 3 D (x2,y2) (x2,y2) 2 (x2,y2) C 1 (x1,y1) 0 1 2 (x1,y1) 3 4 5 6 7 8 9 (x1,y1) 0 1 2 3 4 5 6 7 8 9 Di kuadran mana garis A ? Di kuadran mana garis B ? Dapatkah garis A dan B dinyatakan sebagai garis dengan kuadran yang sama ? Bagaimana caranya ? Bagaimana halnya dengan garis C dan D ? H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 5 Kuadran Garis Garis A : (3 ; 1) – (8 ; 4) Garis A berada di kuadran I Garis B : (3 ; 7) – (1 ; 2) Garis B berada di kuadran III m = (2 – 7) / (1 – 3) = -5 / -2 = 2.5 tetapi apabila garis B dinyatakan sebagai (1 ; 2) – (3 ; 7) maka garis B akan berada di kuadran I m = (7 – 2 ) / ( 3 – 1) = 5 / 2 = 2.5 H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 6 LINE EQUATION Sebuah garis lurus dapat diperoleh dengan menggunakan rumus : y = mx + b dimana : y2 m = gradien b = perpotongan garis dengan sumbu y. y1 b H. Edhi Nugroho - Grafika Komputer - Algorithma Garis x1 x2 7 LINE EQUATION Apabila dua pasang titik akhir dari sebuah garis dinyatakan sebagai (x1,y1) and (x2, y2), maka nilai dari gradien m dan lokasi b dapat dihitung dengan : y2 y1 (1) m x2 x1 b y1 m x1 H. Edhi Nugroho - Grafika Komputer - Algorithma Garis (2) 8 Contoh Gambar garis (0,1) – (5,7) dengan menggunakan Line Equation x1 = x2 = m = b = 7 6 5 4 3 2 1 0 0 y1 = 1 5 y2 = 7 (7-1)/(5-0) = 1,2 1 – 1,2 * 0 = 1 x 0 1 2 3 4 5 6 7 8 y 0 1.2 * 0 + 1 = 1 1 1.2 * 1 + 1 = 2,2 ≈ 2 2 1.2 * 2 + 1 = 3,4 ≈ 3 3 1.2 * 3 + 1 = 4,6 ≈ 5 4 1.2 * 4 + 1 = 5,8 ≈ 6 5 1.2 * 5 + 1 = 7 H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 9 Gradien dan Tipe Garis y2 miring 45o tegak y2 mendatar y1 y1 y1 x1 x1 m = tak terdefinisi x1 x2 m=0 x2 m=1 y2 cenderung mendatar cenderung tegak y2 y1 y1 x1 0<m<1 x2 x1 x2 m>1 H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 10 Tipe Garis 8 7 6 5 B 4 3 A 2 1 0 1 2 3 4 5 6 7 8 9 Dapatkah anda mencari perbedaan yang esensial antara garis A dan B (misal : gradien, pertambahan x dan y) ? H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 11 Tipe Garis Garis A : (3;1) – ( 8;4) Garis B : (1;2) – (2;7) m = (y2 – y1) / (x2 – x1) = (4-1)/ (8-3) = 3/5= 0,6 0<m<1 xi+1 = xi + 1 ; yi+1 = yi + d1 m = (7-2) / (2-1) = 5 / 1 = 5 m>1 xi+1 = xi + d2 ; yi+1 = yi + 1 Berapa nilai d1 dan d2 ? H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 12 ALGORITHMA DDA Digital differential analyzer (DDA) merupakan algorithma untuk menghitung posisi pixel disepanjang garis dengan menggunakan posisi pixel sebelumnya. Algorithma berikut ini menggunakan asumsi bahwa garis berada di kuadran I atau II serta garis bertipe cenderung tegak atau cenderung mendatar. H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 13 Algorithma DDA Untuk garis dengan 0 < m < 1, maka xi+1 = xi +1 dan : yi 1 yi m (3) Untuk garis dengan m > 1, maka yi+1 = yi + 1 dan : 1 xi 1 xi m H. Edhi Nugroho - Grafika Komputer - Algorithma Garis (4) 14 Algorithma DDA Garis dengan 0 > m > -1, maka xi+1 = xi-1 dan yi 1 yi m (5) Sedangkan bila m < -1, maka yi+1 = yi+1 dan 1 xi 1 xi m H. Edhi Nugroho - Grafika Komputer - Algorithma Garis (6) 15 Contoh Algorithma DDA Gambar garis dari (0;1) – (5;7) dengan menggunakan DDA. x1=0,y1=1 x2=5,y2=7 m = (7-1)/(5-0) = 1,20 1/m=1/1,20 = 0,83 7 6 5 4 3 2 1 0 x 0 1 2 y 0 1 0+0,83 = 0,83 ≈ 1 2 0,83+0,83 = 1,66 ≈ 2 3 1,66+0,83 = 2,59 ≈ 3 4 2,59+0,83 = 3,42 ≈ 3 5 3,42+0,83 = 4,25 ≈ 4 6 4,25+0,83 = 5,08 ≈ 5 7 3 4 5 6 7 8 H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 16 Algorithma Bresenham Bresenham mengembangkan algorithma yang lebih efisien. Algorithma ini mencari nilai integer yang paling mendekati garis sesungguhnya (actual line). Algorithma ini tidak memerlukan pembagian. 3 2 1 0 actual line 0 1 2 3 4 H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 17 Algorithma Bresenham Algorithma Bresenham yang disajikan berikut ini hanya dapat digunakan untuk garis yang berada di kuadran I dan 0 < m < 1. Anda yang ingin mempelajari pembuktian matematis dari algorithma Bresenham silahkan membaca buku Computer Graphics (Hearn dan Baker) H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 18 Algorithma Bresenham Xi+1,yi+ 1 Actual line xi,yi Xi+1,yi d1 d1=m – ½, karena d1< 0 atau negatif maka pixel berikutnya adalah pixel (xi+1, yi) H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 19 Algorithma Bresenham Xi+1,yi+ Actual line 1 d1 Xi+1,yi xi,yi d1=m – ½, karena d1> 0 atau positif maka pixel berikutnya adalah pixel (xi+1, yi+1) H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 20 Algorithma Bresenham (0 < m < 1) dx = x2 – x1 ;dy = y2 – y1 d1 =2 * dy ; d2 =2 * (dx – dy) p = d1 – dx x = x1 ; y = y1 p = p + d1 y=y T p >= 0 Y p = p - d2 y = y +1 x = x +1 stop Y x >= x2 H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 21 Algorithma Bresenham Gambar garis berikut ini dengan menggunakan algorithma Bresenham : (0;1) – (6;5) (2;2) – (7;5) (0;1) – (5;7) H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 22 Algorithma Bresenham Garis : (0;1) - (6;5) 8 7 6 5 4 3 2 1 0 0 1 p x y 2 0 1 -2 1 2 6 2 2 2 3 3 -2 4 4 6 5 4 2 6 5 2 3 4 5 6 7 8 9 10 H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 23 Algorithma Bresenham Garis : (2;2) - (7;5) 8 7 6 5 4 3 2 1 0 p x y 1 2 2 -3 3 3 3 4 3 -1 5 4 5 6 4 1 7 5 0 1 2 3 4 5 6 7 8 9 10 H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 24 Algorithma Bresenham Garis : (0;1) - (5;7) 8 7 6 5 4 3 2 1 0 0 1 p x y 7 0 1 9 1 2 11 2 3 13 3 4 15 4 5 17 5 6 2 3 4 5 6 7 8 9 10 H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 25 Algorithma Bresenham Mengapa garis (0;1) – (5;7) tidak dapat digambar dengan tepat ? Garis (0;1) – (5;7) mempunyai m = 1,2, dengan demikian asumsi pada algorithma tersebut tidak tepat dan harus disesuaikan. H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 26 Algorithma Bresenham ( m > 1) dx = x2 – x1 ; dy = y2 – y1 d1 =2 * dx ; d2 =2 * (dx – dy) p = d1 – dy x = x1 ; y = y1 p = p + d1 x=x T p >= 0 Y p = p + d2 x = x +1 y = y +1 stop y >= y2 H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 27 Algorithma Bresenham (m > 1) Garis : (0;1) - (5;7) 8 7 6 5 4 3 2 1 0 0 1 p x y 4 0 1 2 1 2 0 2 3 -2 3 4 8 3 5 6 4 6 4 5 7 2 3 4 5 6 7 8 9 10 H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 28 SOAL Gunakan algorithma DDA dan Bresenham untuk menggambar garis-garis berikut : 1. 2. 3. 4. 5. (2;1) – (9;6) (1;2) – (8;5) (3;1) – (10;5) (6;7) – (13;10) (2;8) – (9;11) H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 29 Atribut Garis Atribut garis meliputi : Ketebalan garis Pola garis Warna garis H. Edhi Nugroho - Grafika Komputer - Algorithma Garis 30