Yudhitya034’s BlogNews

Mei 15, 2009

GRAFIKA COMPUTER SESSION VII

Filed under: Uncategorized — yudhitya034 @ 4:17 am

APLIKASI MULTIMEDIA GRAFIKA

Disini kita akan membahas tentang sistem multimedian. Grafika computer memainkan peranan penting dalam sistem multimedia. Yang dimaksud multimedia dalam konteks ini adalah program yang mampu menjalankan file-file dari berbagai bentuk, mulai dari format teks, sound, image, bahkan video. Untuk merancang multimedia, Borland C++ Builder telah menyediakan komponen khusus yaitu media player.
Buat program multimedia sederhana dengan spesifikasi :
1. Tombol navigasi menggunakan tombol speed.
2. Gambar harus ditampilkan dalam bentuk bingkai yang menarik.
3. Jika file yang dimainkan tidak memiliki gambar harus ada pemberitahuan.
4. Nama dan path yang aktif harus ditampilkan.
5. Format yang dapat dimainkan AVI, MIDI, WAV, CD AUDIO dan RMI.
6. Pemilihan format harus menyediakan pembukaan file dengan filter format yang sesuai.
Terdapat fasilitas repeat.
Pembahasan Program
Langkah pertama,perancangan antarmuka seperti di bawah ini:

mulmed

kemudian ketikkan script programnya:

//—————————————————————————

#include <vcl.h>

#pragma hdrstop

#include “Unit1.h”

//—————————————————————————

#pragma package(smart_init)

#pragma resource “*.dfm”

TForm1 *Form1;

//—————————————————————————

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//—————————————————————————

void __fastcall TForm1::BTGantiClick(TObject *Sender)

{

if (OpenDialog1->Execute())

MediaPlayer1->FileName=OpenDialog1->FileName;

MediaPlayer1->Open();

MediaPlayer1->Display=Panel1;

RB2->Enabled=True;

RB3->Enabled=True;

RB4->Enabled=True;

}

//—————————————————————————

void __fastcall TForm1::RB2Click(TObject *Sender)

{

RB3->Enabled=False;

RB4->Enabled=False;

MediaPlayer1->Stop();

MediaPlayer1->Wait=True;

MediaPlayer1->Play();

MediaPlayer1->Wait=True;

MediaPlayer1->Play();

RB2->Enabled=True;

RB3->Enabled=True;

RB4->Enabled=True;

RB2->Enabled=False;

RB3->Enabled=False;

RB4->Enabled=False;

}

//—————————————————————————

void __fastcall TForm1::RB3Click(TObject *Sender)

{

RB2->Enabled=False;

RB4->Enabled=False;

MediaPlayer1->Stop();

MediaPlayer1->Wait=True;

MediaPlayer1->Play();

MediaPlayer1->Wait=True;

MediaPlayer1->Play();

MediaPlayer1->Wait=True;

MediaPlayer1->Play();

RB2->Enabled=True;

RB3->Enabled=True;

RB4->Enabled=True;

RB2->Enabled=False;

RB3->Enabled=False;

RB4->Enabled=False;

}

//—————————————————————————

void __fastcall TForm1::RB4Click(TObject *Sender)

{

RB2->Enabled=False;

RB3->Enabled=False;

MediaPlayer1->Stop();

MediaPlayer1->Wait=True;

MediaPlayer1->Play();

MediaPlayer1->Wait=True;

MediaPlayer1->Play();

MediaPlayer1->Wait=True;

MediaPlayer1->Play();

MediaPlayer1->Wait=True;

MediaPlayer1->Play();

RB2->Enabled=True;

RB3->Enabled=True;

RB4->Enabled=True;

RB2->Enabled=False;

RB3->Enabled=False;

RB4->Enabled=False;

}

//—————————————————————————

void __fastcall TForm1::RadioButton1Click(TObject *Sender)

{

OpenDialog1->FileName=””;

OpenDialog1->Filter=”Audio Video(*.avi)|*.avi”;

if (OpenDialog1->Execute())

MediaPlayer1->Close();

BTGanti->Enabled=True;

MediaPlayer1->DeviceType=dtAVIVideo;

MediaPlayer1->FileName=OpenDialog1->FileName;

MediaPlayer1->Open();

Panel2->Caption=”Gambar Yang bagus”;

MediaPlayer1->Display=Panel1;

Panel5->Caption=OpenDialog1->FileName;

RB2->Enabled=True;

RB3->Enabled=True;

RB4->Enabled=True;

RB2->Checked=False;

RB3->Checked=False;

RB4->Checked=False;

}

//—————————————————————————

void __fastcall TForm1::RadioButton2Click(TObject *Sender)

{

OpenDialog1->FileName=””;

OpenDialog1->Filter=”WAV Audio Files (*.wav)|*.wav”;

if (OpenDialog1->Execute())

MediaPlayer1->Close();

BTGanti->Enabled=True;

MediaPlayer1->DeviceType=dtWaveAudio;

MediaPlayer1->FileName=OpenDialog1->FileName;

MediaPlayer1->Open();

Panel2->Caption=”Maaf tidak ada gambar”;

MediaPlayer1->Display=Panel1;

Panel5->Caption=OpenDialog1->FileName;

RB2->Enabled=True;

RB3->Enabled=True;

RB4->Enabled=True;

RB2->Checked=False;

RB3->Checked=False;

RB4->Checked=False;

}

//—————————————————————————

void __fastcall TForm1::RadioButton3Click(TObject *Sender)

{

OpenDialog1->FileName=””;

OpenDialog1->Filter=”Midi Files(*.midi)|*.midi”;

if (OpenDialog1->Execute())

MediaPlayer1->Close();

BTGanti->Enabled=True;

MediaPlayer1->DeviceType=dtSequencer;

MediaPlayer1->FileName=OpenDialog1->FileName;

MediaPlayer1->Open();

Panel2->Caption=”Maaf tidak ada gambar”;

MediaPlayer1->Display=Panel1;

Panel5->Caption=OpenDialog1->FileName;

RB2->Enabled=True;

RB3->Enabled=True;

RB4->Enabled=True;

RB2->Checked=False;

RB3->Checked=False;

RB4->Checked=False;

}

//—————————————————————————

void __fastcall TForm1::RadioButton4Click(TObject *Sender)

{

MediaPlayer1->Close();

BTGanti->Enabled=True;

MediaPlayer1->DeviceType=dtCDAudio;

MediaPlayer1->FileName=EmptyStr;

MediaPlayer1->Open();

Panel2->Caption=”Maaf, Tidak ada gambar”;

MediaPlayer1->Display=Panel1;

Panel5->Caption=”CD Audio”;

RB2->Enabled=True;

RB3->Enabled=True;

RB4->Enabled=True;

RB2->Checked=False;

RB3->Checked=False;

RB4->Checked=False;

}

//—————————————————————————

setelah itu di save, dan masukkan unit.h nya…

//—————————————————————————

#ifndef Unit1H

#define Unit1H

//—————————————————————————

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Dialogs.hpp>

#include <ExtCtrls.hpp>

#include <MPlayer.hpp>

//—————————————————————————

class TForm1 : public TForm

{

__published: // IDE-managed Components

TPanel *Panel1;

TMediaPlayer *MediaPlayer1;

TOpenDialog *OpenDialog1;

TPanel *Panel2;

TPanel *Panel3;

TPanel *Panel4;

TPanel *Panel5;

TPanel *Panel6;

TButton *BTGanti;

TButton *Button2;

TGroupBox *GroupBox1;

TGroupBox *GroupBox2;

TRadioButton *RadioButton1;

TRadioButton *RadioButton2;

TRadioButton *RadioButton3;

TRadioButton *RadioButton4;

TRadioButton *RB2;

TRadioButton *RB3;

TRadioButton *RB4;

void __fastcall BTGantiClick(TObject *Sender);

void __fastcall RB2Click(TObject *Sender);

void __fastcall RB3Click(TObject *Sender);

void __fastcall RB4Click(TObject *Sender);

void __fastcall RadioButton1Click(TObject *Sender);

void __fastcall RadioButton2Click(TObject *Sender);

void __fastcall RadioButton3Click(TObject *Sender);

void __fastcall RadioButton4Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

//—————————————————————————

extern PACKAGE TForm1 *Form1;

//—————————————————————————

#endif

setelah itu di run, maka akan tampil output seperti di bawah ini:

pilih file yang akan di jalankan,lalu cari file.

setelah itu di run, maka akan tampil output seperti di bawah ini:

pilih file yang akan di jalankan.

output

Mei 1, 2009

GRAFIKA SESSION VI

Filed under: Uncategorized — yudhitya034 @ 10:05 am

TRANSFORMASI OBYEK TIGA DIMENSI

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 3×3

matrik-m-utk-masing2-transformasi3. ROTASI

Pemutaran objek 3D dilakukan dengan pemutaran pada suatu sumbu atau gabungan dengan pemutaran pada sumbu-sumbu lain. Untuk arah pemutaran dapat dilihat pada table dibawah ini :

tabel

arah-putaranpemutaran4.SHEARING

Shearing pada sembarang sepasang sumbu dapat dilaksanakan pada sumbu ke tiga.

Matrik transformasi untuk shearing :

1.Kamera Sintetik

Adalah cara pandang pada ruang 3D yang menggunakan tiga komponen : Bidang pandang, Sistem koordinat pandang, mata

2.   Sistem Koordinat Pandang

Disebut sebagai sistem koordinat uvn karena disusun oleh koordinat u, v dan n. bidang pandang berimpit dengan bidang uv. Pada bidang pandang ini ditentukan sebuah titik yang disebut sebagai titik acuan pandang ( view reference point, VRP) yang merupakan pusat sistem koordinat pandang.

Arah normal dari bidang pandang disebut sebagai vektor satuan, n. arah vektor n tegak lurus dengan bidang uv dan arah vektor uv selalu keatas.

Jendela yang digunakan untuk melihat objek terletak pada sistem koordinat bidang pandang dan batas-batasnya dinyatakan sebagai ( Jkr , Jat , Jkn , Jbu ). Batas jendela untuk arah mendatar yaitu dari u = Jkr sampai dengan u = Jkn. Dan untuk arah tegak yaitu dari v = Jat sampai dengan v = Jbw.

Posisi mata yaitu m = (mu, mv, mn) dapat diletakkan di sembarang tempat pada sisitem koordinat pandang. Posisi mata yang paling sering dipakai adalah dengan menempatkannya pada sumbu n sejauh M dari VRP, yaitu pada posisi m = ( 0 , 0 , M).

3. Menentukan arah kamera

Untuk menentukan posisi dan orientasi kamera diperlukan tiga komponen yaitu:

  • VRP, yaitu r = (rx, ry, rz)

  • VPN, yaitu n = (nx, ny, nz)

  • Vektor dengan arah “ke atas”, yaitu vector v.

Penentuan vector n dimana

dengan n1 adalah sembarang vector.

Penentuan vector n dengan koordinat spheres:

nx = sin (θ) cos (θ)

ny = sin (θ) cos(θ)

nz = cos(θ)

dengan θ adalah besaran kolatitud dan θ adalah besaran azimuth.

5. 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:

untitled1

Gambar 6.2. Antarmuka program Translasi 3 Dimensi

SCRIPT:

#include <vcl\vcl.h>

#include <math.h>

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

}

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();

}

Jalankan program diatas dan hasil yang akan kita dapatkan seperti gambar berikut:

output

Gambar 6.3. Output program Translasi 3 Dimensi

Maret 20, 2009

GRAFIKA COMPUTER SESSION V

Filed under: education — yudhitya034 @ 6:04 am

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 :

51

Jaring dapat digunakan untuk membuat ‘kulit’ dari suatu objek. Ada dua cara untuk membuat objek 3D dengan jaring polygon, yaitu :

  1. Metode daftar titik (vertex list method)
  2. 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 :

52

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 :

53

Daftar dari titik-titik tersebut dapat dilihat pada table berikut :

54

Dari daftar titik pada table diatas dapat dibuat program untuk membentuk objek 3D berupa kubus seperti terlihat pada script berikut :

Script Program

<UNIT1.CPP>:

//—————————————————————————

  1. include <vcl.h>
  2. pragma hdrstop

//#include “Objek3D.h”

  1. include “Unit1.h”

//—————————————————————————

  1. pragma package(smart_init)
  2. 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>:

//—————————————————————————

  1. ifndef Unit1H
  2. define Unit1H

//—————————————————————————

  1. include <Classes.hpp>
  2. include <Controls.hpp>
  3. include <StdCtrls.hpp>
  4. include <Forms.hpp>
  5. 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;
//—————————————————————————

  1. endif

Hasilnya:

hasil-5

55

Daftar muka dan titik-titik pembentuk muka pada objek kubus diatas dapat dilihat pada table berikut :

56
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:

              kubus

              2. Buat beberapa bentuk lain objek 3D dan implementasikan dalam program?

              Jawab:

              segitiga

              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

                        GRAFIKA COMPUTER SESSION IV

                        Filed under: education — yudhitya034 @ 5:40 am

                        TRANSFORMASI OBYEK DUA DIMENSI

                        Grafika computer merupakan bidang yang menarik minat banyak orang. Salah satu sub bagian dari grafika adalah pemodelan objek. Dalam pemodelan objek 2D, berbagai objek dimodifikasi dengan melakukan berbagai operasi fungsi atau operasi transformasi geometri. Transformasi ini dapat berupa transformasi dasar ataupun gabungan dari berbagai transformasi geometri. Transformasi ini dikenal dengan Transformasi affine. Pada dasarnya, transformasi merupakan suatu operasi modifikasi bentuk objek tanpa merusak bentuk dasar dari objek. Salah satu contoh transformasi adalah transformasi dari window ke viewport.

                        Pada Viewport, Objek yang akan digambar pada layar biasanya mempunyai ukuran yang jauh lebih besar dibanding dengan ukuran layar, sehingga perlu dilakukan pemetaan transformasi yang memungkinkan objek tersebut bisa seluruhnya digambar dilayar, tetapi pada layar dengan koordinat yang terbatas, dan biasanya dibatasi oleh sebuah kotak yang disebut windows, sedangkan layarnya tersebut disebut Viewport. Proses transformasi dari windows ke viewport dapat dilhat pada gambar berikut :

                        gambar-41

                        1. Langkah-Langkah Transformasi Viewing 2 Dimensi

                          1. Pembentukan scene pada WC menggunakan output primitif atribut.

                          2. Untuk mendapatkan orientasi tertentu dari window, maka ditentukan sistem VC 2 dimensi pada WC. Frame digunakan untuk melengkapi penentuan orientasi dari windows persegi empat . Setelah frame dibentuk dapat ditransformasikan ke dalam WC untuk menampilkan koordinat.

                          3. Kemudian viewport ditentukan dalam normalized NVC (pada batasan antara 0 dan 1) dan memetakan deskripsi VC dari scene pada Normalized Coordinate.

                          4. Akhirnya dilakukan clipping (pemotongan) pada semua gambar yang ada diluar viewport.

                          42

                        2. Macam-macam transformasi:

                          1. Transformasi Objek, yang ditransformasikan titik-titik yang menyusun objek tersebut.

                          2. Transformasi Koordinat, yang diubah system koordinatnya sehingga objek mengalami transformasi dikarenakan perubahan system koordinat tersebut.

                        3. Tujuan Transformasi :
                          1. Merubah atau menyesuaikan komposisi pandangan.

                          2. Memudahkan membuat objek yang simetris

                          3. Melihat objek dari sudut pandang berbeda

                          4. Memindahkan satu atau beberapa objek dari satu tempat ke tempat lain, biasanya digunakan pada animasi computer.

                        4. Transformasi dasar pada objek dua dimensi terdiri dari :

                        TRANSLASI

                        Translasi merupakan suatu proses yang menyebabkan perpindahan objek dari satu titik ke titik lain. Translasi dilakukan dengan penambahan translasi pada suatu titik koordinat dengan translasi vector yaitu (trx,try), dimana trx adalah translation vector menurut sumbu x sedangkan try adalah translasi vector terhadap sumbu y.

                        SKALA

                        Transformasi skala adalah perubahan ukuran suatu objek. Penskalaan dilakukan untuk memperbesar atau memperkecil gambar

                        ROTASI

                        Rotasi merupakan bentuk transformasi berupa pemutaran objek, dilakukan dengan menambahkan besaran pada absis X dan ordinat Y. Rotasi dua dimensi pada suatu objek akan memindahkan objek tersebut menurut garis melingkar. Pada bidang xy.

                        SHEARING

                        Shearing mempunyai beberapa pengertian, antara lain :

                        • Shearing adalah bentuk transformasi yang membuat distorsi dari bentuk suatu objek, seperti menggeser sisi tertentu.

                        • Shearing adalah suatu proses untuk mentransformasikan objek dengan cara “membebani” objek tersebut kea rah tertentu, sehingga dihasilkan suatu objek yang distorsi.

                        Dua macam shear yang umum adalah shear menurut sumbu x dan shear menurut sumbu y.

                        PROJECT : TRANSFORMASI 2D

                        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. Terdapat 2 tombol putar, yakni berputas di cartesius dan berputar di tengah titik objek.

                        8. Buka C++ Builder dan buat tampilan seperti pada gambar berikut:

                        43

                        SCRIPT Program:

                        <UNIT1.CPP>:

                        #include <vcl.h>

                        #include <math.h>

                        #pragma hdrstop

                        #include “Unit1.h”

                        #pragma package(smart_init)

                        #pragma resource “*.dfm”

                        TForm1 *Form1;

                        struct Elemen { float x,y ;} ;

                        Elemen Objek[6];

                        //========================================================================

                        __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[5].x,Objek[5].y);

                        for (i=1;i<=5;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 = 100;

                        Objek[3].x = 100; Objek[3].y = 100;

                        Objek[4].x = 100; Objek[4].y = 150;

                        Objek[5].x = 150; Objek[5].y = 100;

                        FormShow(Sender);

                        }

                        void __fastcall TForm1::ButtonkananClick(TObject *Sender)

                        { int i;

                        for (i=1;i<=5;i++){ Objek[i].x+=5;};

                        FormShow(Sender);

                        }

                        //========================================================================

                        void __fastcall TForm1::ButtonbawahClick(TObject *Sender)

                        { int i;

                        for (i=1;i<=5;i++){ Objek[i].y+=5;};

                        FormShow(Sender);

                        }

                        //========================================================================

                        void __fastcall TForm1::Button1Click(TObject *Sender)

                        { Elemen TempObjek[6];

                        int i; float Sdt;

                        for (i=1;i<=5;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::Button2Click(TObject *Sender)

                        { Elemen TempObjek[6];

                        int i,n,m; float Sdt;

                        for (i=1;i<=5;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::ButtonkiriClick(TObject *Sender)

                        { int i;

                        for (i=1;i<=5;i++){ Objek[i].x-=5;};

                        FormShow(Sender);

                        }

                        //========================================================================

                        void __fastcall TForm1::ButtonatasClick(TObject *Sender)

                        {

                        int i;

                        for (i=1;i<=5;i++){ Objek[i].y-=5;};

                        FormShow(Sender);

                        }

                        //=======================================================================

                        <UNIT1.H>:

                        //—————————————————————————
                        #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
                        TPanel *Panel1;
                        TImage *Image1;
                        TButton *Button1;
                        TButton *Button2;
                        TButton *Buttonatas;
                        TButton *Buttonbawah;
                        TButton *Buttonkiri;
                        TButton *Buttonkanan;
                        void __fastcall FormActivate(TObject *Sender);
                        void __fastcall ButtonkananClick(TObject *Sender);
                        void __fastcall ButtonbawahClick(TObject *Sender);
                        void __fastcall Button1Click(TObject *Sender);
                        void __fastcall Button2Click(TObject *Sender);
                        void __fastcall ButtonkiriClick(TObject *Sender);
                        void __fastcall ButtonatasClick(TObject *Sender);
                        void __fastcall FormShow(TObject *Sender);

                        private: // User declarations
                        public: // User declarations
                        __fastcall TForm1(TComponent* Owner);

                        };
                        //—————————————————————————
                        extern PACKAGE TForm1 *Form1;
                        //—————————————————————————
                        #endif

                        Jalankan program diatas dan hasil yang akan kita dapatkan seperti gambar berikut:

                        44

                        Maret 8, 2009

                        GRAFIKA COMPUTER SESSION III

                        Filed under: education — yudhitya034 @ 7:22 am

                        LINGKARAN

                        Untuk membentuk suatu lingkaran, ada beberapa algoritma yang bisa digunakan :

                        a. ALGORITMA LINGKARAN 8 TITIK SIMETRIS

                        Proses pembentukan lingkaran dengan algoritma ini dapat dilakukan dengan menentukan suatu titik awal. Bila titik awal pada lingkaran (x,y) maka terdapat tiga posisi lain, sehingga dapat diperoleh delapan titik. Dengan demikian sebenarnya hanya diperlukan untuk menghitung segmen 450 dalam menentukan lingkaran selengkapnya. Dengan titik pusat lingkaran yang tertentu, delapan titik simetris dapat ditampilkan seperti pada gambar berikut :

                        gambar-31

                        Persamaan untuk menentukan koordinat titik-titik yang terletak pada sebuah piksel dengan menentukan sebuah besarnya sudut terhadap sumbu X. Memang bisa menggambar lingkaran dengan seperti ini tapi memerlukan ketelitian yang cukup tinggi. Dalam pembuatan lingkaran dapat dilakukan dengan menentukan suatu titik awal. Dalam lingkaran terdapat empat posisi, sehingga dapat diperoleh delapan titik. Dari kedelapan titik simetris ini masing-masing akan dihubungkan untuk membentuk suatu lingkaran. Procedure pembentukan lingkaran dengan menggunakan 8 titik simetris adalah sebagai berikut :

                        gambar2

                        a. ALGORITMA LINGKARAN TITIK TENGAH (MID POINT)

                        Algoritma mid point juga disebut algoritma lingkaran Bressenham. Bressenham mengembangkan generator lingkaran yang cukup efisien. Algoritma yang digunakan membentuk semua titik berdasarkan titik pusat dengan penambahan semua jalur disekeliling lingkaran. Algoritma ini diturunkan dari algoritma mid point untuk pembentukan garis. Dalam hal ini hanya diperhatikan bagian 450 dari suatu lingkaran, yaitu oktan kedua dari x=0 ke x=R/√2 dan dengan menggunakan procedure 8 titik simetris untuk menampilkan titik dari seluruh lingkaran seperti pada gambar berikut :

                        gambar3


                        Mid point diantara ke dua pixel dapat dilihat pada gambar berikut :

                        gambar4

                        Contoh Program pembentukan lingkaran dengan algoritma mid point

                        Diketahui jari-jari lingkaran r = 10 dan titik pusat (0,0)

                        · Buatlah table perhitungan untuk titik yang dihasilkan oleh algoritma mid points

                        · Buat prosedur untuk mengimplementasikan algoritma tersebut.

                        Jawab

                        · Tabel perhitungan

                        Penggambaran lingkaran dengan algoritma mid point untuk titik pusat (0,0), dimulai dari kuadran pertama yaitu dari x = 0 ke x = y.

                        Nilai awal parameter keputusan adalah :

                        P0= 1 – R

                        P0= 1 – 10

                        P0= – 9

                        Untuk lingkaran yang berpusat pada koordinat awal, titik awal adalah (X0,Y0)=(0,10), dan nilai kenaikan untuk penghitungan parameter keputusan adalah :

                        2 X0 = 0 2 Y0 = 20

                        Perhitungan dapat dilihat pada table berikut :

                        gambar5

                        Ø Algoritma Lingkaran Midpoint

                        Algoritma ini sering juga disebut algoritma lingkaran Bressenham. Algoritma yang digunakan membentuk semua titik berdasarkan titik pusat dengan penambahan semua jalur disekeliling lingkaran. Algoritma ini diturunkan dari algoritma midpoint untuk pembentukan garis. Dalam hal ini hanya diperhatikan bagian 45 derajat dari suatu lingkaran, yaitu oktan kedua dari x=0 ke x=R/√2 dan menggunkan procedure CirclePoints untuk menampilkan titik dari seluruh lingkaran.

                        MEMBUAT CIRCLE

                        Ø Pembuatan IMAGE

                        Klik Additional->Image, Kemudian drag di daerah form1. Image ini memiliki nama Image1 dan merupakan area untuk menggambar.

                        tes1

                        Ø Membuat RADIOGROUP

                        Klik Standard kemudian pilihlah RadioGroup. Kemudian drag pada grid.

                        Untuk membuat pilihan di dalam RadioGroup, pilih items pada properties, kemudian ketikan pilihan-pilihannya

                        tes2

                        tes3

                        · Program

                        Untuk proses pengkodean pembentukan lingkaran mid point diperlukan fungsi utama yaitu dan beberapa fungsi lain untuk inisialisasi dan tampilan. Adapun script dari fungsi-fungsi tersebut adalah :

                        Pada Unit1.cpp , ketikkan source:

                        //—————————————————————————

                        #include <vcl.h>

                        #pragma hdrstop

                        #include <stdlib.h>

                        #include <math.h>

                        #include “Unit1.h”

                        //—————————————————————————

                        #pragma package(smart_init)

                        #pragma resource “*.dfm”

                        TForm1 *Form1;

                        int tergambar, XC,YC,QX,QY;

                        //—————————————————————————

                        __fastcall TForm1::TForm1(TComponent* Owner)

                        : TForm(Owner)

                        {

                        }

                        //—————————————————————————

                        void __fastcall TForm1::FormActivate(TObject *Sender)

                        {

                        Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);

                        }

                        //====================================================================

                        void __fastcall TForm1::BtCloseClick(TObject *Sender)

                        {

                        Close();

                        }

                        //====================================================================

                        void __fastcall TForm1::BtBaruClick(TObject *Sender)

                        {

                        tergambar=false;

                        Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);

                        }

                        //====================================================================

                        void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)

                        {

                        tergambar=true; XC=X; YC=Y;

                        }

                        //====================================================================

                        void __fastcall TForm1::CirclePlotpoint(int XC, int YC, int X, int Y)

                        {

                        Image1->Canvas->Pixels[XC+X][YC+Y]=clGreen;

                        Image1->Canvas->Pixels[XC-X][YC+Y]=clBlack;

                        Image1->Canvas->Pixels[XC+X][YC-Y]=clBlue;

                        Image1->Canvas->Pixels[XC-X][YC-Y]=clYellow;

                        Image1->Canvas->Pixels[XC+Y][YC+X]=clRed;

                        Image1->Canvas->Pixels[XC-Y][YC+X]=clBlack;

                        Image1->Canvas->Pixels[XC+Y][YC-X]=clRed;

                        Image1->Canvas->Pixels[XC-Y][YC-X]=clBlack;

                        }

                        void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)

                        { int R;

                        BtBaruClick(Sender);

                        tergambar=false;

                        QX=X; QY=Y;

                        R=int(sqrt(pow(XC-QX,2)+pow(YC-QY,2)));

                        if (RadioGroup1->ItemIndex==0)

                        { CircleMidPoint(XC,YC,R); }

                        }

                        //====================================================================

                        void __fastcall TForm1::CircleMidPoint(int XC, int YC,int R)

                        {int x,y,p,k=0;

                        R=10;

                        x=0; y=R; p=1-R;

                        judul((float)x,(float)y,k,p);

                        do

                        {

                        k++;

                        if (p<0) { x=x+1; }

                        else

                        { x=x+1; y=y-1; }

                        if (p<0) { p=p+2*x+1; }

                        else { p=p+2*(x-y)+1; }

                        CirclePlotpoint(XC,YC,x,y);

                        tampil((float)x,(float)y,k,p);

                        } while (x<y);

                        }

                        //====================================================================

                        void __fastcall TForm1::tampil(float x,float y, int k, int p)

                        {

                        {

                        char tampilX[20],tampilY[20],tampilK[20],tampilPk[20];

                        int i,xt=200, yt=15;

                        //Menampilkan bilangan asli tanpa pembulatan

                        _gcvt(x,7,tampilX);

                        _gcvt(y,7,tampilY);

                        _gcvt(p,7,tampilPk);

                        if (k==0) { for (i=0; i<20;i++) { tampilK[i]=”; } }

                        else { _gcvt(k-1,10,tampilK); }

                        k=k+2;

                        //Menampilkan koordinat X dan Y

                        Image1->Canvas->TextOut(xt-50, k*yt,tampilK);

                        Image1->Canvas->TextOut(xt+100, k*yt,”(“);

                        Image1->Canvas->TextOut(xt+120, k*yt,tampilX);

                        Image1->Canvas->TextOut(xt+150, k*yt,”,”);

                        Image1->Canvas->TextOut(xt+160, k*yt,tampilY);

                        Image1->Canvas->TextOut(xt+190, k*yt,”)”);

                        Image1->Canvas->TextOut(xt, k*yt,tampilPk);

                        }

                        }

                        void __fastcall TForm1::judul(float x,float y, int k, int p)

                        {

                        int xt=200, yt=15, kt=2;

                        Image1->Canvas->TextOut(xt-50,(kt-1)*yt,”k”);

                        Image1->Canvas->TextOut(xt, (kt-1)*yt,”pk”);

                        Image1->Canvas->TextOut(xt+100, (kt-1)*yt,”(x k+1,y k+1)”);

                        }

                        //—————————————————————————

                        //—————————————————————————

                        Sedangkan pada unit1.h ,ketikkan source:

                        #include <Controls.hpp>

                        #include <StdCtrls.hpp>

                        #include <Forms.hpp>

                        #include <ExtCtrls.hpp>

                        //—————————————————————————

                        class TForm1 : public TForm

                        {

                        __published: // IDE-managed Components

                        TImage *Image1;

                        TButton *Button1;

                        TButton *Button2;

                        TRadioGroup *RadioGroup1;

                        void __fastcall Image1MouseUp(TObject *Sender, TMouseButton Button,

                        TShiftState Shift, int X, int Y);

                        void __fastcall Image1MouseDown(TObject *Sender,

                        TMouseButton Button, TShiftState Shift, int X, int Y);

                        void __fastcall CircleMidPoint(int XC, int YC,int R);

                        void __fastcall CirclePlotpoint(int XC, int YC, int X, int Y);

                        void __fastcall FormActivate(TObject *Sender);

                        void __fastcall BtCloseClick(TObject *Sender);

                        void __fastcall BtBaruClick(TObject *Sender);

                        void __fastcall tampil(float x,float y, int k, int p);

                        void __fastcall judul(float x,float y, int k, int p);

                        private: // User declarations

                        public: // User declarations

                        __fastcall TForm1(TComponent* Owner);

                        };

                        //—————————————————————————

                        extern PACKAGE TForm1 *Form1;

                        //—————————————————————————

                        #endif

                        Bentuk Form nya adalah:

                        bentuk-form1

                        button

                        timage

                        output1output2

                        Penjelasan fungsi mid point:

                        gambar6

                        Langkah – langkah tersebut terdapat dalam fungsi pembuatan source code mid point, sebagai berikut:

                        penjelasan1penjelasan21SEMOGA BERMANFAAT( HAPPY CODING:) )

                        Februari 27, 2009

                        GRAFIKA COMPUTER SESSION II

                        Filed under: education — yudhitya034 @ 7:09 am

                        Pengertian Output Primitif

                        Output/Grafis primitif adalah bentuk geometri dasar yang dapat digunakan untuk membentuk obyek yang lebih komplek. Dengan memasukkan output primitif tersebut sebagai stuktur yang lebih kompleks. Setiap output primitif mempunyai data koordinat dan informasi lain tentang bagaimana cara object ditampilkan pada layar. Titik dan garis lurus adalah bentuk geometri paling sederhana dan komponen gambar.

                        Borland C++ Builder menyediakan Canvas yang dapat digunakan untuk menampilkan gambar maupun tulisan ke layar. Kelas Canvas pada umumnya merupakan atribut dari kelas Lain. Beberapa kelas yang mempuntai atribut Canvas antara lain TPaintBox, TShape.

                        Macam-macam Output/Grafis primitif

                        1.Titik(Pixel)


                        Titik merupakan satuan gambar/grafis yang terkecil. Dengan menggambar titik maka kita dapat menggambar obyek apapun. Termasuk bentuk geometri dibawah merupakan bentuk –bentuk yang pada dasarnya berasal dari titik-titik. Operasi titik ini sering digunakan pada pengolahan citra (
                        Image processing). Setiap titik pada monitor memiliki parameter :koordinat dan warna.

                        Kode untuk menggambar titik :

                        Canvas-> Pixels[x][y] = warna

                        Dengan

                        x : koordinat mendatar
                        y : koordinat vertikal
                        Warna : warna pixel

                        Contoh : Canvas->Pixel [100][100] = clRed

                        2.Garis(line)

                        Garis adalah kumpulan titik-titik/pixel yang tersusun secara lurus dan linier dari titik awal sampai titik akhir.

                        Kode :

                        Canvas->MoveTo(x0, y0);
                        Canvas->MoveTo(x1, y1);

                        Canvas->LineTo(xn, yn)

                        Atribut Output Primitif

                        Pada umumnya, setiap parameter yang memberi pengaruh pada output primitif ditampilkan sesuai dengan parameter atribut.

                        1.Atribut Garis

                        Atribut dasar untuk garis lurus adalah style (tipe garis), width (tebal) dan color(warna). Dalam beberapa paket aplikasi grafik, garis dapat ditampilkan dengan mengunakan Pen.

                        2.Atribut Kurva

                        Parameter untuk atribut kurva sama dengan atribut segmen garis. Kurva dapat ditampilkan dengan berbagai warna, tebal, dot-dash(Style garis) dan pilihan pen atau brush. Selain itu untuk pengisian suatu bidang tertentu termasuk memilih warna antara solid dan pattern tertentu dan memilih warna pattern yang ada.

                        Algoritma Pembentukan Garis:

                        Digital Diferential Analyzer (DDA) adalah algoritma pembentukan garis berdasarkan perhitungan y atau x, Garis dibuat menggunakan dua ujung garis, yaitu titik awal (x1, y1) dan titik akhir (x2, y2). Setiap koordinat titik (xk, yk) yang membentuk garis diperoleh dari perhitungan, kemudian hasil perhitungan dikonversikan menjadi nilai integer.

                        Langkah-langkah pembentukan garis berdasarkan algoritma DDA adalah:

                        1. Tentukan dua titik yang akan dihubungkan dalam pembentukan garis.
                        2. Tentukan salah satu sebagai titik awal (x1, y1) dan titik akhir (x2, y2).
                        3. Hitung dx = x2 – x1 dan dy = y2 – y1
                        4. Tentukan step, yaitu jarak maksimum jumlah penambahan nilai x atau
                        nilai y, dengan ketentuan:
                        – bila |dx| > |dy| maka step = |dx|
                        – bila tidak, maka step = |dy|
                        5. Hitung penambahan koordinat pixel dengan persamaan:
                        x_inc = dx / step
                        y_inc = dy / step

                        6.Koordinat selanjutnya (x+x_inc, y+y_inc)

                        7.Plot pixel pada layar, nilai koordinat hasil perhitungan dibulatkan

                        8.Ulangi nomor 6 dan 7 untuk menentukan posisi pixel berikutnya sampai
                        x = x1 atau y = y1.

                        Prosedur Algoritma Garis DDA

                        Prosedur pembentukan garis lurus dengan algoritma DDA menggunakan bahasa pemrograman C adalah sebagai berikut:

                        void Line(int x1, y1, x2, y2;)
                        { int step, k;
                        float dx=x2-x1, dy=y2-y1, x_inc, y_inc, x, y;
                        x=x1; y=y1;
                        if (abs(dx)>abs(dy))
                        step=abs(dx);
                        else
                        step=abs(dy);
                        x_inc=dx/step;
                        y_inc=dy/step;
                        setpixel (x,y);
                        for (k=0; k<step; k++){
                        x += X_inc;
                        y += y_inc;
                        setpixel(round(x),round(y));
                        }
                        }

                        Kelemahan Algoritma DDA

                        Prosedur untuk menggambar kembali garis dengan membulatkan nilai x atau y ke bilangan integer memerlukan waktu.serta variabel x, y maupun m memerlukan bilangan real karena kemiringan merupakan nilai pecahan.

                        Pembuatan Aplikasi Dengan Penggunaan Algoritma DDA(Menggunakan C++ BUILDER:

                        Pada Project,ketik program:

                        //—————————————————————————
                        #include <vcl.h>
                        #pragma hdrstop
                        USERES(“Project1.res”);
                        USEFORM(“Unit1.cpp”, Form1);
                        //—————————————————————————
                        WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
                        {
                        try
                        {
                        Application->Initialize();
                        Application->CreateForm(__classid(TForm1), &Form1);
                        Application->Run();
                        }
                        catch (Exception &exception)
                        {
                        Application->ShowException(&exception);
                        }
                        return 0;
                        }
                        //—————————————————————————

                        Pada unit1.cpp,ketikkan program(untuk fungsi button2nya):


                        //—————————————————————————

                        #include <vcl.h>

                        #pragma hdrstop

                        #include <stdlib.h>

                        #include<math.h>

                        #include “Unit1.h”

                        //—————————————————————————

                        #pragma package(smart_init)

                        #pragma resource “*.dfm”

                        TForm1 *Form1;

                        int X1,X2,Y1,Y2;

                        int tergambar;

                        //—————————————————————————

                        __fastcall TForm1::TForm1(TComponent* Owner)

                        : TForm(Owner)

                        {

                        }

                        //—————————————————————————

                        void__fastcall TForm::FormActivate(TObject *Sender)

                        {

                        Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);

                        }

                        //—————————————————————————

                        void__fastcall TForm1::DDA(int xa,int ya,int xb,int yb)

                        { int dx,dy,step,k;

                        float Xincrement,Yincrement,x,y;

                        xa=10;ya=10;xb=17;yb=16;

                        dx = xb-xa;

                        dy = yb-ya;

                        x=(float)xa;

                        y=(float)ya;

                        if (abs(dx)>abs(dy))

                        { step = (abs(dx));}

                        else

                        { step = (abs(dy)); };

                        Xincrement=(float)dx/step;

                        Yincrement=(float)dy/step;

                        Image1->Canvas->Pixels[int (x)][int (y)]=clBlack;

                        judul(x,y);

                        for (k=0;k<=step;k++)

                        {

                        x+=Xincrement;

                        y+=Yincrement;

                        Image1->Canvas->Pixels[int(x)][int(y)]=clBlack;

                        tampil(x,y,k);

                        }

                        }

                        void __fastcall TForm1::Image1MouseDown(TObject *Sender,

                        TMouseButton Button, TShiftState Shift, int X, int Y)

                        {

                        tergambar=true; X1=X; Y1=Y;

                        }

                        //—————————————————————————

                        void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,

                        TShiftState Shift, int X, int Y)

                        {

                        {

                        Button1Click(Sender);

                        tergambar=false;

                        X2=X; Y2=Y;

                        if (RadioGroup1->ItemIndex==0)

                        {DDA(X1,Y1,X2,Y2);

                        }

                        };

                        }

                        //—————————————————————————

                        void __fastcall TForm1::Button1Click(TObject *Sender)

                        {

                        tergambar=false;

                        Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);

                        }

                        void __fastcall TForm1::judul(float x,float y)

                        {

                        char tampilX[20],tampilY[20];

                        int xt=200, yt=15, kt=2;

                        //Menampilkan bilangan asli tanpa pembulatan

                        _gcvt(x,4,tampilX);

                        _gcvt(y,4,tampilY);

                        Image1->Canvas->TextOut(xt-50, (kt-1)*yt,”k”);

                        Image1->Canvas->TextOut(xt, (kt-1)*yt,”x”);

                        Image1->Canvas->TextOut(xt+50, (kt-1)*yt,”y”);

                        Image1->Canvas->TextOut(xt, (kt*yt,tampilX);

                        Image1->Canvas->TextOut(xt+50, (kt*yt,tampilY);

                        Image1->Canvas->TextOut(xt+100, (kt-1)*yt,”(x bulat, y bulat)”);

                        //Menampilkan bilangan yang digunakan untuk pembulatan

                        _gcvt(x,2,tampilX);

                        _gcvt(y,2,tampilY);

                        Image1->Canvas->TextOut(xt+100, (kt*yt,”(“);

                        Image1->Canvas->TextOut(xt+120, (kt*yt,tampilX);

                        Image1->Canvas->TextOut(xt+150, (kt*yt,”,”);

                        Image1->Canvas->TextOut(xt+160, (kt*yt,tampilY);

                        Image1->Canvas->TextOut(xt+190, (kt*yt,”)”);

                        }

                        //—————————————————————————

                        void __fastcall TForm1::tampil(float x,float y,int k)

                        {

                        char tampilX[20],tampilY[20],tampilK[20];

                        int xt=200, yt=15, k +=2;

                        //Menampilkan bilangan asli tanpa pembulatan

                        _gcvt(x,4,tampilX);

                        _gcvt(y,4,tampilY);

                        Image1->Canvas->TextOut(xt, k*yt,tampilX);

                        Image1->Canvas->TextOut(xt+50, k*yt,tampilY);

                        //Menampilkan bilangan yang digunakan untuk pembulatan

                        _gcvt(x,2,tampilX);

                        _gcvt(y,2,tampilY);

                        _gcvt(k-3,10,tampilK);

                        //Menampilkan koordinat X dan Y

                        Image1->Canvas->TextOut(xt-50, k*yt,tampilK);

                        Image1->Canvas->TextOut(xt+100, k*yt,”(“));

                        Image1->Canvas->TextOut(xt+120, k*yt,tampilX);

                        Image1->Canvas->TextOut(xt+150, k*yt,”,”);

                        Image1->Canvas->TextOut(xt+160, k*yt,tampilY);

                        Image1->Canvas->TextOut(xt+190, k*yt,”)”);

                        }

                        void __fastcall TForm1::Button2Click(TObject *Sender)

                        {

                        Close();

                        }

                        //—————————————————————————

                        Pada unit1.h,ketikkan program(untuk fungsi button2nya):

                        //—————————————————————————
                        #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
                        TImage *Image1;
                        TRadioGroup *RadioGroup1;
                        TButton *Button1;
                        TButton *Button2;
                        void__fastcall FormActivate(TObject *Sender);
                        void__fastcall DDA(int xa,int ya,int xb,int yb);
                        void __fastcall judul(float x,float y);
                        void __fastcall tampil(float x,float y,int k);
                        void __fastcall Image1MouseDown(TObject *Sender,
                        TMouseButton Button, TShiftState Shift, int X, int Y);
                        void __fastcall Image1MouseUp(TObject *Sender, TMouseButton Button,
                        TShiftState Shift, int X, int Y);
                        void __fastcall Button1Click(TObject *Sender);
                        void __fastcall Button2Click(TObject *Sender);
                        private: // User declarations
                        public: // User declarations
                        __fastcall TForm1(TComponent* Owner);
                        };
                        //—————————————————————————
                        extern PACKAGE TForm1 *Form1;
                        //—————————————————————————
                        #endif

                        HASILNYA:

                        dda

                        SELAMAT MENCOBA 🙂

                        Februari 24, 2009

                        GRAFIKA COMPUTER SESSION I

                        Filed under: education — yudhitya034 @ 7:18 am

                        Pengertian Grafika Komputer

                        Grafika komputer merupakan studi tentang bagaimana membuat gambar/grafik dan bagaimana memanipulasinya dengan menggunakan komputer.

                        Perbedaan antara Picture/gambar, graphics/grafik dan Image/citra :

                        Picture/gambar : Paling luas/umum. Mencakup grafik dan citra.

                        Graphics/grafik : Gambar yang dibuat dengan dengan cara dan aturan

                        tertentu tanpa alat perekam gambar.

                        Image/citra : Gambar yang diambil dengan alat pengambil gambar

                        ( kamera, satelit, foto, sidik jari, scan dll)

                        Sistem Grafika Komputer

                        Sistem komputer baik itu perangkat lunak ataupun keras untuk membuat gambar/grafik dan memanipulasinya.

                        Sistem grafika komputer dibedakan menjadi dua yaitu :

                        • Non-interaktif

                        Grafika non-interaktif dibuat sebagai akhir dari proses dalam bentuk hardcopy. Contoh : Printer, Plotter dll

                        • Interaktif

                        Grafika interaktif dapat dibuat dan dimanipulasi secara interaktif pada layar peranti peraga. Peranti-peranti peraga interaktif yang paling umum digunakan : CRT (Tabung sinar katoda). Lain-lain : Plasma, LCD, laser, dsb.

                        Instalasi Borland C++ Builder 6

                        1. Masukkan cd#1, lalu secara otomatis cd akan menjalankan program autorun. Atau klik install.exe di master sourcenya.


                        2. Pilih menu yang pertama, yaitu C++ Builder 6.

                        3. Klik Next,

                        4. Isi Serial Number dan Authorization key. Lalu klik Next,

                        5. pilih opsi pertama “I accept the terms in the license agreement”, lalu klik Next,

                        6. Klik Next,

                        7. Pada tampilan ini akan diminta untuk jenis instalasi yang diinginkan, tapi dianjurkan untuk memilih Custom Instalation, karena semua fitur akan terinstal, termasuk file Help nya yang akan membantu dalam pencarian bantuan yang berhububungan dengan Borland C++ Buider 6.

                        8. Biarkan semua komponen terpilih (keadaan warna putih semua). Klik Next untuk lanjut ke tampilan berikutnya,

                        9. Pilih sesuai tipe driver yang telah terpasang di komputer, namun jika tidak tahu, klik pilih saja yang paling baru atau jangan diubah sama sekali pilihannya (default), kemudian klik Next untuk tampilan berikut nya,

                        10. Klik pilihan ini jika ingin menggunakan VisiBroker/CORBA Support. Klik Next untuk lanjut ke tampilan berikutnya,

                        11. Klik Office 2000 jika di dalam komputer telah terinstal MS Office 2000 ke atas, lalu klik Next untuk lanjut ke tampilan berikutnya,

                        12. Pilih fitur ini jika ingin menggunakan jenis database InterBase Client. InterBase merupakan salah satu jenis database yang mendukung aplikasi database clientserver atau jaringan. Setelah itu akan diminta persetujuan kesepakatan untuk meng-install-nya. Klik Next dan Next lagi untuk lanjut ke tampilan berikutnya,

                        13. Biarkan tempat-tempat tujuan instalasi seperti semula (default), karena akan lebih mudah untuk pembelajaran berikutnya dan buku-buku yang dibuat akan mengarah pada tempat yang semula. Klik Next untuk lanjut ke tampilan berikutnya,

                        14. Biarkan pilihan default, karena pada saat software ini akan di uninstall, akan diminta CD master sourcenya, namun jika space harddisk tidak mencukupi, maka jangan pilih fitur ini. Klik Next dan Next untuk memulai instalasi.

                        15. Masukkan CD#2 dan klik OK untuk lanjut proses instalasi. Ikuti saja setiap proses instalasi lainnya (Java, VisiBroker, Interbase) setelah proses instalasi Borland C++ Builder 6 selesai.

                        16. Setelah muncul tampilan ini, maka instalasi selesai, reboot komputer.

                        17. Sebelum memulai membuka software Borland C++ Builder 6, akan diminta untuk mengisi kode aktivasi. Isi sesuai nomor yang diperoleh,

                        18. Pilih yang kedua untuk memasukkan kode aktivasi dari telepon, dan masukkan

                        19. Klik Next untuk melihat apakah kode yang dimasukkan benar atau tidak.

                        20. Klik Exit setelah registrasi sukses, saatnya memulai menggunakan software Borland C++ Builder 6.

                        Selamat mencoba:)

                        Membuat Project dengan TImage:

                        Program aplikasi berikut akan menunjukkan bagaimana membuat aplikasi pemrograman grafis dengan fasilitas TImage. Adapun langkah-langkah pembuatan aplikasi adalah sebagai berikut:

                        1) Pembuatan antarmuka

                        Langkah-langkahnya:

                        1) IMAGE(segi empat dengan garis putus-putus)

                        o Klik additional>image kemudian drag pada grid (form 1 daerah berbintik-bintik). Akan terbentuk segi empat dengan garis putus – putus. Lebar kanvas buka gambar dapat disesuaikan dengan kebutuhan.

                        2) LABEL(Menampilkan Teks)

                        o Klik additional>Static Text (cari symbol huruf A),kemudian drag ke daerah grid,diluar kanvas atau image yang telah dibuat dilangkah pertama.

                        o Buat static text sebanyak dua kali pada layar,yakni Static text1 dan Static text2.

                        o Ganti nama Static text1 dan Static text2 dengan posisi X dan posisi Y, cara mengganti nama tersebut adalah dengan mengganti Caption pada object inspector.

                        o Ketik pada Caption>Static text1 dengan Posisi X.

                        o Ketik pada Caption>Statictext2 dengan Posisi Y.

                        3) BUTTON (Membuat kontrol tombol tekan)

                        o Klik Standard>Button dan drag ke form,lakukan sebanyak tiga kali atau sebanyak tombol yang anda butuhkan dalam aplikasi yang anda buat.

                        o Pada form akan tampak Button1,Button2,dan Button3, lalu gantilah nama button-button tersebut melalui Caption pada Object Inspector dengan nama : Warna untuk memilih warna pena yang diinginkan,Baru untuk membersihkan kanvas dan Keluar untuk menutup aplikasi(keluar dari aplikasi).

                        4) DIALOGS

                        o Standard>Mainmenu ( Membuat Mainmenu sehingga dapat memudahkan user dalam menggunakan aolikasi,mainmenu yang akan dibuat terdiri atas File>Open,File>Save)

                        o Dialogs>OpenPicturesDialogs ( Membuka file yang pernah disimpan dalam aplikasi “Buku Gambar”)

                        o Dialog>SavePicturesDialogs ( Menyimpan file yang telah dibuat dalam aplikasi “Buku Gambar”)

                        o Dialog>ColorDialogs (user dapat memilih warna pena yang akan digunakan untuk menggambar)

                        2) Pembuatan Program

                        Ketikkan script yang ada dibawah:

                        #include <vcl.h>

                        #pragma hdrstop

                        #include”Unit1.h”

                        #pragma package(smart_init)

                        #pragma resources “*.dfm”

                        TForm1 * Form1;

                        Int Tergambar;

                        _fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner)

                        {
                        }

                        (Ketikkan pada button warna)

                        void_fastcall TForm1::ButtonClick(TObject *Sender)

                        {

                        If (ColorDialog1->Execute())

                        Image1->Canvas->Pen->Color=ColorDialog1->Color;

                        }

                        void_fascall TForm1::FormActivate(TObject *Sender)

                        {

                        Tergambar=false;

                        Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);

                        }

                        Void _fastcall TForm1::Image1MouseDown(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y)

                        {

                        Tergambar=True;

                        Image1->Canvas->MoveTo(X,Y);

                        }

                        (ketikkan pada button baru)

                        void _fastcall TForm1::BaruClick(TObject *Sender)

                        {

                        Tergambar=false;

                        Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);

                        }

                        void _fastcall TForm1: :Image1MouseMove(TObject *Sender,TShiftState Shift, int X,int Y)

                        {

                        Edit X->Text=IntToStr(X);

                        EditY->Text=IntToStr(Y);

                        If(Tergambar)

                        {

                        Image1->Canvas->LineTo(X,Y);

                        }

                        }

                        void _fastcall TForm1: :Image1MouseUp(TObject *Sender,TMouseButton Button,TShiftState Shift,int X,int Y)

                        {

                        Tergambar=false;

                        }

                        (Ketikan pada button keluar)

                        Void _fastcall TForm1: :KeluarClick(TObject *Sender)

                        {

                        Close();

                        }

                        Free Music
                        Free Music

                        Free Music

                        Blog di WordPress.com.