#include
#include
#include
using namespace std;
struct point2d
{
int x;
int y;
};
struct point2d objek1[6] ={0,0, 0,-100, 52,-200, 104,-100, 104,0, 0,0};
struct point2d objek2[6];
void menu(int &l)
{
int r;
cout<<"\t\t\t==================================\n";
cout<<"\t\t\t||\tTRANSFORMASI 2 DIMENSI\t||"<
cout<<"\t\t\t||\t MENU\t ||"<
cout<<"\t\t\t==================================\n";
cout<<"\t\t\t1. Translasi"<
cout<<"\t\t\t2. Scala "<
cout<<"\t\t\t3. Rotasi "<
cout<<"\t\t\t4. Shearing "<
cout<<"\t\t\t5. Exit "<
cout<<"\t\t\tInput Pilihan Anda [1 - 5] : "; cin>>r;
l=r;
}
void matrix_scaling(int mt[2][2], int sx, int sy)
{
mt[0][0]=sx; mt[0][1]=0; mt[0][2]=0;
mt[1][0]=0; mt[1][1]=sy; mt[1][2]=0;
mt[2][0]=0; mt[2][1]=0; mt[2][2]=1;
}
void perkalian_scaling(int *vektorP, int *vektorQ, int mt[2][2])
{
int i, j;
for(i=0; i<3; i++)
{
vektorQ[i] = 0;
for(j=0; j<3; j++)
{
vektorQ[i] = vektorQ[i] + vektorP[j] * mt[j][i];
}
}
}
void scaling(int sx, int sy,int x_scr, int y_scr)
{
int i, vektorP[2], vektorQ[2];
int mt[2][2];
matrix_scaling(mt, sx, sy);
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x+x_scr;
objek1[i].y=objek1[i].y+y_scr;
}
for (i=0; i<6; i++)
{
vektorP[0]= objek1[i].x;
vektorP[1]= objek1[i].y;
vektorP[2]= 1;
//perkaliankan vektor P dengan matrik mt
perkalian_scaling(vektorP, vektorQ, mt);
//hasil perkalian VektorQ ke elemen objek2
objek2[i].x = vektorQ[0]-300;
objek2[i].y = vektorQ[1]-100;
}
}
void matriks_putar(float mt[2][2], float theta)
{
theta = theta * 3.14/180; //sudut di konversi ke radian
mt[0][0] = cos(theta); mt[0][1]= sin(theta); mt[0][2]= 0;
mt[1][0] = -sin(theta); mt[1][1]= cos(theta); mt[1][2]= 0;
mt[2][0] = 0; mt[2][1]= 0; mt[2][2]= 1;
}
void perkalian_putar(int *vektorP, float mt[2][2], int *vektorQ)
{
int i,j;
for(i=0; i<3; i++)
{
vektorQ[i]=0;
for(j=0; j<3; j++)
{
vektorQ[i] = vektorQ[i] + vektorP[j] * mt[j][i];
}
}
}
void putar(int sudut,int x_scr,int y_scr)
{ int i;
int vektorP[2], vektorQ[2]; float mt[2][2];
//bentuk matriks putar mt
matriks_putar(mt, sudut);
// perkaliankan vektorP dengna matriks mt
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x+x_scr;
objek1[i].y=objek1[i].y+y_scr;
}
for(i= 0; i<6; i++)
{
//vektorP
vektorP[0]= objek1[i].x;
vektorP[1]= objek1[i].y;
vektorP[2]= 1;
//perkaliankan vektorP dengan matrik mt
perkalian_putar(vektorP, mt, vektorQ);
//berikan nilai vektorQ ke elemen obyek2
objek2[i].x = vektorQ[0];
objek2[i].y = vektorQ[1]-100;
}
}
void matrik_shear(int mt[2][2], int h, int g)
{
mt[0][0]=1; mt[0][1]=g; mt[0][2]=0;
mt[1][0]=h; mt[1][1]=1; mt[1][2]=0;
mt[2][0]=0; mt[2][1]=0; mt[2][2]=1;
}
void perkalian_shear(int *vektorP, int *vektorQ, int mt[2][2])
{
int i, j;
for(i=0; i<3; i++)
{
vektorQ[i] = 0;
for(j=0; j<3; j++)
{
vektorQ[i] = vektorQ[i] + vektorP[j] * mt[j][i];
}
}
}
void shear(int h, int g,int x_scr, int y_scr)
{
int i, vektorP[2], vektorQ[2];
int mt[2][2];
matrik_shear(mt, h, g);
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x+x_scr;
objek1[i].y=objek1[i].y+y_scr;
}
for (i=0; i<6; i++)
{
vektorP[0]= objek1[i].x;
vektorP[1]= objek1[i].y;
vektorP[2]= 1;
perkalian_shear(vektorP, vektorQ, mt);
objek2[i].x = vektorQ[0]-50;
objek2[i].y = vektorQ[1];
}
}
void matrix_translasi(int mt[2][2], int x, int y)
{
mt[0][0]=1; mt[0][1]=0; mt[0][2]=0;
mt[1][0]=0; mt[1][1]=1; mt[1][2]=0;
mt[2][0]=x; mt[2][1]=y; mt[2][2]=1;
}
void perkalian_translasi(int *vektorP, int *vektorQ, int mt[2][2])
{
int i, j;
for(i=0; i<3; i++)
{
vektorQ[i] = 0;
for(j=0; j<3; j++)
{
vektorQ[i] = vektorQ[i] + vektorP[j] * mt[j][i];
}
}
}
void translasi(int x, int y,int x_scr, int y_scr)
{
int i, vektorP[2], vektorQ[2];
int mt[2][2];
//matriks transformasi mt
matrix_translasi(mt, x, y);
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x+x_scr;
objek1[i].y=objek1[i].y+y_scr;
}
//pengulangan mengalikan vektorP ke matriks mt
for (i=0; i<6; i++)
{
//bentuk dulu vektorP dari elemen objek1
vektorP[0]= objek1[i].x;
vektorP[1]= objek1[i].y;
vektorP[2]= 1;
//perkaliankan vektorP dengan matrik mt
perkalian_translasi(vektorP, vektorQ, mt);
//salin vektorQ hasil perkalian ke elemen objek2
objek2[i].x = vektorQ[0];
objek2[i].y = vektorQ[1];
}
}
int main()
{ int b,m=0,i;
int midx, x_scr, y_scr, midy,x1=0, y1=0;
do
{
menu(b);
initwindow(500, 500,"WINDOWS");
midx = getmaxx()/2; //max.nilai ke arah sumbu X dibagi 2
midy = getmaxy()/2; //max.nilai ke arah sumbu y dibagi 2
x_scr = midx + x1; //konversi nilai koord.sistem(x1)ke koomd.layar(xscr);
y_scr = midy - y1; //konversi nilai koord.sistem(y1)ke koomd.layar(yscr);
if (b==1)
{
if (m==1)
{
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x-x_scr;
objek1[i].y=objek1[i].y-y_scr;
}
}
translasi(80,50,x_scr,y_scr);
drawpoly(6, (int far *) objek1); //menggambar obyek asal
getch();
drawpoly(6,(int far *) objek2); // menggambar obyek hasil Penggeseran
m=1;
getch();
closegraph();
}
else if (b==2)
{
if (m==1)
{
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x-x_scr;
objek1[i].y=objek1[i].y-y_scr;
}
}
scaling(2,2,x_scr,y_scr);
drawpoly(6, (int far *) objek1); //menggambar obyek asal
getch();
drawpoly(6,(int far *) objek2); // menggambar obyek hasil Scala
m=1;
getch();
closegraph();
}
else if (b==3)
{
if (m==1)
{
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x-x_scr;
objek1[i].y=objek1[i].y-y_scr;
}
}
putar(30,x_scr,y_scr);
drawpoly(6, (int far *) objek1); //menggambar obyek asal
getch();
drawpoly(6,(int far *) objek2); // menggambar obyek hasil Rotasi
m=1;
getch();
closegraph();
}
else if (b==4)
{
if (m==1)
{
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x-x_scr;
objek1[i].y=objek1[i].y-y_scr;
}
}
shear(1 ,0,x_scr,y_scr);
drawpoly(6, (int far *) objek1);
getch();
drawpoly(6, (int far *) objek2);
m=1;
getch();
closegraph();
}
else if (b!=5 || b>5)
cout<<"\n\t\t\t Pilihan yang Anda input salah!! coba lagi..?? \n\n";
closegraph();
}
while (b!=5);
cout<
cout<
cout<<"\t\t\t ,,,,PROGRAM SELESAI DIJALANKAN,,,, "<
getch();
closegraph();
return(0);
}
#include
#include
using namespace std;
struct point2d
{
int x;
int y;
};
struct point2d objek1[6] ={0,0, 0,-100, 52,-200, 104,-100, 104,0, 0,0};
struct point2d objek2[6];
void menu(int &l)
{
int r;
cout<<"\t\t\t==================================\n";
cout<<"\t\t\t||\tTRANSFORMASI 2 DIMENSI\t||"<
cout<<"\t\t\t||\t MENU\t ||"<
cout<<"\t\t\t==================================\n";
cout<<"\t\t\t1. Translasi"<
cout<<"\t\t\t2. Scala "<
cout<<"\t\t\t3. Rotasi "<
cout<<"\t\t\t4. Shearing "<
cout<<"\t\t\t5. Exit "<
cout<<"\t\t\tInput Pilihan Anda [1 - 5] : "; cin>>r;
l=r;
}
void matrix_scaling(int mt[2][2], int sx, int sy)
{
mt[0][0]=sx; mt[0][1]=0; mt[0][2]=0;
mt[1][0]=0; mt[1][1]=sy; mt[1][2]=0;
mt[2][0]=0; mt[2][1]=0; mt[2][2]=1;
}
void perkalian_scaling(int *vektorP, int *vektorQ, int mt[2][2])
{
int i, j;
for(i=0; i<3; i++)
{
vektorQ[i] = 0;
for(j=0; j<3; j++)
{
vektorQ[i] = vektorQ[i] + vektorP[j] * mt[j][i];
}
}
}
void scaling(int sx, int sy,int x_scr, int y_scr)
{
int i, vektorP[2], vektorQ[2];
int mt[2][2];
matrix_scaling(mt, sx, sy);
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x+x_scr;
objek1[i].y=objek1[i].y+y_scr;
}
for (i=0; i<6; i++)
{
vektorP[0]= objek1[i].x;
vektorP[1]= objek1[i].y;
vektorP[2]= 1;
//perkaliankan vektor P dengan matrik mt
perkalian_scaling(vektorP, vektorQ, mt);
//hasil perkalian VektorQ ke elemen objek2
objek2[i].x = vektorQ[0]-300;
objek2[i].y = vektorQ[1]-100;
}
}
void matriks_putar(float mt[2][2], float theta)
{
theta = theta * 3.14/180; //sudut di konversi ke radian
mt[0][0] = cos(theta); mt[0][1]= sin(theta); mt[0][2]= 0;
mt[1][0] = -sin(theta); mt[1][1]= cos(theta); mt[1][2]= 0;
mt[2][0] = 0; mt[2][1]= 0; mt[2][2]= 1;
}
void perkalian_putar(int *vektorP, float mt[2][2], int *vektorQ)
{
int i,j;
for(i=0; i<3; i++)
{
vektorQ[i]=0;
for(j=0; j<3; j++)
{
vektorQ[i] = vektorQ[i] + vektorP[j] * mt[j][i];
}
}
}
void putar(int sudut,int x_scr,int y_scr)
{ int i;
int vektorP[2], vektorQ[2]; float mt[2][2];
//bentuk matriks putar mt
matriks_putar(mt, sudut);
// perkaliankan vektorP dengna matriks mt
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x+x_scr;
objek1[i].y=objek1[i].y+y_scr;
}
for(i= 0; i<6; i++)
{
//vektorP
vektorP[0]= objek1[i].x;
vektorP[1]= objek1[i].y;
vektorP[2]= 1;
//perkaliankan vektorP dengan matrik mt
perkalian_putar(vektorP, mt, vektorQ);
//berikan nilai vektorQ ke elemen obyek2
objek2[i].x = vektorQ[0];
objek2[i].y = vektorQ[1]-100;
}
}
void matrik_shear(int mt[2][2], int h, int g)
{
mt[0][0]=1; mt[0][1]=g; mt[0][2]=0;
mt[1][0]=h; mt[1][1]=1; mt[1][2]=0;
mt[2][0]=0; mt[2][1]=0; mt[2][2]=1;
}
void perkalian_shear(int *vektorP, int *vektorQ, int mt[2][2])
{
int i, j;
for(i=0; i<3; i++)
{
vektorQ[i] = 0;
for(j=0; j<3; j++)
{
vektorQ[i] = vektorQ[i] + vektorP[j] * mt[j][i];
}
}
}
void shear(int h, int g,int x_scr, int y_scr)
{
int i, vektorP[2], vektorQ[2];
int mt[2][2];
matrik_shear(mt, h, g);
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x+x_scr;
objek1[i].y=objek1[i].y+y_scr;
}
for (i=0; i<6; i++)
{
vektorP[0]= objek1[i].x;
vektorP[1]= objek1[i].y;
vektorP[2]= 1;
perkalian_shear(vektorP, vektorQ, mt);
objek2[i].x = vektorQ[0]-50;
objek2[i].y = vektorQ[1];
}
}
void matrix_translasi(int mt[2][2], int x, int y)
{
mt[0][0]=1; mt[0][1]=0; mt[0][2]=0;
mt[1][0]=0; mt[1][1]=1; mt[1][2]=0;
mt[2][0]=x; mt[2][1]=y; mt[2][2]=1;
}
void perkalian_translasi(int *vektorP, int *vektorQ, int mt[2][2])
{
int i, j;
for(i=0; i<3; i++)
{
vektorQ[i] = 0;
for(j=0; j<3; j++)
{
vektorQ[i] = vektorQ[i] + vektorP[j] * mt[j][i];
}
}
}
void translasi(int x, int y,int x_scr, int y_scr)
{
int i, vektorP[2], vektorQ[2];
int mt[2][2];
//matriks transformasi mt
matrix_translasi(mt, x, y);
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x+x_scr;
objek1[i].y=objek1[i].y+y_scr;
}
//pengulangan mengalikan vektorP ke matriks mt
for (i=0; i<6; i++)
{
//bentuk dulu vektorP dari elemen objek1
vektorP[0]= objek1[i].x;
vektorP[1]= objek1[i].y;
vektorP[2]= 1;
//perkaliankan vektorP dengan matrik mt
perkalian_translasi(vektorP, vektorQ, mt);
//salin vektorQ hasil perkalian ke elemen objek2
objek2[i].x = vektorQ[0];
objek2[i].y = vektorQ[1];
}
}
int main()
{ int b,m=0,i;
int midx, x_scr, y_scr, midy,x1=0, y1=0;
do
{
menu(b);
initwindow(500, 500,"WINDOWS");
midx = getmaxx()/2; //max.nilai ke arah sumbu X dibagi 2
midy = getmaxy()/2; //max.nilai ke arah sumbu y dibagi 2
x_scr = midx + x1; //konversi nilai koord.sistem(x1)ke koomd.layar(xscr);
y_scr = midy - y1; //konversi nilai koord.sistem(y1)ke koomd.layar(yscr);
if (b==1)
{
if (m==1)
{
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x-x_scr;
objek1[i].y=objek1[i].y-y_scr;
}
}
translasi(80,50,x_scr,y_scr);
drawpoly(6, (int far *) objek1); //menggambar obyek asal
getch();
drawpoly(6,(int far *) objek2); // menggambar obyek hasil Penggeseran
m=1;
getch();
closegraph();
}
else if (b==2)
{
if (m==1)
{
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x-x_scr;
objek1[i].y=objek1[i].y-y_scr;
}
}
scaling(2,2,x_scr,y_scr);
drawpoly(6, (int far *) objek1); //menggambar obyek asal
getch();
drawpoly(6,(int far *) objek2); // menggambar obyek hasil Scala
m=1;
getch();
closegraph();
}
else if (b==3)
{
if (m==1)
{
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x-x_scr;
objek1[i].y=objek1[i].y-y_scr;
}
}
putar(30,x_scr,y_scr);
drawpoly(6, (int far *) objek1); //menggambar obyek asal
getch();
drawpoly(6,(int far *) objek2); // menggambar obyek hasil Rotasi
m=1;
getch();
closegraph();
}
else if (b==4)
{
if (m==1)
{
for(i= 0; i<6; i++)
{
objek1[i].x=objek1[i].x-x_scr;
objek1[i].y=objek1[i].y-y_scr;
}
}
shear(1 ,0,x_scr,y_scr);
drawpoly(6, (int far *) objek1);
getch();
drawpoly(6, (int far *) objek2);
m=1;
getch();
closegraph();
}
else if (b!=5 || b>5)
cout<<"\n\t\t\t Pilihan yang Anda input salah!! coba lagi..?? \n\n";
closegraph();
}
while (b!=5);
cout<
cout<
cout<<"\t\t\t ,,,,PROGRAM SELESAI DIJALANKAN,,,, "<
getch();
closegraph();
return(0);
}
7 komentar:
bro, pake readmore..biar ga terlalu panjang kekgini ditampilan awal..
pintarnya mas arif
^_*
mas ko ga bisa dijalanin,kenapa ya? minta langkah-langkahnya..
udah di install belum library yg dibutuhkan include dari c++ nya???
include nya apa aja ya?
includenya apa aja tu gan?
Includenya apa aja itu?
Post a Comment
Comment di sini ya chuy!!!