31 Juli 2008

Grafika Komputer (membuat garis dasar )

Garis ( Line )

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:

y1-y0
m = ______
x1-x0

b = y1 - mx1

algoritma untuk menggambar garis pada komputer didasarkan pada dua persamaan di atas. dimana m adalah gradien atau kemiringan garis tersebut.

1. 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:
1. Tentukan dua titik yang akan dihubungkan dalam pembentukan garis.
2. Tentukan salah satu titik sebagai awal(x0,y0) dan titik akhir(x1,y1).
3. Hitung dx=x1x0, dan dy= y1y0.
4. 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= absolut dari dy
5. Hitung penambahan koordinat pixel yaitu x_increment=dx/langkah, dan y_increment=dy/langkah
6. Koordinat selanjutnya (x+x_increment, y+y_increment)
7. Posisi pixel pada layar ditentukan dengan pembulatan nilai koordinat tersebut.
8. Ulangi nomor 6 dan 7 untuk menentukan posisi pixel selanjutnya, sampai x = x1 dan y = y1.

Note: Semua kode Pascal pada modul ini menggunakan prosedur prosedur di bawah. tambahkan pada setiap awal kode program!.

procedure init;
var gd, gm : integer;
begin
gm:=detect; gd:=0;
InitGraph(gd,gm,'');
if GraphResult <> grOk then
begin
Writeln('Graph driver ',gd,' graph mode ',gm,' not supported');
Halt(1);
end;
end;

procedure destroy;
begin
closegraph;
end;


Contoh Prosedur DDA dalam pascal:

uses graph,crt;
{tambahkan pada bagian ini prosedur penginisialisasian device,
lihat pada Note}
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.




2. 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:
1. Tentukan dua titik yang akan dihubungkan
2. Tentukan salah satu titik di sebelah kiri sebagai titik awal yaitu(x0,y0) dan titik lainnya sebagai titik akhir(x1,y1).
3. Hitung dx,dy,2dx dan 2dy2dx.
4. Hitung parameter p0=2dydx
5. Untuk setiap xk sepanjang jalur garis, dimulai dengan k=0,
­ Bila pk < 1="pk+2dy" 1="pk+2dy2dx." x =" x1" y =" y1."> 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 <>
#include
#include
#include
#include
#include

int line_mat(int x1,int y1,int x2,int y2,int color);
int line_dda(int x1,int y1,int x2,int y2,int color);
int line_bre(int x1,int y1,int x2,int y2,int color);
int line_mid(int x1,int y1,int x2,int y2,int color);


int main(void)
{
int elapse;
struct time t1,t2;

/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int xmax, ymax;

/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");

/* read result of initialization */
errorcode = graphresult();
/* an error occurred */
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}

setcolor(getmaxcolor());
xmax = getmaxx();
ymax = getmaxy();

// get start time
gettime(&t1);
printf("The Start time is: %2d:%02d:%02d.%02d\n",
t1.ti_hour, t1.ti_min, t1.ti_sec, t1.ti_hund);

// draw line graphics
// line_mat(0,0,xmax*1,ymax*1,1);
// line_dda(0,0,xmax*1,ymax*1,1);
// line_bre(0,0,xmax*1,ymax*1,1);
// line_mid(0,0,xmax*1,ymax*1,1);

// get finish time
gettime(&t2);
printf("The Finish time is: %2d:%02d:%02d.%02d\n",
t2.ti_hour, t2.ti_min, t2.ti_sec, t2.ti_hund);
// elapse time
elapse = (t2.ti_hour*60*60*100+t2.ti_min*60*100+t2.ti_sec*100+t2.ti_hund)- \
(t1.ti_hour*60*60*100+t1.ti_min*60*100+t1.ti_sec*100+t1.ti_hund);
printf("The Elapse time is: %d x 1/100 second \n",elapse);

/* clean up */
getch();
closegraph();
return 0;
}

int line_mat(int x1,int y1,int x2,int y2,int color)
// Algorithm y = m * x + b
// It is assumed that x1 < m =" ((float)" c =" y1" x =" x1;" fy =" m" y =" fy" dx =" x2-x1;" dy =" y2-y1;"> abs(dy)) step=abs(dx); else step=abs(dy);
x_increment = float(dx) / float(step);
y_increment = float(dy) / float(step);
x = x1; y = y1;
putpixel(int (x+0.5),int(y+0.5),color);
for (k=1;k<=step;k++) { x = x+x_increment; y = y+y_increment; putpixel(int(x+0.5),int(y+0.5),color); } return(0); } int line_bre(int x1,int y1,int x2,int y2,int color) // Algorithm Bresenham { int dx,dy,x,y,x_end; int p,const1,const2; dx = x2-x1; dy = y2-y1; p = 2*dy-dx; y = y1; const1 = 2*dy; const2 = 2*(dy-dx); // determine which point to use as start, which as end if (x1 > x2)
{ x = x2; y = y2; x_end = x1; }
else
{ x = x1; y = y1; x_end = x2; }
putpixel(x,int(y+0.5),color);
while ( x < p =" p+const1;" y =" y+1;" p =" p+const2;" y="y1;" a =" y2" b =" x2" g =" 2" deltag1 =" 2" deltag2 =" 2" x =" x1;"> 0)
{ G += DeltaG1;
y++; ; // Next column and row.
putpixel(x,y,color);
}
else
{ G += DeltaG2;
// y not changed // Next column.
putpixel(x,y,color);
}
}
return (0);
}

Related Posts [Artikel Terkait]



posting by jideblack

Comments :

0 komentar to “Grafika Komputer (membuat garis dasar )”


Posting Komentar

 
| Info Teknologi | Music | Informatika | Blogger Tips | SEO Blogger Indonesia Counter Powered by  RedCounter

Info teknologi free download download mp3 info tips rach-man facebook tutorial free lyrik 3gp lokal avi forum no free sex haram sekolah smu gratis uang kaya optimasi video indonesia lokal gadis cantik murah musik new perawan search update teknik SEO Adsense blog indonesia jide palangkaraya komputer hardware jaringan bali virgin anti virus