Pendahuluan
Transformasi 2D adalah suatu model atau bentuk atau teknik
memindahkan atau mengubah nilai posisi objek dalam sistem koordinasi 2
dimensi. Pemindahan objek ini dapat diartikan sebagai pemindahan titik.
Untuk melakukan pemindahan digunakan vektor dan matrix, di mana
vektor menunjukkan titik dan matrix adalah transformasinya. Hasil dari
perkalian vektor dan matrix tersebut adalah hasil transformasinya.
Transformasi dalam grafika komputer terdiri dari:
a. Translasi,
b. Scaling,
c. Rotasi.
Transformasi 2D dapat dilakukan dengan menggunakan perkalian
antara matriks transformasi dan vector posisi dari setiap titik pada objek.
Dapat ditulis dengan:
−
v hasil = A.v −posisi
Translasi adalah perpindahan obek dari titik P(x,y) ke titik P’(x’,y’)
secara linier. Dapat ditulis dengan:
x’ = x + dx
y’ = y + dy
Scaling adalah perpindahan objek dari titik P ke titik P’ sebanyak m
kali titik P. Dapat ditulis dengan:
P’(x’,y’) = m.P(x,y)
Rotasi adalah penpindahan objek dari titik P’(x’,y’) yang berupa
pemindahan berputar sebesar sudut θ. Dapat ditulis dengan:
x’ = x.cos θ
y’ = y.sin θ
Komposisi transformasi adalah menggabungkan beberapa
transformasi sehingga dapat menghasilkan bentuk transformasi yang lebih
kompleks. Komposisi transformasi dapat dilakukan dengan mengalikan
matriks-matriks dari transformasi yang digabungkan.
Bab II
Pembahasan
A. Struktur data dan perubahannya
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:
1) Struktur data titik 2D,
2) Struktur data vektor 2D,
3) Struktur data matrix 2D.
B. Translasi
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
atau dapat dituliskan dengan:
( ) =( )+( )
x'
y'
x
y
dx
dy
P’(x’,y’)
dy
P(x,y) dx
1 0 d x
T = 0 1 d y
0 0 1
1 0 0
I = 0 1 0
0 0 1
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;
Implementasi fungsi untuk membuat matriks transformasi translasi
adalah sebagai berikut:
C. Scaling
Scaling m adalah perpindahan objek dari titik P ke titik P’, di mana
jarak titik P’ adalah m kali titik P.
P’(x’,y’)
P(x,y)
my.y
mx.x
x
x’ = mx . x
y’ = my . y
Proses scaling dengan menggunakan definisi vektor2D dapat
dituliskan dengan:
x ' m x .x m x .x + 0. y + 0.1 m x 0 0
y ' = m . y = 0.x + m . y + 0.1 = 0 my 0
y y
1 1 0.x + 0. y + 1.1 0
0 1
v 1 ' m x 0 0 v1
v ' = 0 m 0 v
2 y 2
1 0 0 1 1
Matriks transformasi dari scaling:
m x 0 0
S = 0 my 0
0 0 1
Implementasi matriks transformasi untuk scaling adalah sebagai
berikut:
D. Rotasi
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). Rotasi ini dapat digambarkan sebagai berikut:
P’(x’,y’)
y
P(x,y)
θ
x
Operasi rotasi dapat diuraikan sebagai berikut:
1. Rotasi dari titik P yang berada di sumbu X, P(x,0) menjadi P’(x’,y’)
dapat digambarkan dengan:
y
x’=x.cos(θ)
y’=x.sin(θ)
P’(x’,y’)
θ
x
Dengan operasi matrix dapat dituliskan: P(x,0)
cos(θ ) 0
Rx =
sin (θ ) 0
x’=-y.sin(θ)
y’=y.cos(θ) P(x,0) P’(x’,y’)
x
Dengan operasi matrix dapat dituliskan:
0 − sin (θ )
Ry =
0 cos(θ )
x’ = x.cos(θ) – y.sin(θ)
y’ = x.sin(θ) + y.cos(θ)
Operasi rotasi dapat dituliskan dengan:
cos(θ ) − sin (θ ) 0
R = sin (θ ) cos(θ ) 0
0 0 1
c.m[i][j]+=a.m[i][k]*b.m[k][j];
}
}
return c;
}
Bab III
Program
Program membentuk transformasi gambar 2D:
#include <GL/glut.h>
#include <math.h>
typedef struct{
float x,y;
}point2D_t;
typedef struct{
float r,g,b;
}color_t;
typedef struct{
float v[3];
}vector2D_t;
typedef struct{
float m[3][3];
}matrix2D_t;
void pindah(void)
{
glClear(GL_COLOR_BUFFER_BIT);
color_t merah={1,0,0};
color_t kuning={1,1,0};
point2D_t a={0,0},b={50,0},c={25,25};
vector2D_t a1=point2vector(a);
vector2D_t b1=point2vector(b),c1=point2vector(c);
a1 = translation(30,40)*a1;
b1 = translation(30,40)*b1;
c1 = translation(30,40)*c1;
a=vector2point(a1);
b=vector2point(b1);
c=vector2point(c1);
point2D_t segitiga[3];
segitiga[0]=a;
segitiga[1]=b;
segitiga[2]=c;
setColor(merah);
drawPolygon(segitiga,3);
glutSwapBuffers();
}
void skala(void)
{
glClear(GL_COLOR_BUFFER_BIT);
color_t merah={1,0,0};
color_t kuning={1,1,0};
point2D_t a={0,0},b={50,0},c={25,25};
vector2D_t a1=point2vector(a);
vector2D_t b1=point2vector(b),c1=point2vector(c);
b1 = scaling(5,1)*b1;
c1 = scaling(5,1)*c1;
a=vector2point(a1);
b=vector2point(b1);
c=vector2point(c1);
point2D_t segitiga[3];
segitiga[0]=a;
segitiga[1]=b;
segitiga[2]=c;
setColor(merah);
drawPolygon(segitiga,3);
glutSwapBuffers();
}
void rotasi(void)
{
glClear(GL_COLOR_BUFFER_BIT);
color_t merah={1,0,0};
color_t kuning={1,1,0};
point2D_t a={0,0},b={50,0},c={25,25};
vector2D_t a1=point2vector(a);
b1=point2vector(b),c1=point2vector(c);
b1 = rotation(45)*b1;
c1 = rotation(45)*c1;
a=vector2point(a1);
b=vector2point(b1);
c=vector2point(c1);
point2D_t segitiga[3];
segitiga[0]=a;
segitiga[1]=b;
segitiga[2]=c;
setColor(merah);
drawPolygon(segitiga,3);
glutSwapBuffers();
}
void pindahskala(void)
{
glClear(GL_COLOR_BUFFER_BIT);
color_t merah={1,0,0};
color_t kuning={1,1,0};
point2D_t a={0,0},b={50,0},c={25,25};
vector2D_t a1=point2vector(a);
vector2D_t b1=point2vector(b),c1=point2vector(c);
matrix2D_t hasil;
hasil= translation(30,50)*scaling(5,1);
b1 = hasil*b1;
c1 = hasil*c1;
a=vector2point(a1);
b=vector2point(b1);
c=vector2point(c1);
point2D_t segitiga[3];
segitiga[0]=a;
segitiga[1]=b;
segitiga[2]=c;
setColor(merah);
drawPolygon(segitiga,3);
glutSwapBuffers();
}
Sebelum di translasi:
Sebelum di skala:
Setelah dirotasi sejauh 45° dengan matrix rotation(45°) dengan sumbu putar
(0,0):
Output jika menggunakan fungsi pindahskala dengan
glutIdleFunc(pindahskala) dan glutDisplayFunc(pindahskala) adalah sebagai
berikut:
Sebelum di transformasi:
Kelompok II:
•Jackson (52007033)
•Johan Liemena (52007036)
•Pieter Wonggianto (520070xx)
•Taufik Rahmanto (520070xx)