Jumat, 29 Oktober 2010

Line Clipping Sutherland Algorithm

Line Clipping dan Polygon Clipping

· Line Clipping

Clipping yaitu teknik memotong sebagian bentuk agar terlihat dilayar/ area tertentu, ukuran bentuk yang terlalu besar kadang tidak cukup untuk di perlihatkan seluruhnya.

Ini ada beberapa teknik line clipping diantaranya sebagai berikut :

1. Cohen-Sutherland Line Clipping

2. Liang-Barsky Line Clipping

3. Blinn’s Line Clipping

Adapun teknik yang di gunakan sebagai contoh adalah algoritma Cohen-Sutherland Line clipping :

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.


L

1 apabila x <>

0 apabila x ≥ xmin

R

1 apabila x > xmax

0 apabila x ≤ xmax

B

1 apabila y <>

0 apabila y ≥ ymin

T

1 apabila y > ymax

0 apabila y ≤ ymax

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 kasus :

/* gambar menyusul

Keterangan Gambar :

Xmax = 7 Ymax = 7

Xmin = -7 Ymin = -7

Garis AB (2,3) (5,3) Garis EF (-8,-5) (-3,-8)

Garis CD(-9,3) (4,3) Garis GH (3,-8) (7,-8)

Ø Menentukan Region code dari masing- masing garis :

1. Garis AB

Verteks A= (2,3)

L

=

0

Karena X > Xmin = 2 > -7

R

=

0

Karena X < xmax =" 2">

B

=

0

Karena Y > Ymin = 3 > -7

T

=

0

Karena Y < ymax =" 3">

Jadi Region code dari vertex A adalah 0000

Verteks B = (5,3)

L

=

0

Karena X > Xmin = 5 > -7

R

=

0

Karena X < xmax =" 5">

B

=

0

Karena Y > Ymin = 3 > -7

T

=

0

Karena Y < ymax =" 3">

Jadi Region code dari vertex B adalah 0000

Kesimpulan : Karena Region code dari verteks A dan B adalah 0000, maka garis AB bersifat Fully Visible. Maka dapat dibuktikan bahwa garis AB terletak dalam viewport secara keseluruhan dengan menggunakan operasi AND (0000 AND 0000 = 0000).

2. Garis CD

Verteks C (-9,3)

L

=

1

Karena X < xmin =" -9">

R

=

0

Karena X < xmax =" -9">

B

=

0

Karena Y > Ymin = 3 > -7

T

=

0

Karena Y < ymax =" 3">

Jadi Region code dari vertex C adalah 1000

Verteks D(4,3)

L

=

0

Karena X > Xmin = 4 < -7

R

=

0

Karena X < xmax =" 4">

B

=

0

Karena Y > Ymin = 3 > -7

T

=

0

Karena Y < ymax =" 3">

Jadi Region code dari vertex D adalah 0000

Kesimpulan : Karena Salahsatu Region code dari verteks C dan D adalah tidak sama dengan 0000, maka garis CD bersifat Partially Visible (Garis hanya terlihat sebagian). Dan garis yg sebagian tidak terlihat pada viewport harus di potong.

ü Menentukan titik Potong

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)


3. Garis EF

Teknik Pemecehannya sama seperti teknik perhitungan perpotongan garis CD. Akan tetapi garis EF memiliki 2 titik potong karena kedua ujung titik berada diluar viewport akan tetapi sebagian garis berada dalam viewport. Dicari titik potong pada tiap verteks yaitu E dan F dicari verteks pada titik potong dengan bit code = 1.

4. Garis GH

Verteks G (3,-8)

L

=

0

Karena X > Xmin = 3 < -7

R

=

0

Karena X < xmax =" 3">

B

=

1

Karena Y < ymin =" -8"> -7

T

=

0

Karena Y < ymax =" -8">

Jadi Region code dari vertex G adalah 0010

Verteks H (7,-8)

L

=

0

Karena X > Xmin = 7 < -7

R

=

0

Karena X < xmax =" 7">

B

=

1

Karena Y < ymin =" -8"> -7

T

=

0

Karena Y < ymax =" -8">

Jadi Region code dari vertex G adalah 0010

Kesimpulan : Karena Region code dari verteks G dan H adalah tidak sama dengan 0000, maka garis GH bersifat Fully Invisible. Garis tidak terlihat sama sekali pada viewport sehingga garis tidak perlu digambar.


Tidak ada komentar: