Monday 16 March 2015

Komputer Grafis 6

Kembali pada pembahasan Komputer Grafis. Pada pertemuan ini masih dibahas seputar transformasi geometri. Jika pada pertemuan-pertemuan yang lalu dibahas mengenai translasi, scaling, dan rotasi, maka pada pertemuan ini akan dibahas mengenai tranasformasi geometri komposit. Apa yang dimaksud dengan komposit?

Jika sebelumnya kita melakukan scaling di luar titik (0,0) maka objek 2D yang kita perbesar atau perkecil akan bergeser saat dilakukan scaling (perbesar atau perkecil). Sedangkan jika kita melakukan scaling atau rotasi pada saat objek berada di titik pusat (0,0) yaitu di tengah-tengah grafik pada koordinat cartesius, objek yang di scaling akan membesar atau mengecil tanpa bergeser. Mengapa hal itu dapat terjadi? Seperti itulah komposit, jadi kita akan membuat objek yang disclaing ataupun dirotasi tetapi tidak bergeser dan tetap di posisi itu hanya objeknya membesar, mengecil, atau berputar. Mengapa bisa tidak bergeser? karena titik x dan y berada di titik (0,0) jika kita masukkan pada rumus scaling maupun rotasi hasilnya akan didapat angka 0 (nol), jadi tidak aka bergeser.  Hal ini terlihat jelas pada saat kita melakukan rotasi. Pada pertemuan 5, kita melakukan rotasi, namun rotasi itu seperti bumi yang mengelilingi matahari. Untuk membuat objek berputar seperti bumi berputar pada porosnya harus dilakukan komposit. Seperti itu kurang lebih ilustrasinya.

Untuk melakukan komposit, salah satu cara yang dibahas pada pertemuan ini adalah dengan perhitungan menggunakan pivot point atau sederhananya sama dengan titik pusat dari objek yang akan dieksekusi baik scalling maupun rotasi.
Ada tiga cara untuk melakukan komposit:

Cara Pertama
Lakukan transformasi translasi satu per satu, setelah itu lakukan transformasi penyusun transformasi komposit secara berurutan (misalnya: scaling atau rotasi), tapi ingat selama proses komposit ini objek jangan digambar. Setelah selesai melakukan transformasi komposit secara berurutan, lakukan transformasi translasi untuk mengembalikan objek ke posisi semula, baru gambar objeknya.

Cara Kedua
Cari rumus kompositnya (Hati-hati, cara ini tidak fleksibel).Untuk cara ini diperlukan perhitungan matriks homogen berordo 3x3 (untuk objek 2D). disebut juga dengan Affine Matriks. Selama ini kita mengenal rumus untuk translasi, scaling, dan rotasi. Translasi: X’ = X + TX  dan  Y’ = Y + TY didapat rumus ini dari matriks di bawah ini:


Dari matriks di atas kita dapat melihat hasilnya yaitu X’ = X + TX dan Y’ = Y + TY dan 1=1. Maka didapatlah rumus translasi untuk X’ dan Y’.

Scaling: X’ = X * SX dan Y’ = Y * SY didapat dari matriks di bawah ini:


Dari matriks di atas, didapatlah rumus untuk X’ dan Y’

Rotasi: X’ = X.Cosθ – Y.Sinθ dan Y’ = X.Sinθ + Y.Cosθ diperoleh dari matriks berikut:

Dari perhitungan matriks di atas lah didapatkan rumus rotasi

Cara Ketiga
Akan dibahas pada pertemuan selanjutnya.

Pada pertemuan 6 ini akan dibahas komposit dengan menggunakan cara pertama. Ilustrasi perhitungannya dapat dilihat di bawah ini:



Gambar di atas adalah merupakan posisi awal segitiga. Segitiga tersebut akan discaling dan hasilnya segitiga tersebut tidak berpindah tempat tetapi membesar tetap di titik hitam tersebut.


Yang seperti itulah yang disebut komposit. Seperti apa cara kerja yang pertama. Berikut ilustrasi scaling dari posisi awal (segitiga biru) ke posisi akhir (segitiga merah):


Dari ilustrasi di atas, mula-mula segitiga biru dengan titik hitam dipindahkan ke titik hitam (0,0). Perhatikan gambar tersebut. Setelah berpindah ke titik tengah (0,0) segitiga baru discaling perbesar yang menghasilkan segitiga merah. Langkah terakhir, segitiga merah akan dikambalikan ke posisi titik hitam awal (tempat segitiga biru). Yang peru digambarkan dalam program nantinya hanya posisi awal dan posisi akhir, selama proses jangan digambarkan. Ilustrasi di atas hanya unuk menjelaskan alur proses scaling, jadi digambarkan dan dibedakan warnanya agar lebih mudah untuk dilihat perubahannya.

Saya rasa untuk landasan teori mengenai komposit cukup sampai di sini. Selanjutnya akan dibahas prakteknya dengan menggunakan delphi 7. Masih sama seperti pada pertemuan sebelumnya, kita bisa menggunakan form sebelumnya hanya tinggal menambahkan beberapa label, edit box dan button untuk pivot poin. Pada pertemuan ini akan dibuat di hal yaitu pivot point rotasi untuk rotasi objek pada titik pusat dan pivot point scaling untuk membuat objek membesar da mengecil dengan acuan titik pusat. Seperti biasa kita harus menyiapkan form untuk interfacenya. Tampilannya seperti berikut ini:


Kita dapat mendesain ulang seperti tampilan di atas atau langsung menambahkan dari form yang sudah kita buat di pertemuan sebelumnya. Yang penting button yang diberi tanda seperti gambar di atas kita tambahkan pada form kerja kita.

Langkah selanjutnya kita tambahkan variabel xpivot dan ypivot untuk menampung nilai yang didapatkan dari perhitungan dengan X1, X2, Y1, dan Y2. Berikut deklarasinya:


Jika kita membuat form baru tanpa melanjutkan dari pertemuan sebelumnya, di atas adalah deklarasi untuk variabel penampung yang akan kita gunakan nantinya dalam membuat aplikasi pivot point ini. Jika penulisan kode program belum jelas, tidak usah khawatir, pada akhir pembahasan akan ada full kode programnya untuk pembuatan form pada pertemuan ini. Yang sekarang dijelaskan hanya potongan program yang bersangkutan dengan pembahasan pertemuan ini dan keterangan fungsi dan logika jalannya program. Lanjut ke langkah selanjutnya yaitu membuat fungsi atau prosedur untuk gambar, button gambar di sini kembali dibahas karena pada langkah ini saat kita menggambarkan objek, nilai xipvot dan ypivot akan langsung dihitung dan akan langsung dicetak pada edit box untuk Xpivot dan Ypivot. Berikut ini adalah kode programnya:


Dari kode program di atas, maksdunya adalah bahwa pada saat kita menggambar, nilai pivot point untuk x dan y sudah langsung dibuat atau dihitung. Dan langsung dicetak atau diisi ke editbox XPivot dan YPivot. Sehingga pada saat kita jalankan, tampilannya adalah sebagai berikut:

Nilai XPivot dan YPivot akan terisi secara otomatis saat button gmbar diklik.


Langkah selanjutnya adalah untuk fungsi atau prosedur button Pivot Point Scaling:


Untuk kode scaling dan translasi pertama tanpa penulisan image line to juga bisa, karena seharusnya hnya ditampung pada variabel dan pada saat translasi untuk kembali ke posisi awal baru digambar (ingat aturan cara 1). Nanti akan dituliskan kode program tanpa line to selama proses pada bagian pivot point rotasi. Sebenarnya ini hanya pengembangan dari rumus translasi, scaling, dan rotasi yang telah kita gunakan untuk membuat kode program pada pertemuan-pertemuan yang lalu. Kita lihat tampilannya adalah sebagai berikut:



Terlihat bahwa objek bintang bertambah besar dan tidak bergeser seperti saat kita menekan tombol scaling. Barikutnya akan dibahas untuk pembuatan pivot point rotasi:


Terlihat dari kode di atas bahwa menggambar hanya dilakukan pada saat objek dikembalikan ke posisi semula. Hasil tampilannya adalah sebagai berikut:



Dari hasil di atas terlihat bahwa bintang berputar 30° tanpa berpindah tempat, hanya berputar para titik tengahnya. Berikut ini adalah kode program keseluruhan dari praktikum ini:











Demikian pembahasan pada komputer grafis 6 ini. Untuk rotasi masih ada kesalahan yang membuat perputaran bintang menjadi tidak sempurna. Untuk itu pada pertemuan selanjutnya akan coba untuk diperbaiki kesalahan ini.

Tetap jadi pembaca setia blog ini ya.. semoga bisa bermanfaat.. ^.^

No comments:

Post a Comment