Selasa, 29 Maret 2011

Algoritma Pembentuk Lingkaran

Algoritma adalah algortitma yang digunakan untuk pemorgraman grafis yang terdiri dari titik-titik yang terhubung dan dihubungkan.
Disini saya ingin mencoba menjelaskan sedikit tentang algoritma pembentuk lingkaran.
Secara umum, pembentukan lingkaran dapat dirumuskan sebagai berikut : x2+y2=R2. Dalam membentuk sebuah lingkaran terdapat beberapa cara, hanya bayka pula yanng tidak efisien.
Lingkaran dapat dibentuk dengan mengggambar seperempat, ini karena bagian lain dapat dibuat sebagai bagian yang simetris.
a)      Algoritma simetris delapan titik.
Disini pembuatan lingkaran dapat dilakukan dengan menentukan satu titik awal. Anggaplah satu titik awal tersebut (X, y), maka akan terdapat tiga posisi lain, sehingga dapat diperoleh delapan titik. Dengan demikian sebenarnya hanya perlu menghitung segmen 45’ dalam menentukan keseluruhan lingkaran. Lewat pusat titik tertentu, delapan titik simetris dapat ditampilkan dengan prosedur circle point dibawah ini:
procedure CirclePoints(x, y, value:integer);
begin
putPixel(x,y,value);
putPixel(-x,y,value);
putPixel(x,-y,value);
putPixel(-x,-y,value);
putPixel(y,x,value);
putPixel(-y,x,value);
putPixel(y,-x,value);
putPixel(-y,-x,value);
end;
b)      Algritma lingkaran midpoint
Disebut juga sebagai algoritma lingkaran bressenham. Bressenham mengembangkan generator lingkaran yang cukup efisien. Algoritma yang digunakan membentuk semua titik menurut titik pusat dengan penambahan jalur sekeliling lingkaran. Algoritma ini  diturunkan dari algoritma midpoint pembentukan garis. Disini hanya diperhatikan bagian 45’ dari suatu lingkaran, yaitu oktan kedua dari  dan menggunakan circle point untuk menampilkan titik dari seluruh lingkaran
Langkah-langkahnya adalah
·         Tentukan radius r dengan titk pusat lingkaran (xc,yc) kemudian diperoleh  (x0, y0)=(0,r)
·         Hitung  nilai dari parameter P0=5/4-r
·         Tentukan nilai awal k=0, untuk setip posisi xk berlaku sebagai berikut :
o   Bila Pk<0, maka titik selanjutnya adalah (xk+1.yk-1), dan Pk+1=Pk+2Xk+1+1-2yk+1
Dimana 2yk+1=2xk+1+2  dan 2yk+=2yk+2
·         Tentukan titik simetris pada ketujuuh oktan yang lain
·         Gerakkan setiap posisi pixel (x,y) pada garis melingkar dari lingkaran dengan titik pusat (xc,yc) dan tentukan nilai koordinat :
X=x+xcy=y+yc
·         Ulangi langkah ke-3 sampai 4, sehingga x>=y

Untuk menggambarkan algoritma ini, pembentukan suatu lingkaran denga titik pusat (0,0) dan radius, perhitungan berdasarkan pada oktan kuadaran pertama di mana x=0 sampai x=y. nilai parameter dapat ditentukan dengan P0=1-r=1-10=-9

 Prosedur Algoritma Lingkaran Midpoint
Input yang digunakan pada prosedur ini adalah koordinat  titik pusat dan radius lingkaran. Posisi pixel ditentukan dengan setPixel.
uses graph,crt;

procedure circlePlotPoints(xCenter,yCenter,x,y:integer);
begin
putPixel(xCenter+x, yCenter+y,30);
putPixel(xCenter-x, yCenter+y,30);
putPixel(xCenter+x, yCenter-y,30);
putPixel(xCenter-x, yCenter-y,30);
putPixel(xCenter+y, yCenter+x,30);
putPixel(xCenter-y, yCenter+x,30);
putPixel(xCenter+y, yCenter-x,30);
putPixel(xCenter-y, yCenter-x,30);
end;
procedure circleMidPoint (xCenter,yCenter,radius:integer);
var
x,y,p:integer;
begin
x:=0;
y:=radius;
p:=1-radius;
circlePlotpoints(xCenter,yCenter,x,y);
while x<y do
begin
x:=x+1;;
if p<0 then
p:=p+(2*x+1)
else
begin
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.


Tidak ada komentar:

Posting Komentar