Clipping dapat diartikan memotong sebagian bentuk agar terlihat dilayar/ area tertentu, ukuran bentuk yang terlalu besar kadang tidak cukup untuk di perlihatkan seluruhnya, ada banyak teknik cliiping seperti
- Cohen-Sutherland Line Clipping
- Liang-Barsky Line Clipping
- Blinn’s Line Clipping
- Sutherland-Hodgman Polygon Clipping
Disini akan dicoba di jelaskan Cohen-Sutherland Line Clipping
- Algoritma Cohen-Sutherland merupakan metode untuk menentukan apakah sebuah garis perlu dipotong atau tidak dan menentukan 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 ada 9 region dalam algoritma ini.
Susunan Region Code
| Bit ke | Region Bit | Isi |
| 0 | 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 |
Region Code untuk 9 daerah viewport
| 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 |
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:
Contoh Kasus:
Diketahui:
| Xmax = 8 | Xmin = -8 | ||
| Ymax = 8 | Ymin = -8 | ||
| 1. Garis AB (2,2)(6,2) | 3. Garis EF (-4,-9)(-9,3) | ||
| 2. Garis CD (-2,6)(-3,9) | 4. Garis GH (2,-9)(6,-9) | ||
Menentukan region code dari masing-masing garis
1. Garis AB (2,2)(6,2)
- Verteks A (1,2)
| L = 0 | xmin = 2 | 2 > -8 |
| R = 0 | xmax = 2 | 2 < 8 |
| B = 0 | ymin = 2 | 2 > -8 |
| T = 0 | ymax = 2 | 2 < 8 |
Region code verteks A = 0000
- Verteks B (6,2)
| L = 0 | xmin = 6 | 6 > -8 |
| R = 0 | xmax = 6 | 6 < 8 |
| B = 0 | ymin = 2 | 2 > -8 |
| T = 0 | ymax = 2 | 2 < 8 |
Region code dari verteks B = 0000
hasil region vertex A dan B adalah 0000 dan 0000 sehingga jika dibuktikan dengan cara 0000 AND 0000 maka akan menghasilkan 0000, region code 0000 berarti garis berada di dalam viewport dan tidak perlu dipotong
2. Garis CD (-2,6)(-3,9)
- Verteks C (-2,6)
|
Region code dari verteks C = 0000
- Verteks D (-2,9)
| L = 0 | xmin = -2 | -3 > -8 |
| R = 0 | xmax = -3 | -3 < 8 |
| B = 0 | ymin = 9 | 9 > -8 |
| T = 1 | ymax = 9 | 9 > 8 |
Region code dari vertex D = 1000
Karena region code vertex D tidak bernilai 0000, maka kemungkinan garis CD bersifat partially visible(garis yang hanya terlihat sebagian) dan perlu di potong,
- Titik potong pada garis CD (-2,6)(-3,9)
Region code 1000 untuk verteks D(-3,9)
T = 1 à Karena T=1, maka yang dicari adalah xp2.
Maka titik potongnya adalah (xp2, ymax) = (-2.6 , 8 )
3. Garis EF (-4,-9)(-9,-3)
- Verteks E (-4,-9)
| L = 0 | xmin = -4 | -4 > -8 |
| R = 0 | xmax = -4 | -4 < 8 |
| B = 1 | ymin = -9 | -9 < -8 |
| T = 0 | ymax = -9 | -9 < 8 |
Region code dari verteks E = 0100
- Verteks F (-9,-3)
| L = 1 | xmin = -9 | -9 < -8 |
| R = 0 | xmax = -9 | -9 < 8 |
| B = 0 | ymin = -3 | -3 > -8 |
| T = 0 | ymax = -3 | -3 < 8 |
Region code dari vertex F = 0001
Kedua vertex tidak menghasilkan kode 0000 tetapi jika keduanya dilakukan operasi AND maka akan menghasilkan 0000 (0100 AND 0001 = 0000), maka kemungkinan ada garis yang perlu dipotong juga.
Titik potong pada garis EF (-4,-9) (-9,-3)
B = 1, maka yang dicari adalah xp1.
Maka titik potongnya adalah (xp1, ymin) à (-4.03, -8)
L = 1, maka yang dicari adalah yp1.
Maka titik potongnya adalah (xmin, yp1) à (-8, -4.2)
Ada 2 titik potong pada garis EF yaitu (-4.03, -8) dan (-8, -4.2)
4. Garis GH (2,-9)(6,-9)
- Verteks G (2,-9)
| L = 0 | xmin = 2 | -2 > -8 |
| R = 0 | xmax = 2 | -2 < 8 |
| B = 1 | ymin = -9 | -9 < -8 |
| T = 0 | ymax = -9 | -9 < 8 |
Region code dari vertex G = 0100
- Verteks H (6,-9)
| L = 0 | xmin = -6 | -6 > -8 |
| R = 0 | xmax = -6 | -6 < 8 |
| B = 1 | ymin = -9 | -9 < -8 |
| T = 0 | ymax = -9 | -9 < 8 |
Region code dari vertex H = 0100
Kedua vertex dari garis GH mempunyai region code 0100, jika dilakukan operasi AND dengan keduanya maka akan dihasilkan 0100 (0100 AND 0100 = 0100), dan arti dari region code 0100 adalah garis terletak dibawah viewport, jadi garis tidak ditampilkan (fully invisible).
Sumber : aokihayyi







