Umumnya persamaan garis lurus pada koordinat kartesius diwujudkan dalam persamaan garis : y=m.x+b
jika dimisalkan pada dua titik(x0,y0 dan x1,y1) akan dibuat sebuah garis lurus, kita dapat menentukan nilai “m' dan “b” dengan persamaan berikut:
b = y1-m.x1
algoritma untuk menggambar garis pada komputer didasarkan pada dua persamaan di atas. dimana m adalah gradien atau kemiringan garis tersebut.
Algoritma digital differential analyzer(DDA)
Prinsip algoritma ini adalah mengambil nilai integer terdekat dengan jalur garis berdasarkan atas sebuah titik yang telah ditentukan sebelumnya(titik awal garis).
Algoritma pembentukan garis DDA:
- Tentukan dua titik yang akan dihubungkan dalam pembentukan garis.
- Tentukan salah satu titik sebagai awal(x0,y0) dan titik akhir(x1,y1).
- Hitung dx=x1x0, dan dy= y1y0.
- Tentukan langkah, yaitu dengan cara jarak maksimum jumlah penambahan nilai x maupun nilai y dengan cara: - Bila nilai absolut dari dx lebih besar dari absolut dy, maka langkah= absolut dari dx.- Bila tidak maka langkah= absolutdari dy
- Hitung penambahan koordinat pixel yaitu x_increment=dx/langkah, dan y_increment=dy/langkah
- Koordinat selanjutnya (x+x_increment, y+y_increment)
- Posisi pixel pada layar ditentukan dengan pembulatan nilai koordinat tersebut.
- Ulangi nomor 6 dan 7 untuk menentukan posisi pixel selanjutnya,sampai x = x1 dan y = y1.
uses graph,crt;
{tambahkan pada bagian ini prosedur penginisialisasian device, lihat pada bab 1}
procedure drawLine(xstart,ystart,xend,yend:integer);
var
step,k:integer;
dx,dy:real;
x_inc,y_inc,x,y:real;
begin
dx:=xend-xstart;
dy:=yend-ystart;
x:=xstart;
y:=ystart;
if abs(dx) > abs(dy) then
step:=round(abs(dx))
else
step:=round(abs(dy));
x_inc:=dx/step;
y_inc:=dy/step;
putPixel(round(x),round(y),30);
for k:=1 to step do
begin
x:=x+x_inc;
y:=y+y_inc;
putPixel(round(x),round(y),30);
end;
end;
begin
init;
{menggambar garis dari titik 10,10 ke 500,10}
drawLine(10,10,500,10);
readkey;
destroy;
end.
Algoritma garis Bressenham
Tidak seperti Algoritma DDA, Algoritma Bressenham tidak membulatkan nilai posisi pixel setiap waktu. Algoritma Bressenham hanya menggunakan penambahan nilai integer yang juga dapat diadaptasi untuk menggambar lingkaran.Berikut ini langkah langkah untuk membentuk garis menurut algoritma Bressenham:
- Tentukan dua titik yang akan dihubungkan
- Tentukan salah satu titik di sebelah kiri sebagai titik awal yaitu(x0,y0) dan titik lainnya sebagai titik akhir(x1,y1).
- Hitung dx,dy,2dx dan 2dy2dx.
- Hitung parameter p0=2dydx
- Untuk setiap xk sepanjang jalur garis, dimulai dengan k=0, - Bila pk < 0, maka titik selanjutnya adalah (xk+1,yk), dan pk+1=pk+2dy - Bila tidak, maka titik selanjutnya adalah(xk+1, yk+1), dan pk+1=pk+2dy
- Ulangi langkah nomor 5 untuk menentukan posisi pixel selanjutnya, samapai x=x1 dan y=y1.
uses graph,crt;
{tambahkan pada bagian ini prosedur penginisialisasian device, lihat pada bab 1}
procedure DrawBressLine(xa,ya,xb,yb:integer);
var
dx,p,dy,xEnd:integer;
x,y:real;
begin
dx:= abs(xb-xa);
dy:= abs(yb-ya);
p:=2*dy-dx;
if xa > xb then
begin
x:=xb;
y:=yb;
xEnd:=xa;
end
else
begin
x:=xa;
y:=ya;
xEnd:=xb;
end;
putPixel(round(x),round(y),30);
while x < xEnd do
begin
x:=x+1;
if p < 0 then
p:=p+(2*dy)
else
begin
y:=y+1;
p:=p+(2*(dy-dx));
end;
putPixel(round(x),round(y),30);
end;
end;
begin
init;
DrawBressLine(10,10,500,10);
readkey;
destroy;
end.
0 comments:
Post a Comment