Transformasi 2D Kelompok II : Jackson (52007033) Johan Liemena (52007036) Pieter Wonggianto (520070xx) Taufik Rahmanto (520070xx)
Transformasi 2D •
Transformasi 2 dimensi adalah suatu model atau bentuk atau teknik memindahkan atau mengubah nilai posisi objek dalam sistem koordinat 2 dimensi. Pemindahan objek ini dapat diartikan sebagai pemindahan titik. Untuk dapat melakukan pemindahan maka digunakan 2 variabel dasar dalam matematika yaitu vektor dan matriks. Vektor menunjukkan titik atau objek yang dinyataka dalam vektor posisi v=(vx,vy,vz). Sedangkan matriks adalah sebuah operator yang akan memindahkan objek. Dari matriks inilah bermacam-macam transformasi dapat dibentuk. Dengan demikian dalam transformasi ini beberapa struktur harus dibuat terlebih dahulu sebelum diimplementasikan ke dalam program, yaitu:
•
– – –
Struktur data titik 2D, Struktur data vektor 2D, Struktur data matrix 2D.
Transformasi 2D •
Struktur data dari titik 2D dapat didefinisikan dengan: typedef struct{ float x,y; }point2D_t;
Transformasi 2D •
Struktur data dari vector 2D dapat didefinisikan dengan: typedef struct{ float v[3]; }vector2D_t;
Transformasi 2D •
Struktur data dari matrix 2D dapat didefinisikan dengan: typedef struct{ float m[3][3]; }matrix2D_t;
Transformasi 2D •
Prinsip kerja Transformasi 2D : • • • •
Mengubah struktur data titik ke struktur data vektor, Menghitung transformasi, Mengubah struktur data vektor ke struktur data titik, Menggambar objek.
Transformasi 2D •
Fungsi mengubah titik menjadi vector vector2D_t point2vector(point2D_t pnt) { vector2D_t vec; vec.v[0]=pnt.x; vec.v[1]=pnt.y; vec.v[2]=1.; return vec; }
Transformasi 2D •
Fungsi mengubah vector menjadi menjadi titik: point2D_t vector2point(vector2D_t vec) { point2D_t pnt; pnt.x=vec.v[0]; pnt.y=vec.v[1]; return pnt; }
Matriks Identitas •
Sebelum melakukan implementasi matriks pada transformasi 2D terlebih dahulu ditentukan matriks identitasnya. Matriks identitas adalah matriks yang nilai diagonal utamanya sama dengan satu dan yang lainnya nol.
Matriks Identitas • Matrix identitas 2D adalah: 1 0 0 I = 0 1 0 0 0 1
Matriks Identitas • Implementasi matrix identitas 2D adalah: matrix2D_t createIdentity(void) { matrix2D_t u; int i,j; for (i=0;i<3;i++) { for (j=0;j<3;j++) u.m[i][j]=0.; u.m[i][i]=1.; } return u; }
Translasi 2D •
Translasi adalah perpindahan objek dari titik P(x,y) ke titik P’(x’,y’) secara linier. Dalam translasi 2D diperlukan dua parameter, yaitu pemindahan ke arah smbu x dan pemindahan ke arah sumbu y. Translasi (dx,dy) didefinisikan dengan: • x’ = x+dx • y’ = y+dy
Translasi 2D • Matrix translasi 2D adalah: 1 0 d x T = 0 1 d y 0 0 1
Translasi 2D • Implementasi matrix translasi 2D adalah: matrix2D_t translation(float dx, float dy) { matrix2D_t trans=createIdentity(); trans.m[0][2]=dx; trans.m[1][2]=dy; return trans; }
Scaling 2D • Scaling m adalah perpindahan objek dari titik P ke titik P’, di mana jarak titik P’ adalah m kali titik P. • Proses scaling dapat didefinisikan dengan: • x’ = mx . x • y’ = my . y
Scaling 2D • Matrix scaling 2D adalah: m x S=0 0
0 my 0
0 0 1
Scaling 2D •
Implementasi matriks transformasi untuk scaling adalah sebagai berikut: matrix2D_t scaling(float mx, float my) { matrix2D_t scale=createIdentity(); scale.m[0][0]=mx; scale.m[1][1]=my; return scale; }
Rotation 2D •
•
Rotasi adalah perpindahan objek dari titik P(x,y) ke titik P’(x’,y’) yang berupa pemindahan berputar sebesar sudut θ dengan sumbu rotasi pada titik (0,0). Dapat ditulis dengan: • x’ = x.cos(θ) – y.sin(θ) • y’ = x.sin(θ) + y.cos(θ)
Rotation 2D • Matrix rotasi 2D adalah: cos(θ ) − sin (θ ) 0 ( ) ( ) R = sin θ cos θ 0 0 0 1
Rotation 2D •
Implementasi matriks transformasi untuk rotation adalah sebagai berikut: matrix2D_t rotation(float theta) { matrix2D_t rotate=createIdentity(); float cs=cos(theta); float sn=sin(theta); rotate.m[0][0]=cs; rotate.m[0][1]=-sn; rotate.m[1][0]=sn; rotate.m[1][1]=cs; return rotate; }
Perkalian Matrix •
Dalam perkalian matriks ini dikenal 2 jenis, yaitu: – Perkalian matrix dengan vector untuk menghasilkan vector dari titik hasil transformasi. – Perkalian matrix dengan matrix untuk menghasilkan matrix transformasi yang baru.
Perkalian Matrix Dengan Vector •
Implementasi perkalian matrix dengan vector: vector2D_t operator * (matrix2D_t a,vector2D_t b) { vector2D_t c; int i,k; for (i=0;i<3;i++) { c.v[i]=0; for(k=0;k<3;k++) c.v[i]+=a.m[i][k]*b.v[k]; } return c; }
Perkalian Matrix Dengan Matrix •
Implementasi perkalian matrix dengan matrix: matrix2D_t operator * (matrix2D_t a,matrix2D_t b) { matrix2D_t c; int i,j,k; for (i=0;i<3;i++) { for (j=0;j<3;j++){ c.m[i][j]=0; for (k=0;k<3;k++) c.m[i][j]+=a.m[i][k]*b.m[k][j]; } } return c; }
Thank You