Clipping Line Menggunakan Algoritma Cohen-Sutherland Contoh Real
Clipping Line Menggunakan Algoritma Cohen-Sutherland Algoritma Cohen-Sutherland merupakan metode untuk menentukan apakah sebuah garis perlu dipotong atau tidak dan memetukan titik potong garis. Area gambar didefinisikan sebagai sebuah area segiempat yang dibatasi oleh xmin dan xmax, ymin dan ymax. Setiap ujung garis diberi kode 4 bit dan disebut sebagai region code. Region code ditentukan berdasarkan area dimana ujung garis tersebut berada
Susunan Region Code Bit ke Region Bit Isi L 1 apabila x < xmin L 1 apabila x < xmin 0 apabila x ≥ xmin 1 R 1 apabila x > xmax 0 apabila x ≤ xmax 2 B 1 apabila y < ymin 0 apabila y ≥ ymin 3 T 1 apabila y > ymax 0 apabila y ≤ ymax
Arti region code Region Code Arti 0000 Terletak di dalam viewport 0001 Terletak di sebelah kiri viewport 0010 Terletak di sebelah kanan viewport 0100 Terletak di sebelah bawah viewport 0101 Terletak di sebelah kiri bawah viewport 0110 Terletak di sebelah kanan bawah viewport 1000 Terletak di sebelah atas viewport 1001 Terletak di sebelah kiri atas viewport 1010 Terletak di sebelah kanan atas viewport&
Contoh Keterangan Gambar : Xmax = 6 Xmin = -6 Ymax = 6 Ymin = -6 1. Garis AB (1,2)(4,4) 3. Garis EF (4,-8)(9,-4) 2. Garis CD (-5,3)(-1,7) 4. Garis GH (-7,-4)(-2,-7)
Region Code AB 1. Garis AB Verteks A (1,2) L = 0 → Karena X > Xmin yaitu 1 > -6 R = 0 → Karena X < Xmax yaitu 1 < 6 B = 0 → Karena Y > Ymin yaitu 2 > -6 T = 0 → Karena Y < Ymax yaitu 2 < 6 Sehingga region code dari verteks A adalah 0000 Verteks B (4,4) L = 0 → Karena X > Xmin yaitu 4 > -6 R = 0 → Karena X < Xmax yaitu 4 < 6 B = 0 → Karena Y > Ymin yaitu 4 > -6 T = 0 → Karena Y < Ymax yaitu 4 < 6 Sehingga region code dari verteks B adalah 0000
Kesimpulan Karena region code dari kedua verteks A dan B adalah 0000 maka garis AB bersifat Fully Visible (Garis yang terlihat seluruhnya) sehingga garis tidak perlu dipotong. Dengan melakukan operasi AND juga dapat dibuktikan bahwa kedua verteks terletak dalam viewport dan akan ditampilkan seluruhnya (0000 AND 0000 = 0000).
Region Code CD 2. Garis CD Verteks C (-5,3) L = 0 → Karena X > Xmin yaitu -5 > -6 R = 0 → Karena X < Xmax yaitu -5 < 6 B = 0 → Karena Y > Ymin yaitu 3 > -6 T = 0 → Karena Y < Ymax yaitu 3 < 6 Sehingga region code dari verteks C adalah 0000 Verteks D (-1,7) L = 0 → Karena X > Xmin yaitu -1 > -6 R = 0 → Karena X < Xmax yaitu -1 < 6 B = 0 → Karena Y > Ymin yaitu 7 > -6 T = 1 → Karena Y < Ymax yaitu 7 > 6 Sehingga region code dari verteks D adalah 1000
Kesimpulan Karena ada salah satu verteks dari garis CD yang region codenya tidak 0000 (yaitu verteks D), maka garis CD kemungkinan bersifat Partially Visible (Garis yang hanya terlihat sebagian) dan perlu dipotong. Sama seperti garis AB, garis CD pun dapat dibuktikan dengan operasi AND, yaitu 0000 AND 1000 = 0000.
Menetukan Titik Potong Titik potong dihitung berdasarkan bit=1 dari region code dengan menggunakan panduan tabel berikut: Region Bit Berpotongan dengan Dicari Titik Potong L=1 xmin yp1 (xmin,yp1) R=1 xmax yp2 (xmax,yp2) B=1 Ymin xp1 (xp1,ymin) T=1 ymax xp2 (xp2,ymax)
Dengan xp1, xp2, yp1, dan yp2 dihitung menggunakan persamaan berikut ini: Titik potong pada garis CD (-5,3)(-1,7) Region code 1000 untuk verteks D(-1,7) T = 1 → Karena T=1, maka yang dicari adalah xp2. Maka titik potongnya adalah (xp2, ymax) → (2, 6)
Region Code EF 3. Garis EF Verteks E (4,-8) L = 0 → Karena X > Xmin yaitu 4 > -6 R = 0 → Karena X < Xmax yaitu 4 < 6 B = 1 → Karena Y < Ymin yaitu -8 < -6 T = 0 → Karena Y < Ymax yaitu -8 < 6 Sehingga region code dari verteks E adalah 0100 Verteks F (9,-4) L = 0 → Karena X > Xmin yaitu 9 > -6 R = 1 → Karena X < Xmax yaitu 9 > 6 B = 0 → Karena Y > Ymin yaitu -4 > -6 T = 0 → Karena Y < Ymax yaitu -4 < 6 Sehingga region code dari verteks F adalah 0010
Kesimpulan Karena region code dari kedua verteks tidak 0000 , maka garis CD bersifat Fully Invisible(Garis yang tidak terlihat sama sekali), jadi garis tidak perlu digambar. Hal ini juga dapat dibuktikan dengan à 0100 AND 0110 = 0100
Region Code GH 4. Garis GH Verteks G (-7,-4) L = 1 → Karena X < Xmin yaitu -7 < -6 R = 0 → Karena X < Xmax yaitu -7 < 6 B = 0 → Karena Y > Ymin yaitu -4 > -6 T = 0 → Karena Y < Ymax yaitu -4 < 6 Sehingga region code dari verteks G adalah 0001 Verteks H (-2,-7) L = 0 → Karena X Xmin yaitu -2 > -6 R = 0 → Karena X Xmax yaitu -2 < 6 B = 1 → Karena Y Ymin yaitu -7 < -6 T = 0 → Karena Y Ymax yaitu -7 < 6 Sehingga region code dari verteks A adalah 0100
Kesimpulan Kedua verteks dari garis GH tidak mempunyai region code 0000. Tetapi jika kedua verteks dilakukan operasi AND, maka akan menghasilkan region code 0000. (0001 AND 0100 = 0000)
- Titik potong pada garis GH (-7,-4)(-2,-7) - Region code 0001 untuk verteks G(-7,-4) L = 1 → Karena L=1, maka yang dicari adalah yp1. Maka titik potongnya adalah (xmin, yp1) → (-6, -4.6) - Region code 0100 untuk verteks H(-2,-7) B = 1 → Karena B=1, maka yang dicari adalah xp1. Maka titik potongnya adalah (xp1, ymin) → (-3.67, -6) » Ada 2 titik potong pada garis GH yaitu (-6, -4.6) dan (-3.67, -6)