y:=y-1;
p:=p+(2*(x-y)+1);
end;
end;
circlePlotPoints(xCenter,yCenter,x,y);
end;
begin
init;
circleMidPoint(100,100,90);
readkey;
destroy;
end.
created by : Pagus33@gmail.com
1. 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.
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.
Langkah-langkah dalam pembentukan lingkaran dengan algoritma mid point adalah sebagai
berikut :
a. Masukkan jari-jari dan pusat lingkaran dan dapatkan titik permulaan pada keliling yang berpusat
pada titik awal sebagai :
b. Hitung nilai awal parameter keputusan sebagai berikut :
c. Pada masing-masing posisi , mulai dari k=0, lakukan tes berikut :
Jika < 0 titik berikut sepanjang lingkaran yang berpusat (0,0) adalah
titik berikutnya untuk lingkaran adalah
dengan dan
d. Tentu titik simetri untuk 7 oktan yang lain
e. Pindahkan masing-masing posisi piksel ke bagian lingkaran yang berpusat dan lukis nilai
koordinat.
f. Ulangi langkah c sampai e hingga
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
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 :
Untuk lingkaran yang berpusat pada koordinat awal, titik awal adalah =(0,10), dan nilai kenaikan
untuk penghitungan parameter keputusan adalah :
Perhitungan dapat dilihat pada table berikut :
K
0
1
2
3
4
5
6 -6
-1
6
-3
8
5
6 (1,10)
(2,10)
(3,10)
(4,9)
(5,9)
(6,8)
(7,7) 2
4
6
8
10
12
14 20
20
20
18
18
16
14
#pragma hdrstop
#include
#include "math.h"
#pragma resource "*.dfm"
TForm1 *Form1;
int tergambar, XC,YC,QX,QY;
= script tersebut menjelaskan awal dari pembuatan program yang lain.
================================================
====================
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
= Awal antar muka
================================================
====================
void __fastcall TForm1::FormActivate(TObject *Sender)
{
Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);
}
================================================
====================
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
= untuk menjalankan button close
================================================
====================
void __fastcall TForm1::Button1Click(TObject *Sender)
{
tergambar=false;
Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);
}
= untuk menjalankan button yang berisi baru
================================================
====================
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]=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;
}
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{ int R;
Button1Click(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
}
//================================================
====================
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]='\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)");
}
Output
3.3
1)
2)
3)
4)
fungsi lingkaran menggambarkan posisi midpoint antara pixel yang terdekat dengan
jalur lingkaran setiap step. Fungsi lingkaran menentukan parameter pada algoritma
lingkaran.
Langkah-langkah pembentukan lingkaran :
Tentukan radius r dengan titik pusat lingkaran (xc,yc) kemudian diperoleh (xc,yc)= 0,r).
Hitung nilai dari parameter P0 = 1-r
Tentukan nilai awal k = 0, untuk setiap posisi xk berlaku sbb :
Bila pk <0, maka titik selanjutnya adalah (xk+1,yk)
Pk+1 = pk +2xk+1+1
Bila pk >0, maka titik selanjutnya adalah (xk+1,yk-1)
Pk+1 = pk +2 xk+1+1 - 2 yk+1
Dimana 2 xk+1 = 2 xk + 2 dan 2 yk+1 = 2 yk 2
Tentukan titik simetris pada ketujuh oktan yang lain.
5)
6)
Gerakkan setiap posisi pixel (x,y) pada garis melingkar dari lingkaran dengan titik pusat
(xc,yc) dan tentukan nilai koordinat : x= x + xc dan y = y + yc
Ulangi langkah ke 3 -5, sampai dengan x>=y
Contoh :
Untuk menggambarkan algoritma Bressenham dalam pembentukan suatu lingkaran dengan
titik pusat (0,0) dan radius 10, perhitungan berdasarkan pada oktan dari kuadran pertama
dimana x =0 sampai x =y.
Penyelesaian :
(x0,y0) =(0,0) r = 10
(x0,y0) = (0,10) 2x0 = 0, 2y0 = 20
parameter p0 = 1-r = -9