Pages

Kamis, 31 Maret 2011

Tugas Grafika : " Transformasi Obyek Dua Dimensi "

     Grafika computer merupakan bidang yang menarik minat banyak orang. Salah satu sub bagian dari grafika adalah pemodelan objek. Dalam pemodelan objek 2D, berbagai objek dimodifikasi dengan melakukan berbagai operasi fungsi atau operasi transformasi geometri. Transformasi ini dapat berupa transformasi dasar ataupun gabungan dari berbagai transformasi geometri. Transformasi ini dikenal dengan Transformasi affine. Pada dasarnya, transformasi merupakan suatu operasi modifikasi bentuk objek tanpa merusak bentuk dasar dari objek. Salah satu contoh transformasi adalah transformasi dari window ke viewport.

         Pada Viewport, Objek yang akan digambar pada layar biasanya mempunyai ukuran yang jauh lebih besar dibanding dengan ukuran layar, sehingga perlu dilakukan pemetaan transformasi yang memungkinkan objek tersebut bisa seluruhnya digambar dilayar, tetapi pada layar dengan koordinat yang terbatas, dan biasanya dibatasi oleh sebuah kotak yang disebut windows, sedangkan layarnya tersebut disebut Viewport. Proses transformasi dari windows ke viewport dapat dilhat pada gambar berikut :

1. Langkah-Langkah Transformasi Viewing 2 Dimensi
1.  Pembentukan scene pada WC menggunakan output primitif atribut.
2.  Untuk mendapatkan orientasi tertentu dari window, maka ditentukan sistem VC 2 dimensi pada WC. Frame digunakan untuk melengkapi penentuan orientasi dari windows persegi empat . Setelah frame dibentuk dapat ditransformasikan ke dalam WC untuk menampilkan koordinat.
3.  Kemudian viewport ditentukan dalam normalized NVC (pada batasan antara 0 dan 1) dan memetakan deskripsi VC dari scene pada Normalized Coordinate.
4.  Akhirnya dilakukan clipping (pemotongan) pada semua gambar yang ada diluar viewport.
 1.  Macam-macam transformasi:
1.  Transformasi Objek, yang ditransformasikan titik-titik yang menyusun objek tersebut.
2.  Transformasi Koordinat, yang diubah system koordinatnya sehingga objek mengalami transformasi dikarenakan perubahan system koordinat tersebut.
2.  Tujuan Transformasi :
1.  Merubah atau menyesuaikan komposisi pandangan.
2.  Memudahkan membuat objek yang simetris
3.  Melihat objek dari sudut pandang berbeda
4.  Memindahkan satu atau beberapa objek dari satu tempat ke tempat lain, biasanya digunakan pada animasi computer.
3.  Transformasi dasar pada objek dua dimensi terdiri dari :
TRANSLASI
Translasi merupakan suatu proses yang menyebabkan perpindahan objek dari satu titik ke titik lain. Translasi dilakukan dengan penambahan translasi pada suatu titik koordinat dengan translasi vector yaitu (trx,try), dimana trx adalah translation vector menurut sumbu x sedangkan try adalah translasi vector terhadap sumbu y.
SKALA
Transformasi skala adalah perubahan ukuran suatu objek. Penskalaan dilakukan untuk memperbesar atau memperkecil gambar
ROTASI
Rotasi merupakan bentuk transformasi berupa pemutaran objek, dilakukan dengan menambahkan besaran pada absis X dan ordinat Y.Rotasi dua dimensi pada suatu objek akan memindahkan objek tersebut menurut garis melingkar. Pada bidang xy.
SHEARING
Shearing mempunyai beberapa pengertian, antara lain :
  • Shearing adalah bentuk transformasi yang membuat distorsi dari bentuk suatu objek, seperti menggeser sisi tertentu.
  • Shearing adalah suatu proses untuk mentransformasikan objek dengan cara “membebani” objek tersebut kea rah tertentu, sehingga dihasilkan suatu objek yang distorsi.
Dua macam shear yang umum adalah shear menurut sumbu x dan shear menurut sumbu y.
PROJECT : TRANSFORMASI 2D
1.  Terdapat pilihan tombol Atas, Kiri, Kanan dan Bawah
2.  Terdapat sebuah Image untuk menampilkan objek 2 Dimensi yang akan bergeser sesuai dengan nama tombol yang ditekan. (Ada 4 tombol geser)
3.  Jika tombol Kiri ditekan objek bergeser ke kiri.
4.  Jika tombol Kanan ditekan objek bergeser ke kanan
5.  Jika tombol Atas ditekan objek bergeser ke atas.
6.  Jika tombol Bawah ditekan objek bergeser ke bawah
7.  Terdapat 2 tombol putar, yakni berputas di cartesius dan berputar di tengah titik objek.
8.  Buka C++ Builder dan buat tampilan seperti pada gambar berikut:


SCRIPT Program:

<UNIT1.CPP>:
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include “Unit1.h”
#pragma package(smart_init)
#pragma resource “*.dfm”
TForm1 *Form1;
struct Elemen { float x,y ;} ;
Elemen Objek[6];
//========================================================================
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//========================================================================
void __fastcall TForm1::FormShow(TObject *Sender)
{ int i;
Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);
Image1->Canvas->MoveTo(Objek[5].x,Objek[5].y);
for (i=1;i<=5;i++){ Image1->Canvas->LineTo(Objek[i].x,Objek[i].y);};
}
//========================================================================
void __fastcall TForm1::FormActivate(TObject *Sender)
{ Objek[1].x = 100; Objek[1].y = 50;
Objek[2].x = 50; Objek[2].y = 100;
Objek[3].x = 100; Objek[3].y = 100;
Objek[4].x = 100; Objek[4].y = 150;
Objek[5].x = 150; Objek[5].y = 100;
FormShow(Sender);
}
void __fastcall TForm1::ButtonkananClick(TObject *Sender)
{ int i;
for (i=1;i<=5;i++){ Objek[i].x+=5;};
FormShow(Sender);
}
//========================================================================
void __fastcall TForm1::ButtonbawahClick(TObject *Sender)
{ int i;
for (i=1;i<=5;i++){ Objek[i].y+=5;};
FormShow(Sender);
}
//========================================================================
void __fastcall TForm1::Button1Click(TObject *Sender)
{ Elemen TempObjek[6];
int i; float Sdt;
for (i=1;i<=5;i++)
{ Objek[i].x=Objek[i].x-Image1->Width / 2;
Objek[i].y=Objek[i].y-Image1->Height / 2;
Sdt=10*M_PI/180;
TempObjek[i].x=(Objek[i].x*cos(Sdt)-Objek[i].y*sin(Sdt));
TempObjek[i].y=(Objek[i].x*sin(Sdt)+Objek[i].y*cos(Sdt));
Objek[i]=TempObjek[i];
Objek[i].x=Objek[i].x+Image1->Width / 2;
Objek[i].y=Objek[i].y+Image1->Height / 2;
} FormShow(Sender);
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{ Elemen TempObjek[6];
int i,n,m; float Sdt;
for (i=1;i<=5;i++)
{
n = Objek[3].x;
m = Objek[3].y;
Objek[i].x=Objek[i].x-n;
Objek[i].y=Objek[i].y-m;
Sdt=10*M_PI/180;
TempObjek[i].x=(Objek[i].x*cos(Sdt)-Objek[i].y*sin(Sdt));
TempObjek[i].y=(Objek[i].x*sin(Sdt)+Objek[i].y*cos(Sdt));
Objek[i]=TempObjek[i];
Objek[i].x=Objek[i].x+n;
Objek[i].y=Objek[i].y+m;
}
FormShow(Sender);
}
void __fastcall TForm1::ButtonkiriClick(TObject *Sender)
{ int i;
for (i=1;i<=5;i++){ Objek[i].x-=5;};
FormShow(Sender);
}
//========================================================================
void __fastcall TForm1::ButtonatasClick(TObject *Sender)
{
int i;
for (i=1;i<=5;i++){ Objek[i].y-=5;};
FormShow(Sender);
}
//=======================================================================
<UNIT1.H>:
//—————————————————————————
#ifndef Unit1H
#define Unit1H
//—————————————————————————
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//—————————————————————————
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPanel *Panel1;
TImage *Image1;
TButton *Button1;
TButton *Button2;
TButton *Buttonatas;
TButton *Buttonbawah;
TButton *Buttonkiri;
TButton *Buttonkanan;
void __fastcall FormActivate(TObject *Sender);
void __fastcall ButtonkananClick(TObject *Sender);
void __fastcall ButtonbawahClick(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall ButtonkiriClick(TObject *Sender);
void __fastcall ButtonatasClick(TObject *Sender);
void __fastcall FormShow(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//—————————————————————————
extern PACKAGE TForm1 *Form1;
//—————————————————————————
#endif
Jalankan program diatas dan hasil yang akan kita dapatkan seperti gambar berikut:



2 komentar: