TRANSFORMASI OBYEK TIGA DIMENSI
Dasar Teori
Transformasi objek 3D merupakan perluasan dan teknik. Sebagaimana dalam transformasi 2D, sembarang transformasi dapat disajikan ke dalam suatu matrik transformasi dan transformasi yang lebih rumit dapat dinyatakan oleh sebuah matrik transformasi yang merupakan gabungan dari matrik-matrik transformasi dasar yang ada.
Dengan M adalah matrik 3x3.
PROJECT TRANSLASI 3D
1) Terdapat pilihan tombol Atas, Kiri, Kanan dan Bawah
2) Terdapat sebuah Image untuk menampilkan objek 2 Dimensi yang akan bergeser sesuai dengan nama tombol yang ditekan. (Ada 4 tombol geser)
3) Jika tombol Kiri ditekan objek bergeser ke kiri.
4) Jika tombol Kanan ditekan objek bergeser ke kanan
5) Jika tombol Atas ditekan objek bergeser ke atas.
6) Jika tombol Bawah ditekan objek bergeser ke bawah.
7) Tampilan gambar 3D bisa diperbesar dan diperkecil.
8) Buka C++ Builder dan buat tampilan selengkapnya seperti pada gambar berikut:

SCRIPT
#include
#include
#pragma hdrstop
#include "trans3d.h"
#pragma resource "*.dfm"
TForm1 *Form1;
struct Elemen { float x,y ;} ;
Elemen Objek[17];
===========================================================================
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
===========================================================================
void __fastcall TForm1::FormShow(TObject *Sender)
{
int i;
Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);
Image1->Canvas->MoveTo(Objek[4].x,Objek[4].y);
for (i=1;i<=4;i++){ Image1->Canvas->LineTo(Objek[i].x,Objek[i].y);};
Image1->Canvas->MoveTo(Objek[8].x,Objek[8].y);
for (i=5;i<=8;i++){ Image1->Canvas->LineTo(Objek[i].x,Objek[i].y);};
Image1->Canvas->MoveTo(Objek[10].x,Objek[10].y);
for (i=9;i<=10;i++){ Image1->Canvas->LineTo(Objek[i].x,Objek[i].y);};
Image1->Canvas->MoveTo(Objek[12].x,Objek[12].y);
for (i=11;i<=12;i++){ Image1->Canvas->LineTo(Objek[i].x,Objek[i].y);};
Image1->Canvas->MoveTo(Objek[14].x,Objek[14].y);
for (i=13;i<=14;i++){ Image1->Canvas->LineTo(Objek[i].x,Objek[i].y);};
Image1->Canvas->MoveTo(Objek[16].x,Objek[16].y);
for (i=15;i<=16;i++){ Image1->Canvas->LineTo(Objek[i].x,Objek[i].y);};
}
===========================================================================
void __fastcall TForm1::FormActivate(TObject *Sender)
{
Objek[1].x = 100; Objek[1].y = 50;
Objek[2].x = 50; Objek[2].y = 50;
Objek[3].x = 50; Objek[3].y = 100;
Objek[4].x = 100; Objek[4].y = 100;
Objek[5].x = 125; Objek[5].y = 125;
Objek[6].x = 75; Objek[6].y = 125;
Objek[7].x = 75; Objek[7].y = 175;
Objek[8].x = 125; Objek[8].y = 175;
Objek[9].x = 100; Objek[9].y = 100;
Objek[10].x = 125; Objek[10].y = 175;
Objek[11].x = 50; Objek[11].y = 100;
Objek[12].x = 75; Objek[12].y = 175;
Objek[13].x = 50; Objek[13].y = 50;
Objek[14].x = 75; Objek[14].y = 125;
Objek[15].x = 100; Objek[15].y = 50;
Objek[16].x = 125; Objek[16].y = 125;
FormShow(Sender);
}
===========================================================================
void __fastcall TForm1::BtTransAtasClick(TObject *Sender)
{ int i;
for (i=1;i<=16;i++){ Objek[i].y-=5;};
FormShow(Sender);
}
===========================================================================
void __fastcall TForm1::BtTransKiriClick(TObject *Sender)
{ int i;
for (i=1;i<=16;i++){ Objek[i].x-=5;};
FormShow(Sender);
}
===========================================================================
void __fastcall TForm1::BtTRansKananClick(TObject *Sender)
{
int i;
for (i=1;i<=16;i++){ Objek[i].x+=5;};
FormShow(Sender);
}
void __fastcall TForm1::BtTransBawahClick(TObject *Sender)
{ int i;
for (i=1;i<=16;i++){ Objek[i].y+=5;};
FormShow(Sender);
}
===========================================================================
void __fastcall TForm1::BtZoomInClick(TObject *Sender)
{ int i;
for (i=1;i<=16;i++)
{ Objek[i].y*=2;
Objek[i].x*=2;
};
FormShow(Sender);
}
void __fastcall TForm1::BtZoomOutClick(TObject *Sender)
{ int i;
for (i=1;i<=16;i++)
{
Objek[i].y/=2;
Objek[i].x/=2;
};
FormShow(Sender);
}
===========================================================================
void __fastcall TForm1::BtPtrSBKoorClick(TObject *Sender)
{ Elemen TempObjek[17];
int i; float Sdt;
for (i=1;i<=16;i++)
{
Objek[i].x=Objek[i].x-Image1->Width / 2;
Objek[i].y=Objek[i].y-Image1->Height / 2;
Sdt=10*M_PI/180;
TempObjek[i].x=(Objek[i].x*cos(Sdt)-Objek[i].y*sin(Sdt));
TempObjek[i].y=(Objek[i].x*sin(Sdt)+Objek[i].y*cos(Sdt));
Objek[i]=TempObjek[i];
Objek[i].x=Objek[i].x+Image1->Width / 2;
Objek[i].y=Objek[i].y+Image1->Height / 2;
}
FormShow(Sender);
}
===========================================================================
void __fastcall TForm1::BtPtrTTClick(TObject *Sender)
{ Elemen TempObjek[17];
int i,n,m; float Sdt;
for (i=1;i<=16;i++)
{
n = Objek[3].x;
m = Objek[3].y;
Objek[i].x=Objek[i].x-n;
Objek[i].y=Objek[i].y-m;
Sdt=10*M_PI/180;
TempObjek[i].x=(Objek[i].x*cos(Sdt)-Objek[i].y*sin(Sdt));
TempObjek[i].y=(Objek[i].x*sin(Sdt)+Objek[i].y*cos(Sdt));
Objek[i]=TempObjek[i];
Objek[i].x=Objek[i].x+n;
Objek[i].y=Objek[i].y+m;
}
FormShow(Sender);
}
void __fastcall TForm1::BTDefaultClick(TObject *Sender)
{
FormActivate(Sender);
}
===========================================================================
void __fastcall TForm1::BtCloseClick(TObject *Sender)
{
Close();
}