Anda di halaman 1dari 12

Laporan Praktikum VII

Transformasi 2 Dimensi (Translasi Dan Scalling 2)

“Computer Graphics And Animation”

Nama : Ahlul Muddin


Nim : 1990343013
Kelas : TRKJ 2A
Lab. : Keamanan Jaringan Dan Cloud Computing

Program Studi Teknologi Rekayasa Komputer Jaringan


Jurusan Teknologi Informasi Komputer
Politeknik Negeri Lhokseumawe
2020
HALAMAN PENGESAHAN

Nomor Pratikum : 07/III/TRKJ-2A/2020

Judul Pratikum : “Transformasi 2 Dimensi (Translasi Dan Scalling)”

Penyusun : Ahlul Muddin

Nim : 1990343013

Tanggal praktik : 22 Oktober 2020

Tanggal selesai : 28 Oktober 2020

Tanggal penyerahan : 28 Oktober 2020

Dosen pembimbing : Fachri Yanuar Rudi F, MT.

Nilai :

Keterangan :

Buket rata, 28 Oktober 2020


Penyusun

Ahlul Muddin
Nim : 1990343013
PRAKTIKUM VII
“Transformasi 2 Dimensi (Translasi Dan Scalling 2)”

I. Capaian atau Tujuan Praktikum


Capaian atau tujuan yang diinginkan dalam praktikum ini mahasiswa di harapkan :
1. Mahasiswa mampu membuat struktur data titik dan vector.
2. Mahasiswa mampu membuat prosedur konversi diantara titik dan vector dan
sebaliknya diantara vector dan titik.
3. Mahasiswa mampu membuat macam – macam prosedur transformasi : translasi,
rotasi, scalling dua dimensi.
4. Mahasiswa mampu mengaplikasikan matrik transformasi pada objek dua dimensi.
5. Mahasiswa mampu melakukan komposisi transformasi.

II. Keselamatan Kerja


Untuk menghindari kejadian yang tidak diinginkan selama praktikum ini dan juga
agar praktikum ini dapat berjalan dengan baik terdapat beberapa hal yang harus
diperhatikan, yaitu:
1. Selalu gunakan seragam laboratorium selama berada di dalam Laboratorium.
2. Patuhi peraturan baik berupa peraturan laboratorium maupun peraturan yang
diberlakukan oleh dosen selama di dalam laboratorium.
3. Dilarang makan / minum selama melaksanakan praktikum di dalam laboratorium.
4. Selalu berhati-hati dengan listrik.
5. Tidak bermain – main selama praktikum.
6. Selalu berkonsultasi atau meminta saran kepada dosen terhadap langkah-langkah
yang dirasa akan menimbulkan resiko.

III. Teori
Transformasi 2 Dimensi
Transformasi dua dimensi adalah suatu model atau bentuk atau teknik
memindahkan atau mengubah nilai posisi objek dalam sistem koordinat dua dimensi.
Pemindahan objek ini dapat diartikan sebagai pemindahan titik. Untuk memindahkan
objek digunakan dua operasi dasar yaitu vektor dan matrik. Vektor menunjukan posisi
saat dari suatu objek, sedangkan matriks adalah operator untuk memindahkan objek.
untuk mengimplementasi transformasi 2D. Ada empat jenis transformasi 2 dimensi,
yaitu:
 Translasi
 Scalling
 Refleksi
 Rotasi

Dasar teori pada praktikum pertemuan minggu ini akan dibahas mengenai translasi
dan scalling, sedangkan refleksi dan rotasi akan dibahas pada pertemuan berikutnya,
yaitu sebagai berikut :
1. Translasi
Translasi adalah perpindahan obyek dari titik P(x,y) ke titik P’(x’,y’) secara linier.
Dalam translasi 2D diperlukan dua paramater yaitu pemindahan ke arah sumbu x
dan pemindahan ke arah sumbu y. Translasi (dx,dy) didefinisikan dengan
persamaan (1) atau dapat juga ditulis seperti persamaan (2). Ilustrasi dari translasi
dapat dilihat pada gambar 1.

(1)

(2)

Gambar 1 Translasi dari titik P(x,y) ke titik P’(x’,y’)

Proses translasi dengan menggunakan operasional matrik dapat dituliskan dengan


persamaan (3), sehingga matriks translasi menjadi persamaan (4).
(3)

(4)

2. Scalling
Scalling m adalah perpindahan obyek dari titik P ke titik P’, dimana jarak titik P’
adalah m kali titik P. Scalling digunakan untuk mengubah ukuran dari sebuah
objek. Persamaan scalling ditulis seperti pada persaman (5) dengan persamaan
bentuk vektor seperti pada persamaan (6). Ilustrasi dari scalling dapat dilihat pada
gambar 2.

(5)

(6)

Gambar 2 Scalling dari titik P(x,y) ke titik P’(x’,y’)


IV. Alat Dan bahan
1. Komputer PC / Laptop.
2. Sistem Operasi Microsoft Windows atau Linux.
3. Bahasa C++: dalam hal ini menggunakan Microsoft Visual C++ untuk system
operasi MS-Windows, dan g++ untuk sistem operasi Linux.

V. Prosedur Praktikum
Untuk proses percobaannya sama seperti pada praktikum sebelumnya yaitu membuat
project dengan nama tertentu, sebagaimana contoh source code yaitu sebagai berikut :
#include<stdio.h>
#include<math.h>
#include<gl/glut.h>

typedef struct
{
float m[3][3];
} matrix2D_t;

typedef struct
{
float v[3];
} vector2D_t;

typedef struct
{
float x;
float y;
} point2D_t;

typedef struct
{
float r, g, b;
} color_t;

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;
}

matrix2D_t multiply(matrix2D_t a, matrix2D_t b)


{
matrix2D_t c; //c = a*b
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;
}

vector2D_t multiply(matrix2D_t a, vector2D_t b)


{
vector2D_t c;
int i, j;

for ( i = 0; i < 3; i++)


{
c.v[i] = 0;

for (j = 0; j < 3; j++)


c.v[i] +=a.m[i][j]*b.v[j];
}
return c;
}

matrix2D_t translationMTX(float dx, float dy)


{
matrix2D_t trans = createIdentity();
trans.m[0][2] = dx;
trans.m[1][2] = dy;
return trans;
}

matrix2D_t rotationMTX(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;
}

matrix2D_t scalingMTX(float factorx, float factory)


{
matrix2D_t scale = createIdentity();
scale.m[0][0] = factorx;
scale.m[1][1] = factory;
return scale;
}

//-------------------------
// Pemindahan Struktur Data
//-------------------------

point2D_t Vector2Point(vector2D_t vec)


{
point2D_t pnt;
pnt.x = vec.v[0];
pnt.y = vec.v[1];
return pnt;
}

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;
}

//fungsi - fungsi OpenGL


void setColor(float red,float green, float blue)
{
glColor3f(red, green, blue);
}

void setColor(color_t col)


{
glColor3f(col.r, col.g, col.b);
}

void drawLine(float x1, float y1, float x2, float y2)


{
glBegin(GL_LINES);
glVertex2f(x1, y1);
glVertex2f(x2, y2);
glEnd();
}
void drawLine(point2D_t p1, point2D_t p2)
{
drawLine(p1.x, p1.y, p2.x, p2.y);
}

//n: jumlah vertex


void drawPolygon(point2D_t pnt[],int n)
{
int i;
glBegin(GL_LINE_LOOP);

for(i = 0; i < n; i++)


{
glVertex2f(pnt[i].x, pnt[i].y);
}
glEnd();
}

void userdraw(void);
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
userdraw();
glutSwapBuffers();
}

void drawcharX(float x, float y)


{
drawLine(x, y, x+10, y+12);
drawLine(x, y+12, x+10, y);
}
void drawcharY(float x, float y)
{
drawLine(x+5, y, x+5, y+7);
drawLine(x, y+12, x+5, y+7);
drawLine(x+10, y+12, x+5, y+7);
}

void drawAxes(void)
{
drawLine(-310,0,310,0); drawLine(310,0,300,5);
drawLine(310,0,300,-5); drawcharX(300,-20);
drawLine(0,-230,0,230); drawLine(0,230,5,220);
drawLine(0,230,-5,220); drawcharY(-20,220);
}

userdraw(void)
{
static int tick = 0;
point2D_t A1[8] = {{10,10}, {27.5,50}, {32.5,50}, {50,10}, {40,10},
{35,20}, {25,20}, {20,10}};
point2D_t A2[3] = {{27.5,27.5}, {32.5,27.5}, {30,37.5}};
point2D_t M[12] = {{70,10}, {70,50}, {80,50}, {90,40}, {100,50},
{110,50}, {110,10}, {100,10},
{100,37.5}, {90,27.5}, {80,37.5}, {80,10}};

vector2D_t vecA1[8];
vector2D_t vecA2[3];
vector2D_t vecM[12];
matrix2D_t scale;
matrix2D_t trans;

int i, loop;
setColor(0,0,0);
drawAxes();
drawPolygon(A1, 8);
drawPolygon(A2, 3);
drawPolygon(M, 12);
glutSetWindowTitle("Translasi dan Scalling Ahlul Muddin => AM");
trans = translationMTX(62,22);
scale = scalingMTX(1.2,1.2);

for (loop = 0; loop < 2; loop++)


{
for (i = 0; i < 8; i++)
{
vecA1[i] = Point2Vector(A1[i]);
vecA1[i] = multiply(trans, vecA1[i]);
vecA1[i] = multiply(scale, vecA1[i]);
A1[i] = Vector2Point(vecA1[i]);
}
setColor(0,0,1);
drawPolygon(A1,8);

for (i = 0; i < 3; i++)


{
vecA2[i] = Point2Vector(A2[i]);
vecA2[i] = multiply(trans, vecA2[i]);
vecA2[i] = multiply(scale, vecA2[i]);
A2[i] = Vector2Point(vecA2[i]);
}
setColor(0,0,1);
drawPolygon(A2,3);

for (i = 0; i < 12; i++)


{
vecM[i] = Point2Vector(M[i]);
vecM[i] = multiply(trans, vecM[i]);
vecM[i] = multiply(scale, vecM[i]);
M[i] = Vector2Point(vecM[i]);
}
setColor(1,0,0);
drawPolygon(M,12);
}
tick++;
}

int main(int argc, char **argv)


{
glutInit(&argc,argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(100,100);
glutInitWindowSize(680,480);
glutCreateWindow("Translasi dan Scalling Ahlul Muddin => AM");
glClearColor(1.0, 1.0, 1.0, 0.0);
gluOrtho2D(-320., 320., -240.0, 240.0);
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();

return 0;
}

Output

VI. Analisa
Pada praktikum translasi dan scalling hasil yang dimana Scalling atau penskalaan adalah
proses untuk mengubah ukuran objek, dengan cara Mengubah jarak setiap titik pada objek
terhadap titik acuan. Objek dapat diskalakan dengan arah horizontal maupun vertical dengan
cara mengalikan koordinat tiap objek dengan factor konstanta.scalling ini dapat dianalisakan
dalam menggeserkan titik (x,y). translasi adalah program untuk menggeserkan titik yang
menggunakan GL_POLYGON dan GL_QUARDS untuk membuat segi banyak di opengl,
pada program ini untuk pendeklarasian arah gerak objek ke atas, bawah, kanan, dan kiri
menghasilkan translasi dari suatu objek grafis.
 Pada viod userdraw terdapat static int tick = 0; kemudian point2D_t pada
point2D_t yang merupakan titik koordinat bentuk dari huruf yang ingin dibuat.
 Pada int loop terdapat 4 buah setColor yang dimana untuk garis Y dan garis X
yang berwarna hitam dan untuk setColor yang lain untuk hurufnya seperti warna
merah dan biru.
 Pada program ini menggunakan nilai translasi dx = 62 dan dy = 22. Dan nilai
scalling factorx = 1.2 dan factory = 1.2.

VII. Kesimpulan
Translasi berarti memindahkan objek sepanjang garis lurus dari suatu lokasi koordinat
tertentu ke lokasi yang lain tanpa mengubah bentuk objek. Bila suatu objek terbentuk
dari beberapa titik maka bila melakukan translasi akan dikenakan terhadap setiap titik
pembentuk objek tersebut.

Skala digunakan untuk mengubah ukuran suatu objek, bila pada translasi operasi yang
digunakan adalah penjumlahan sedangkan pada skala operasi yang digunakan adalah
perkalian.

VIII. Referensi
- Jobsheet.
- https://www.studiobelajar.com/transformasi-geometri/
- https://blog.ruangguru.com/pengertian-dan-jenis-jenis-transformasi-geometri.

object3D_t inisialN =
{
20, {{1,-1,0}, {2,-1,0}, {3,-3.25,0}, {3,-1,0}, {4,-1,0}, {4,-5,0}, {3,-
5,0},
{2,2.75,0}, {2,-5,0}, {1,-5,0},{1,-1,2}, {2,-1,2}, {3,-3.25,2}, {3,-
1,2},
{4,-1,2}, {4,-5,2}, {3,-5,2}, {2,2.75,2}, {2,-5,2}, {1,-5,2}},

12,
{
{10,{0,1,2,3,4,5,6,7,8,9}}, {10,{10,11,12,13,14,15,16,17,18,19}},
{4,{0,10,18,9}},
{4,{18,9,19,8}},
{4,{19,8,17,7}},
{4,{17,7,16,6}},
{4,{16,6,15,5}},
{4,{15,5,4,14}},
{4,{4,14,13,3}},
{4,{13,3,2,12}},
{4,{2,12,11,1}},
{4,{11,1,0,10}}
}
};

Anda mungkin juga menyukai