PEMENTUKN MESH POLYGON SEGITIG ERSRKN POLYGON NON-ONVEX Jimmy, S.T. Jurusan Teknik Informatika, Universitas Surabaya jimmyoentung@gmail.com STRT polygon is said to be convex if a line connecting any two points within the polygon lies entirely within it[hill, 2001]. onvexity is required when we want to fill a polygon with a single solid color or pattern. On the other hand, graphic libraries, such as OpenGL, can only fill convex polygons. Problem arises when we need to draw a filled (solid colored or patterned) non-convex polygon. One way to finish this task is by dividing the non-convex polygon into several convex polygons. To ensure that all polygons are convex, they all must take the forms of triangle polygons. Therefore, the objective of this research is to create an application that is able to divide two dimensional polygons into several triangle polygons. The basic idea of the method used in this research is to connect three consecutive vertexes_ within the polygon observed. Those three connected vertexes will form a new triangle polygon. ll lines that form the new triangle polygon must be assessed to assure that none of them has parts that lie outside the original polygon area. When an appropriate new triangle is acquired, the second vertex of that triangle polygon can be removed from the original polygon. These processes have to be conducted until the observed polygon has only three vertexes left and it will be the last triangle polygon that constructs the triangle mesh. When the routine finished, a triangle mesh that has a shape exactly the same as the original polygon is completed. Now, we can fill the polygon with a solid color or pattern as needed Keywords: Polygon, Non-onvex, Mesh, Triangle, onversion. 1. Pendahuluan Istilah grafika komputer mengacu kepada gambar-gambar yang dibuat dengan atau dihasilkan oleh komputer. Komputer menghasilkan gambar berdasarkan data deskripsi gambar yang ada. Komputer dan manusia mempunyai cara yang berbeda dalam membuat gambar. Komputer memiliki sejumlah batasan dan aturan penggambaran yang harus dipatuhi. Salah satu batasan yang dimiliki grafika komputer adalah kemampuan untuk mengisi polygon dengan warna atau dengan pola tertentu. Graphic Library (kumpulan fungsi yang dapat digunakan untuk menghasilkan grafika komputer) yang beredar saat ini, seperti opengl, hanya dapat melakukan pengisian warna atau pola pada polygon polygon convex [2]. Polygon dikatakan convex apabila sebuah garis yang menghubungkan dua buah titik manapun dari polygon berada seluruhnya diatas polygon tersebut. Gambar 1 menunjukkan contoh polygon convex dan polygon yang tidak convex. Gambar 1. Polygon an Merupakan Polygon onvex. Polygon an ukan Polygon onvex Keterbatasan tersebut menjadi masalah karena tidak semua objek polygon yang harus digambar merupakan polygon convex. Tujuan dari penelitian ini adalah membuat dan mengimplementasikan algoritma yang dapat mengubah sebuah polygon dua dimensi yang tidak convex menjadi sebuah jaringan polygon (mesh) segitiga. Polygon segitiga dipilih karena semua polygon segitiga pasti merupakan sebuah polygon convex. 2. Landasan Teori lgoritma yang dibuat dalam penelitian ini memanfaatkan sejumlah teori yang telah ada. ab Landasan Teori ini akan membahas landasan teori yang digunakan dalam penelitian ini. 2.1. Vektor [1] Vektor adalah objek yang memiliki panjang dan arah. Vektor dapat digunakan untuk mewakili berbagai entiti fisik seperti gaya, perpindahan dan kecepatan. Sebuah vektor sering kali digambarkan sebagai sebuah panah dengan panjang tertentu yang mengarah ke suatu arah. Vektor dapat dianggap sebagai perpindahan dari suatu titik ke titik yang lain. Sehingga dapat dikatakan bahwa perbedaan antara dua titik merupakan sebuah vektor. pabila terdapat titik dan titik maka vektor v dapat diperoleh menggunakan rumus : v = (1) Operasi dasar yang dapat dilakukan pada vektor meliputi operasi penjumlahan dengan vektor lain dan operasi pengalian dengan skalar. Fasilitas lain yang memudahkan penggunaan vektor adalah dot product dan cross product. ot product 114
menghasilkan sebuah skalar. Untuk menghitung dot product dari dua buah vektor, lakukan perkalian setiap pasangan komponen vektor yang berkorespondensi dan jumlahkan hasilnya. ontoh, dot product dari vektor (3,4) dan vektor (1,6) adalah 27. ross product dari dua buah vektor adalah sebuah vektor baru yang tegak lurus terhadap kedua vektor yang dioperasikan. ross product hanya dapat dihasilkan dari vektor vektor tiga demensi. Untuk mendapatkan cross product dari vektor a = (a x, a y, a z ) dan vektor b = (b x, b y, b z ) dapat digunakan rumus berikut a x b = (a y b z a z b y )i + (a z b x a x b z )j + (a x b y a y b x )k (2) 2.2. Pencarian Perpotongan dari ua Garis [2] Permasalahan yang ingin dipecahkan pada sub bab ini adalah: apabila terdapat dua buah garis, tentukan apakah kedua garis tersebut berpotongan, jika mereka berpotongan, tentukan titik potong antar kedua garis tersebut. Misalkan garis pertama memiliki titik ujung dan serta garis lainnya memiliki titik ujung dan. ontoh variasi posisi kedua garis dapat dilihat di Gambar 2. Gambar 2. erbagai ontoh Variasi Posisi ua Garis Setiap garis akan memiliki sebuah garis induk. Garis induk adalah perpanjaangan garis sampai tak terhingga panjangnya. Sehingga kecuali kedua garis saling paralel, garis induk kedua garis akan saling bertumbukan pada suatu titik. Titik tumbuk inilah yang akan dicari pertama kali. Langkah pertama adalah menetapkan representasi parametric untuk tiap garis. pabila adalah segment dari menuju ke dan adalah segment dari menuju ke maka: (t) = + bt (3) (u) = + du (4) imana b = d = menggunakan persamaan (3), kita dapat menelusuri garis dari titik ke titik dengan menggerakkan t dari 0 menuju 1. Hal serupa dapat dilakukan terhadap garis menggunakan persamaan (4). Untuk menelusuri garis induk, nilai t dapat diperluas dari - sampai. pabila garis induk pasti bertumbukan, maka pasti terdapat suatu nilai t dan u dimana persamaan (3) dan (4) akan menghasilkan posisi yang sama: + bt = + du dengan mendifinisikan c =, maka akan didapatkan persamaan berikut : bt = c + du (5) kalikan kedua sisi dengan d untuk menghilangkan komponen d. maka akan didapatkan persamaan berikut: d. bt = d. c pabila d tidak NOL, maka nilai t dapat diperoleh dengan persamaan t = (d. c) / (d. b) (6) Garis dan berpotongan apabila nilai t diperoleh antara 0 sampai 1. pabila d NOL, maka dapat dipastikan bahwa d dan b paralel. Sehingga kedua garis dan tidak akan pernah berpotongan. 3. esain lgoritma Untuk memecahkan masalah pengisian polygon dua dimensi yang tidak convex dengan warna atau pola, dalam penelitian ini penulis membuat sebuah algoritma yang dapat mengubah sebuah polygon menjadi sebuah jaringan jaringan (mesh) polygon segitiga. entuk polygon segitiga dipilih karena semua polygon segitiga merupakan polygon convex. atasan terpenting dalam proses pembentukan mesh polygon segitiga adalah mesh polygon yang dihasilkan harus memiliki bentuk yang sama seperti bentuk polygon awal. Ide dasar algoritma yang akan dibuat adalah mengambil tiga vertex polygon yang berurutan sebagai calon polygon segitiga penyusun mesh polygon. Kemudian calon polygon segitiga tersebut harus diperiksa kelayakannya. alon polygon segitiga dianggap layak apabila tiga garis penyusunnya tidak memotong garis garis penyusun polygon yang lain dan seluruh area polygon segitiga berada diatas polygon awal. pabila calon polygon segitiga layak, maka calon polygon segitiga ditambahkan dalam mesh polygon dan vertex kedua dari calon polygon dihilangkan dari polygon awal. 115
Proses ini dilakukan sampai jumlah vertex yang tersisa pada polygon awal berjumlah 3 buah vertex. Flowchart dari algoritma yang dibuat dapat dilihat pada Gambar 3. Gambar 3. Flow hart lgoritma Pembentukan Mesh Polygon Segitiga Proses penentuan apakah tiga garis penyusun segitiga memotong garis-garis penyusun polygon dilakukan dengan mencari titik potong antara tiap garis segitiga dengan semua garis polygon. Pencarian titik potong dilakukan menggunakan algoritma yang dijelaskan pada sub bab 2.2. Garis 1 dan garis 2 merupakan garis yang terbentuk dari vertex vertex yang berurutan. Sehingga garis 1 dan garis 2 pasti berada di area polygon. Sedangkan garis 3 merupakan garis baru yang dibuat untuk menghubungkan vertex 1 dan 116
vertex 3 dari ketiga vertex calon segitiga. Sehingga hanya garis 3 yang memiliki kemungkinan berada diluar area polygon. Proses penentuan apakah garis 3 berada di dalam polygon dilakukan dengan menggunakan sebuah garis bantu. Garis bantu menghubungkan sembarang titik pada garis 3 dengan sembarang titik yang letaknya lebih jauh dari garis terluar polygon. Setelah garis bantu tercipta, hitung jumlah titik perpotongan garis bantu terhadap polygon. pabila jumlah titik perpotongan genap atau nol, maka dapat dipastikan garis ketiga berada di luar area polygon. pabila garis ketiga berada di dalam polygon, maka jumlah titik perpotongan garis bantu terhadap polygon pasti ganjil. Gambar 4 menunjukkan ilustrasi penggunaan garis bantu. Gambar 4. () Garis antu i alam Polygon Memiliki 3 Titik Tabrak () Garis antu i Luar Polygon Memiliki 2 Titik Tabrak Untuk mempermudah pemahaman algoritma, Gambar 5 akan menunjukkan ilustrasi proses pembentukan mesh polygon segitiga. Garis putus putus adalah garis calon segitiga. Nomor urut digunakan untuk mengurutkan vertex polygon sesuai urutan searah jarum jam. Vertex pertama bisa ditunjuk dari vertex yang manapun pada polygon. Gambar ke-4 menunjukkan calon segitiga yang tidak layak karena garis ketiga berada diluar area polygon awal. Sehingga calon segitiga tidak dipakai dan nomor urut vertex digeser satu posisi. Gambar 5. Ilustrasi Proses Pembentukan Mesh Polygon Segitiga 4. Hasil dan iskusi Penelitian ini diimplementasikan menggunakan Microsoft Visual #.NET dengan.net framework versi 1.1. Untuk menampilkan gambar digunakan library OpenGL. Gambar 6 menunjukkan tampilan aplikasi yang menampilkan hasil pembentukan mesh polygon segitiga. Formasi mesh polygon segitiga sangat bergantung pada vertex yang digunakan sebagai acuan pertama. Sebuah uji coba telah dilakukan untuk memproses polygon yang sama seperti pada Gambar 5. Uji coba kali ini akan menggunakan vertex nomor 2 sebagai acuan pertama. Hasil ujicoba tampak pada Gambar 7. Tampak pada gambar kanan bahwa formasi 117
polygon segitiga penyusun mesh polygon berubah namun secara keseluruhan tetap menghasilkan bentuk yang sama seperti polygon awal. Gambar 6. Hasil Implementasi lgoritma Pembentukan Mesh Polygon Segitiga erdasarkan Polygon. Gambar Kiri Menampilkan Kerangka Mesh Polygon Segitiga. Gambar Kanan Menampilkan Mesh Polygon Segitiga Yang iisi engan Warna Solid. Gambar 7. Mesh Polygon Hasil Ujicoba Menggunakan Vertex Ke 2 Sebagai cuan Pertama lgoritma yang dibuat pada penelitian ini dapat digunakan tidak hanya untuk polygon non-convex namun juga dapat digunakan untuk polygon convex. Gambar 8 menunjukkan hasil uji coba algoritma pada sebuah polygon convex. Gambar 8. Hasil Uji oba Pada Objek Polygon onvex Karena algoritma yang dibuat pada penelitian ini memproses tiap vertex secara berurutan searah jarum jam, maka algoritma yang dihasilkan hanya dapat digunakan untuk memproses polygon sederhana. Sebuah polygon dikatakan sederhana jika tidak ada garis-garis polygon yang saling berpotongan. Gambar 9 menunjukkan contoh polygon yang tidak sederhana. 118
Gambar 9. Polygon Tidak Sederhana 5. Kesimpulan dan Saran Setelah melakukan penelitian ini, diambil beberapa kesimpulan sebagai berikut : lgoritma yang dibuat pada penelitian ini telah berhasil mengubah poligon convex maupun non convex menjadi mesh polygon segitiga yang memiliki bentuk yang sama dengan polygon awal. Formasi polygon segitiga penyusun mesh polygon segitiga bergantung dari vertex yang digunakan sebagai acuan pertama. Meskipun formasi polygon penyusun segitiga berbeda, namun secara keseluruhan tetap menghasilkan bentuk yang sama seperti polygon awal. lgoritma yang dibuat pada penelitian ini hanya dapat digunakan pada polygon dua dimensi sederhana. Keterbatasan tersebut dapat digunakan sebagai sasaran tujuan penelitian lanjutan dari hasil penelitian ini. aftar Pustaka [1] Hill, Jr, F.S. (2001). omputer Graphics Using OpenGL, 2 nd Edition. New Jersey : Prentice Hall [2] Neider, T., avis, T., Woo, M. (1994). OpenGL Programming Guide, The Official Guide to Learning OpenGL, Release 1, ddison-wesley. 119