Tuesday, April 27, 2010

Source kode "TRANSFORMASI 2 DIMENSI" C++

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

7 komentar:

bro, pake readmore..biar ga terlalu panjang kekgini ditampilan awal..

mas ko ga bisa dijalanin,kenapa ya? minta langkah-langkahnya..

udah di install belum library yg dibutuhkan include dari c++ nya???

includenya apa aja tu gan?

Post a Comment

Comment di sini ya chuy!!!

Check Page Rank of your Web site pages instantly:

This page rank checking tool is powered by Page Rank Checker service

Hire Me on Freelancer.com

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More