OBYEK TIGA DIMENSI
Secara konseptual, jaring polygon digunakan dalam grafika computer untuk menghasilkan objek 3D. Penciptaan objek 3D dengan computer dilakukan dengan memanipulasi jaring polygon baik dengan pemrograman dan juga pemahaman geometri 3D. Jaring polygon adalah permukaan yang dibuat dari kumpulan-kumpulan muka-muka polygon. Beberapa bentuk objek 3d dapat dilihat seperti pada gambar berikut :
Jaring dapat digunakan untuk membuat ‘kulit’ dari suatu objek. Ada dua cara untuk membuat objek 3D dengan jaring polygon, yaitu :
- Metode daftar titik (vertex list method)
- Metode daftar muka (face list method)
Ada beberapa cara pendefinisian jaring. Sebagai contoh untuk membuat bentuk kubus dapat diwakili dengan membuat satu daftar yang berisi daftar masing-masing polygon dan lokasi titik. Perhatikan bentuk kubus pada gambar dibawah ini :
Kubus dibentuk dari 6 buah segi empat. Segi empat dibentuk dari 4 buah titik. Jadi, kubus dibentuk dari : 6 x 4 = 24 titik. Untuk lebih jelas perhatikan gambar dibawah ini :
Daftar dari titik-titik tersebut dapat dilihat pada table berikut :
Dari daftar titik pada table diatas dapat dibuat program untuk membentuk objek 3D berupa kubus seperti terlihat pada script berikut :
Script Program
<UNIT1.CPP>:
//—————————————————————————
- include <vcl.h>
- pragma hdrstop
//#include “Objek3D.h”
- include “Unit1.h”
//—————————————————————————
- pragma package(smart_init)
- pragma resource “*.dfm”
TForm1 *Form1;
struct Elemen { float x,y ;} ;
Elemen Objek[17];
//—————————————————————————
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//—————————————————————————
//=========================================================================
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::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);}; }
//—————————————————————————
<UNIT1.H>:
//—————————————————————————
- ifndef Unit1H
- define Unit1H
//—————————————————————————
- include <Classes.hpp>
- include <Controls.hpp>
- include <StdCtrls.hpp>
- include <Forms.hpp>
- include <ExtCtrls.hpp>
//#include “Objek3D.h”
//—————————————————————————
class TForm1 : public TForm
{
__published: // IDE-managed Components
TImage *Image1;
void __fastcall FormActivate(TObject *Sender);
void __fastcall FormShow(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//—————————————————————————
extern PACKAGE TForm1 *Form1;
//—————————————————————————
- endif
Hasilnya:
Daftar muka dan titik-titik pembentuk muka pada objek kubus diatas dapat dilihat pada table berikut :
TUGAS:
1.Membuat kubus dengan memanfaatkan fungsi rectangle?
Jawab:
1. Buka C++ Builder
2. Buka Form baru
3. Buat jendela tampilan dengan komponen
PaintBox,Name:PaintBox1 (default)
4. tulis kode dibawah (Bold) pada Event->OnPaint
void __fastcall TForm1::PaintBox1Click(TObject *Sender)
{
s[1].x=200;s[1].y=0;s[1].z=200;
s[2].x=0;s[2].y=0;s[2].z=200;
s[3].x=0;s[3].y=200;s[3].z=200;
s[4].x=150;s[4].y=150;s[4].z=100;
s[5].x=250;s[5].y=0;s[5].z=0;
s[6].x=0;s[6].y=0;s[6].z=0;
s[7].x=0;s[7].y=200;s[7].z=0;
s[8].x=200;s[8].y=200;s[8].z=0;
//menentukan jumla obyek dan jumlkah titik sudut
//int jumlah_obyek=1;
int max_titik=8;
//——————posisi kamera
float kx=10;
float ky=300;
float kz=400;
//———————————-
//menenutkan jarak kamera dengan fokus
float d=sqrt(kx*kx+ky*ky+kz*kz);
float dxn=kx/d;
float dyn=ky/d;
float dzn=kz/d;
//- fokus kamera atau titik pandang (VRP)
float vrp_x=50;
float vrp_y=50;
float vrp_z=50;
//——————————-
//vektor kemiringan kamera,asumsi kamera tegak lurus
float dxup=0;
float dyup=1;
float dzup=0;
//titik pusat proyeksi
float xc=0 ;
float yc=0 ;
float zc=-100;
//mennetukan batas bawah
int batasbawah=PaintBox1->ClientHeight;
//deklarasi matriks proyeksi perpektif
float perspek[4][4]=
{
//0 1 2 3
{-zc,0,0,0}, //0
{0,-zc,0,0}, //1
{xc,yc,-1,1}, //2
{0,0,0,-zc} //3
};
// matriks translasi titik koord. Cartesian (world coordinat) ke VPN
float T[4][4]=
{
{1,0,0,0},
{0,1,0,0},
{0,0,1,0},
{-(kx-vrp_x),-(ky-vrp_y),-(kz-vrp_z),1}
};
// putar sehiongga vektor n sesuai sumbu z
float v1=sqrt(dyn*dyn+dzn*dzn);
// rotasi sumbu x
float Rx[4][4]=
{
{1,0,0,0},
{0,-dzn/v1,-dyn/v1,0},
{0,dyn/v1,-dzn/v1,0},
{0,0,0,1}
};
// rorasu sumbu y;
float Ry[4][4]=
{
{v1,0,-dxn,0},
{0,1,0,0},
{dxn,0,v1,0},
{0,0,0,1}
};
// mengalikan matriks Rx * Ry
for (int i=0;i<=3;i++)
{
for (int k=0;k<=3;k++)
Rxy[i][k]=Rx[i][0] * Ry[0][k] + Rx[i][1] * Ry[1][k]+ Rx[i][2] * Ry[2][k]+
Rx[i][3] * Ry[3][k];
}
xup_vp=dxup*Rxy[0][0]+dyup*Rxy[1][0]+dzup*Rxy[2][0];
yup_vp=dxup*Rxy[0][1]+dyup*Rxy[1][1]+dzup*Rxy[2][1];
rup=sqrt(xup_vp*xup_vp+yup_vp*yup_vp);
float Rz[4][4]=
{
{yup_vp/rup,xup_vp/rup,0,0},
{-xup_vp/rup,yup_vp/rup,0,0},
{0,0,1,0},
{0,0,0,1}
};
// perklaian matriks dxy * dz
for (int i=0;i<=3;i++)
{
for (int k=0;k<=3;k++)
Rxyz[i][k]=Rxy[i][0] * Rz[0][k] + Rxy[i][1] * Rz[1][k]+ Rxy[i][2] * Rz[2][k]+
Rxy[i][3] * Rz[3][k];
}
// perkalian matriks T dan Rxyz
for (int i=0;i<=3;i++)
{
for (int k=0;k<=3;k++)
TRxyz[i][k]=T[i][0] * Rxyz[0][k] + T[i][1] * Rxyz[1][k]+
T[i][2] * Rxyz[2][k]+ T[i][3] * Rxyz[3][k];
}
//Trxyz : matrik gabungan rotasi ke 3 sumbu dan ttranlasi/matrik transformasi
//koordinat dunia ke koordinat bidang padang
// transfoemasi titik obyek ke VPN
for (int i=1;i<=8;i++) // loop poligon
{
for (int k=0;k<=3;k++) // loop titik
vpn_k[i][k]=s[i].x*TRxyz[0][k] + s[i].y * TRxyz[1][k]+s[i].z* TRxyz[2][k] + 1*
TRxyz[3][k];
}
//transfoemasi perpeksif
for (int i=1;i<=8;i++)
{
for (int k=0;k<=3;k++)
vpn_pers[i][k]=vpn_k[i][0] * perspek[0][k] + vpn_k[i][1] * perspek[1][k] +
vpn_k[i][2]
perspek[2][k]+ vpn_k[i][3] * perspek[3][k];
}
//membuat niali 1 pada matrix padaordo ke-4
for (int i=1;i<=max_titik;i++)
{
for (int k=0;k<=3;k++)
vpn_pers[i][k]=(int) vpn_pers[i][k]/vpn_pers[i][3];
}
int tengah=PaintBox1->ClientWidth/2;
// trabsformasi ke koordinat layar
for (int i=1;i<=max_titik;i++)
{
vpn_pers[i][0]=vpn_pers[i][0]+tengah;
vpn_pers[i][1]=batasbawah-vpn_pers[i][1]-50;
}
//mmebuat jendela paint box dengan warna dasa putih
PaintBox1->Canvas->Brush->Color=clWhite;
PaintBox1->Canvas->Rectangle(1,1,ClientWidth-1,ClientHeight-1);
//nggambar polyline
//poligon 1
POINT t1[4]; //deklarasi variabel
t1[0]=Point(vpn_pers[1][0],vpn_pers[1][1]);
t1[1]=Point(vpn_pers[2][0],vpn_pers[2][1]);
t1[2]=Point(vpn_pers[3][0],vpn_pers[3][1]);
t1[3]=Point(vpn_pers[4][0],vpn_pers[4][1]);
t1[4]=Point(vpn_pers[1][0],vpn_pers[1][1]);
PaintBox1->Canvas->Polyline((TPoint*)t1,4);
//poligon 2 belakang
POINT t2[4]; //deklarasi variabel
t2[0]=Point(vpn_pers[5][0],vpn_pers[5][1]);
t2[1]=Point(vpn_pers[6][0],vpn_pers[6][1]);
t2[2]=Point(vpn_pers[7][0],vpn_pers[7][1]);
t2[3]=Point(vpn_pers[8][0],vpn_pers[8][1]);
t2[4]=Point(vpn_pers[5][0],vpn_pers[5][1]);
PaintBox1->Canvas->Polyline((TPoint*)t2,4);
//poligon 3 bawah
POINT t3[4]; //deklarasi variabel
t3[0]=Point(vpn_pers[1][0],vpn_pers[1][1]);
t3[1]=Point(vpn_pers[2][0],vpn_pers[2][1]);
t3[2]=Point(vpn_pers[6][0],vpn_pers[6][1]);
t3[3]=Point(vpn_pers[5][0],vpn_pers[5][1]);
t3[4]=Point(vpn_pers[1][0],vpn_pers[1][1]);
PaintBox1->Canvas->Polyline((TPoint*)t3,4);
//poligon 4 atas
POINT t4[4]; //deklarasi variabel
t4[0]=Point(vpn_pers[4][0],vpn_pers[4][1]);
t4[1]=Point(vpn_pers[3][0],vpn_pers[3][1]);
t4[2]=Point(vpn_pers[7][0],vpn_pers[7][1]);
t4[3]=Point(vpn_pers[8][0],vpn_pers[8][1]);
t4[4]=Point(vpn_pers[4][0],vpn_pers[4][1]);
PaintBox1->Canvas->Polyline((TPoint*)t4,4);
//poligon 5 kanan
POINT t5[4]; //deklarasi variabel
t5[0]=Point(vpn_pers[2][0],vpn_pers[2][1]);
t5[1]=Point(vpn_pers[6][0],vpn_pers[6][1]);
t5[2]=Point(vpn_pers[7][0],vpn_pers[7][1]);
t5[3]=Point(vpn_pers[3][0],vpn_pers[3][1]);
t5[4]=Point(vpn_pers[2][0],vpn_pers[2][1]);
PaintBox1->Canvas->Polyline((TPoint*)t5,4);
//poligon 6 kiri
POINT t6[4]; //deklarasi variabel
t6[0]=Point(vpn_pers[1][0],vpn_pers[1][1]);
t6[1]=Point(vpn_pers[5][0],vpn_pers[5][1]);
t6[2]=Point(vpn_pers[8][0],vpn_pers[8][1]);
t6[3]=Point(vpn_pers[4][0],vpn_pers[4][1]);
t6[4]=Point(vpn_pers[1][0],vpn_pers[1][1]);
PaintBox1->Canvas->Polyline((TPoint*)t6,4);
}
//—————————————————————————
//—————————————————————————
5. Tambahkah kode pada file header (.h) sbb (yg dicetak Bold ¸cetak regular bawaan C++)
//—————————————————————————
#ifndef Unit1H
#define Unit1H
//—————————————————————————
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//—————————————————————————
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPaintBox *PaintBox1;
void __fastcall PaintBox1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
float Rxy[4][4],Rx[4][4],xup_vp,yup_vp,rup,Rxyz[4][4];
float vpn_p[8][4],TRxyz[4][4],vpn_k[8][5];
float vpn_pers[8][4];
struct titik{
int x;
int y;
int z;
}s[50];
};
//—————————————————————————
extern PACKAGE TForm1 *Form1;
//—————————————————————————
#endif
tambahkan kode pada file .cpp bagian atas(yg dicetak Bold ¸cetak regular bawaan C++)
//—————————————————————————
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include “unit1.h”
//————————————————————-
#pragma package(smart_init)
#pragma resource “*.dfm”
TForm1 *Form1;
//————————————————————–
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//—————————————————————————
6. jalankan program diatas,maka akan tampil:
2. Buat beberapa bentuk lain objek 3D dan implementasikan dalam program?
Jawab:
Programnya:
1. Buka C++ Builder
2. Buka Form baru
3. Buat jendela tampilan dengan komponen
PaintBox,Name:PaintBox1 (default)
4. tulis kode dibawah (Bold) pada Event->OnPaint :
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
//menentukan tiitk-titik pokok koorrdinat obyek balok
s[1].x=0;s[1].y=0;s[1].z=250;
s[2].x=250;s[2].y=0;s[2].z=250;
s[3].x=125;s[3].y=500;s[3].z=125;
s[4].x=125;s[4].y=500;s[4].z=125;
s[5].x=0;s[5].y=0;s[5].z=0;
s[6].x=250;s[6].y=0;s[6].z=0;
s[7].x=125;s[7].y=500;s[7].z=125;
s[8].x=125;s[8].y=500;s[8].z=125;
//menentukan jumla obyek dan jumlkah titik sudut
int jumlah_obyek=1;
int max_titik=8;
//——————posisi kamera
float kx=0;
float ky=50;
float kz=350;
//———————————-
//menenutkan jarak kamera dengan fokur
float d=sqrt(kx*kx+ky*ky+kz*kz);
float dxn=kx/d;
float dyn=ky/d;
float dzn=kz/d;
//- fokus kamera atau titik pandang (VRP)
float vrp_x=0;
float vrp_y=0;
float vrp_z=0;
//——————————-
//vektor kemiringan kamera,asumsi kamera tegak lurus
float dxup=0;
float dyup=1;
float dzup=0;
//titik pusat proyeksi
float xc=0 ;
float yc=0 ;
float zc=-100;
//mennetukan batas bawah
int batasbawah=PaintBox1->ClientHeight;
//deklarasi matriks proyeksi perpektif
float perspek[4][4]=
{
//0 1 2 3
{-zc,0,0,0}, //0
{0,-zc,0,0}, //1
{xc,yc,-1,1}, //2
{0,0,0,-zc} //3
};
// matriks translasi titik koord. Cartesian (world coordinat) ke VPN
float T[4][4]=
{
{1,0,0,0},
{0,1,0,0},
{0,0,1,0},
{-(kx-vrp_x),-(ky-vrp_y),-(kz-vrp_z),1}
};
// putar sehiongga vektor n sesuai sumbu z
float v1=sqrt(dyn*dyn+dzn*dzn);
// rotasi sumbu x
float Rx[4][4]=
{
{1,0,0,0},
{0,-dzn/v1,-dyn/v1,0},
{0,dyn/v1,-dzn/v1,0},
{0,0,0,1}
};
// rorasu sumbu y;
float Ry[4][4]=
{
{v1,0,-dxn,0},
{0,1,0,0},
{dxn,0,v1,0},
{0,0,0,1}
};
// mengalikan matriks Rx * Ry
for (int i=0;i<=3;i++)
{
for (int k=0;k<=3;k++)
Rxy[i][k]=Rx[i][0] * Ry[0][k] + Rx[i][1] * Ry[1][k]+ Rx[i][2] * Ry[2][k]+
Rx[i][3] * Ry[3][k];
}
xup_vp=dxup*Rxy[0][0]+dyup*Rxy[1][0]+dzup*Rxy[2][0];
yup_vp=dxup*Rxy[0][1]+dyup*Rxy[1][1]+dzup*Rxy[2][1];
rup=sqrt(xup_vp*xup_vp+yup_vp*yup_vp);
float Rz[4][4]=
{
{yup_vp/rup,xup_vp/rup,0,0},
{-xup_vp/rup,yup_vp/rup,0,0},
{0,0,1,0},
{0,0,0,1}
};
// perklaian matriks dxy * dz
for (int i=0;i<=3;i++)
{
for (int k=0;k<=3;k++)
Rxyz[i][k]=Rxy[i][0] * Rz[0][k] + Rxy[i][1] * Rz[1][k]+ Rxy[i][2] * Rz[2][k]+
Rxy[i][3] * Rz[3][k];
}
// perkalian matriks T dan Rxyz
for (int i=0;i<=3;i++)
{
for (int k=0;k<=3;k++)
TRxyz[i][k]=T[i][0] * Rxyz[0][k] + T[i][1] * Rxyz[1][k]+
T[i][2] * Rxyz[2][k]+ T[i][3] * Rxyz[3][k];
}
//Trxyz : matrik gabungan rotasi ke 3 sumbu dan ttranlasi/matrik transformasi
koordina dunia ke koordinat bidang padang
// transfoemasi titik obyek ke VPN
for (int i=1;i<=8;i++) // loop poligon
{
for (int k=0;k<=3;k++) // loop titik
vpn_k[i][k]=s[i].x*TRxyz[0][k] + s[i].y * TRxyz[1][k]+s[i].z* TRxyz[2][k] + 1*
TRxyz[3][k];
}
//transfoemasi perpeksif
for (int i=1;i<=8;i++)
{
for (int k=0;k<=3;k++)
vpn_pers[i][k]=vpn_k[i][0] * perspek[0][k] + vpn_k[i][1] * perspek[1][k] +
vpn_k[i][2]
perspek[2][k]+ vpn_k[i][3] * perspek[3][k];
}
//membuat niali 1 pada matrix padaordo ke-4
for (int i=1;i<=max_titik;i++)
{
for (int k=0;k<=3;k++)
vpn_pers[i][k]=(int) vpn_pers[i][k]/vpn_pers[i][3];
}
int tengah=PaintBox1->ClientWidth/2;
// trabsformasi ke koordinat layar
for (int i=1;i<=max_titik;i++)
{
vpn_pers[i][0]=vpn_pers[i][0]+tengah;
vpn_pers[i][1]=batasbawah-vpn_pers[i][1]-50;
}
//mmebuat jendela paint box dengan warna dasa putih
PaintBox1->Canvas->Brush->Color=clWhite;
PaintBox1->Canvas->Rectangle(1,1,ClientWidth-1,ClientHeight-1);
//nggambar polyline
//poligon 1
POINT t1[4]; //deklarasi variabel
t1[0]=Point(vpn_pers[1][0],vpn_pers[1][1]);
t1[1]=Point(vpn_pers[2][0],vpn_pers[2][1]);
t1[2]=Point(vpn_pers[3][0],vpn_pers[3][1]);
t1[3]=Point(vpn_pers[4][0],vpn_pers[4][1]);
t1[4]=Point(vpn_pers[1][0],vpn_pers[1][1]);
PaintBox1->Canvas->Polyline((TPoint*)t1,4);
//poligon 2 belakang
POINT t2[4]; //deklarasi variabel
t2[0]=Point(vpn_pers[5][0],vpn_pers[5][1]);
t2[1]=Point(vpn_pers[6][0],vpn_pers[6][1]);
t2[2]=Point(vpn_pers[7][0],vpn_pers[7][1]);
t2[3]=Point(vpn_pers[8][0],vpn_pers[8][1]);
t2[4]=Point(vpn_pers[5][0],vpn_pers[5][1]);
PaintBox1->Canvas->Polyline((TPoint*)t2,4);
//poligon 3 bawah
POINT t3[4]; //deklarasi variabel
t3[0]=Point(vpn_pers[1][0],vpn_pers[1][1]);
t3[1]=Point(vpn_pers[2][0],vpn_pers[2][1]);
t3[2]=Point(vpn_pers[6][0],vpn_pers[6][1]);
t3[3]=Point(vpn_pers[5][0],vpn_pers[5][1]);
t3[4]=Point(vpn_pers[1][0],vpn_pers[1][1]);
PaintBox1->Canvas->Polyline((TPoint*)t3,4);
//poligon 4 atas
POINT t4[4]; //deklarasi variabel
t4[0]=Point(vpn_pers[4][0],vpn_pers[4][1]);
t4[1]=Point(vpn_pers[3][0],vpn_pers[3][1]);
t4[2]=Point(vpn_pers[7][0],vpn_pers[7][1]);
t4[3]=Point(vpn_pers[8][0],vpn_pers[8][1]);
t4[4]=Point(vpn_pers[4][0],vpn_pers[4][1]);
PaintBox1->Canvas->Polyline((TPoint*)t4,4);
//poligon 5 kanan
POINT t5[4]; //deklarasi variabel
t5[0]=Point(vpn_pers[2][0],vpn_pers[2][1]);
t5[1]=Point(vpn_pers[6][0],vpn_pers[6][1]);
t5[2]=Point(vpn_pers[7][0],vpn_pers[7][1]);
t5[3]=Point(vpn_pers[3][0],vpn_pers[3][1]);
t5[4]=Point(vpn_pers[2][0],vpn_pers[2][1]);
PaintBox1->Canvas->Polyline((TPoint*)t5,4);
//poligon 6 kiri
POINT t6[4]; //deklarasi variabel
t6[0]=Point(vpn_pers[1][0],vpn_pers[1][1]);
t6[1]=Point(vpn_pers[5][0],vpn_pers[5][1]);
t6[2]=Point(vpn_pers[8][0],vpn_pers[8][1]);
t6[3]=Point(vpn_pers[4][0],vpn_pers[4][1]);
t6[4]=Point(vpn_pers[1][0],vpn_pers[1][1]);
PaintBox1->Canvas->Polyline((TPoint*)t6,4);
5. Tambahkah kode pada file header (.h) sbb(yg dicetak Bold ¸cetak regular bawaan C++)
//—————————————————————————
#ifndef rangkaH
#define rangkaH
//—————————————————————————
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//—————————————————————————
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPaintBox *PaintBox1;
void __fastcall PaintBox1Paint(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
float Rxy[4][4],Rx[4][4],xup_vp,yup_vp,rup,Rxyz[4][4];
float vpn_p[8][4],TRxyz[4][4],vpn_k[8][5];
float vpn_pers[8][4];
struct titik{
int x;
int y;
int z;
}s[50];
};
//———————————————————————extern
PACKAGE TForm1 *Form1;
//———————————————————————#endif
tambahkan kode pada file .cpp bagian atas
(yg dicetak Bold ¸cetak regular bawaan C++)
//————————————————————–
————-
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include “rangka.h”
//————————————————————-
#pragma package(smart_init)
#pragma resource “*.dfm”
TForm1 *Form1;
//————————————————————–
__fastcall TForm1::TForm1(TComponent* Owner)
6. jalankan program diatas