Selasa, 05 Mei 2009

LINGKARAN DAN ELLIPSE



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.

b. 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.

interface:




Source code Program :

Unit1.cpp


//---------------------------------------------------------------------------

#include >> membaca file vcl untuk memulai pembuatan program pada Borland C++ Builder

#pragma hdrstop >> library yang sudah disediakan oleh Borland C++ Builder

#include >> membaca file header stdlib

#include >> membaca file header math yang berhubungan dengan perhitungan

#include "Unit1.h" >>membaca file Unit1.h

//---------------------------------------------------------------------------

#pragma package(smart_init) >> library yang sudah disediakan oleh Borland C++ Builder

#pragma resource "*.dfm">>library yang sudah disediakan oleh Borland C++ Builder

TForm1 *Form1;

int tergambar, XC,YC,QX,QY; >> deklarasi variabel tergambar, XC,YC,QX,QY yang bertipe integer

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

>> memanggil fungsi TForm1

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

void __fastcall TForm1::FormActivate(TObject *Sender)

{

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

}

>>memanggil fungsi FormActivate untuk membuat objek dengan komponen canvas di Image1

//---------------------------------------------------------------------------

void __fastcall TForm1::BtCloseClick(TObject *Sender)

{

Close();

}

>>memanggil fungsi BtCloseClick untuk membaca fungsi close

//---------------------------------------------------------------------------

void __fastcall TForm1::BtBaruClick(TObject *Sender)

{

tergambar=false;

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

}

>>memanggil fungsi BtBaruClick untuk membuat objek dengan komponen canvas di Image1 dimana variabel tergambar bernilai false

//---------------------------------------------------------------------------

void __fastcall TForm1::Image1MouseDown(TObject *Sender,

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

{

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

}

>> memanggil fungsi Image1MouseDown

//---------------------------------------------------------------------------

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

{

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

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

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

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

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

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

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

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

}

>> memanggil fungsi CirclePlotpoint

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

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) style=""> 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

}

>> memanggil fungsi CircleMidPoint

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

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

>> memanggil fungsi tampil

{

{

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++) style=""> tampilK[i]='\0'; } }

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

}

>> memanggil fungsi judul //================================================================

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

TShiftState Shift, int X, int Y)

{

int R; >> pendeklarasian variabel R yang bertipe integer

BtBaruClick(Sender);

tergambar=false; >> variabel tergambar yang bernilai false

QX=X; QY=Y;

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

if (RadioGroup1->ItemIndex==0)

{ CircleMidPoint(XC,YC,R); }

}

>>memanggil fungsi Image1MouseUp

//---------------------------------------------------------------------------

Unit.h

>>File ini berisi event handler untuk mengatasi sebuah event dari komponen yang ditempatkan pada sebuah form.

//---------------------------------------------------------------------------

#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include

#include

#include

#include

#include

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

TRadioGroup *RadioGroup1;

TImage *Image1;

TButton *BtBaru;

TButton *BtClose;

void __fastcall FormActivate(TObject *Sender);

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

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

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

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

void __fastcall BtCloseClick(TObject *Sender);

void __fastcall BtBaruClick(TObject *Sender);

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

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

OUTPUT :



















Tidak ada komentar: