Senin, 09 Maret 2009

Modul 3


LINGKARAN DAN ELLIPSE

Tujuan Praktikum
Memahami algoritma pembentukan lingkaran dan ellipse.
Mengaplikasikan algoritma tersebut ke dalam program

Dasar teori
Lingkaran


Untuk membentuk suatu lingkaran, ada beberapa algoritma yang bisa digunakan :
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 45 derajat.


Void titikSimetris(int x, int y, int value)
{ SetPixel(x,y,value);
SetPixel(-x,y,value);
SetPixel(x,-y,value);
SetPixel(-x,-y,value);
SetPixel(y,x,value);
SetPixel(-y,x,value);
SetPixel(y,-x,value);
SetPixel(-y,-x,value);
}
Algoritma Lingkaran titik tengah (Mid Point )
Algoritma mid point juga disebut algoritma lingkaran Bresenham. Bressenham mengembangkan generator lingkaran yang cukup efisien. Algoritma yang digunakan membentuk semua titik berdsarkan titik pusat dengan penambahan semua jalur disekeliling lingkaran. Algoritma ini diturunkan dari algoritma mid point untuk pem,bentukan garis.
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 :
//---------------------------------------------------------------------------
#include
#include
#include
#pragma hdrstop
#include "AlgoCircle.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::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]=clBlack;
Image1->Canvas->Pixels[XC-X][YC+Y]=clBlue;
Image1->Canvas->Pixels[XC+X][YC-Y]=clGreen;
Image1->Canvas->Pixels[XC-X][YC-Y]=clYellow;
Image1->Canvas->Pixels[XC+Y][YC+X]=clRed;
Image1->Canvas->Pixels[XC-Y][YC+X]=clPurple;
Image1->Canvas->Pixels[XC+Y][YC-X]=clRed;
Image1->Canvas->Pixels[XC-Y][YC-X]=clYellow;
}
//---------------------------------------------------------------------------
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;" x="x+1;" y="y-1;" p="p+2*x+1;" p="p+2*(x-y)+1;" k="k+2;" yt="15;" xt="200," i="0;i<20;i++)">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)");
}
void __fastcall TForm1::BtBaruClick(TObject *Sender)
{
tergambar=false;
Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BtCloseClick(TObject *Sender)
{
Close();
}
//---------------------------
-------------------

hasil Output :
-----------------------------

Tidak ada komentar:

Posting Komentar