Coding Algoritma Garis Bressenhem Grafika Komputer
Penyusun :
Zakaria Annas (123090182)
Plug : 2
Asisten dosen :
Desy Kumalasari
JURUSAN TEKNIK INFORMATIKA
FAKULTAS TEKNOLOGI INDUSTRI
UNIVERSITAS PEMBANGUNAN NASIONAL “VETERAN” YOGYAKARTA
2012
DASAR TEORI
Algoritma midpoint merupakan algoritma pembuatan garis dan kurva dengan dasar operasi bilangan integer yang menonjolkan ciri kecepatan. Sehingga algoritma ini dapat dipakai sebagai algoritma pembuatan grafik yang menuntut kecepatan sebagai hal yang diutamakan. Pembahasan algoritma Midpoint dilakukan dengan mengasumsikan garis lurus dari kiri ke kanan,dan gadient antara 0 dan 1, sedangkan untuk lingkaran dengan mengasumsikan hanya sebagian lingkaran dengan sudut sebesar 45° , hal ini dilakukan untuk mempermudah penjelasan, sedangkan untuk kondisi yanglain dapat diderivasi dengan cara yang serupa. Untuk mendapatkan kinerja algoritma midpoint, dilakukan uji kecepatan komputasi dengan cara mengimplementasikan kedalam bahasa pemrograman C, dan melakukan perbandingan waktu komputasi dengan algoritma yang menggunakan dasar komputasi bilangan riel, maupun algoritma lain yang telah banyak dikenal seperti algoritma dda dan algoritma bressenham.
Penggambaran grafik garis lurus dan kurva memerlukan waktu komputasi yang tinggi, untuk mereduksi waktu komputasi yang tinggi tersebut dapat dilakukan dengan peningkatan kemampuan komputasi prosesor dan peningkatan efisiensi algoritma. Algoritma Midpoint merupakan Algoritma dengan dasar operasi bilangan integer, sehingga memerlukan waktu operasi yang lebih sedikit dibandingkan dengan algoritma yang menggunakan operasi bilangan real. Implementasi ke dalam bahasa pemrograman C dari kedua macam algoritma diatas, menunjukkan bahwa waktu komputasi algoritma midpoint lebih cepat sebesar 8 kali pada pembuatan garis lurus, dan lebih cepat sebesar 15 kali pada penggambaran lingkaran, dibandingkan dengan waktu komputasi algoritma yang menggunakan dasar operasi bilangan real. Dan waktu komputasi algoritma midpoint lebih cepat sebesar 6 kali pada pembuatan garis lurus, dibandingkan dengan waktu komputasi algoritma yang Breserham telah menggunakan dasar operasi bilangan integer juga.
PEMBAHASAN
Algoritma Garis Bressenhem
unit modul3; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, Grids, Menus, ExtCtrls, ActnList, Buttons, MaskEdit, CheckLst; type { TForm1 } TForm1 = class(TForm) Bressenhem: TButton; Exit: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; StringGrid1: TStringGrid; X1: TLabel; X2: TLabel; Y1: TLabel; Y2: TLabel; procedure BressenhemClick(Sender: TObject); procedure ExitClick(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation { TForm1 } procedure TForm1.BressenhemClick(Sender: TObject); var p,dx,dy,xend,f,x,y,xa,xb,ya,yb,i:integer; begin xa:=StrToInt(Edit1.Text); xb:=StrToInt(Edit2.Text); ya:=StrToInt(Edit3.Text); yb:=StrToInt(Edit4.Text); dx:=abs(xa-xb); dy:=abs(ya-yb); 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; i:=i+1; StringGrid1.RowCount:=StringGrid1.RowCount+1; StringGrid1.Cells[0,StringGrid1.RowCount-1]:=IntToStr(i); StringGrid1.Cells[1,StringGrid1.RowCount-1]:=FloatToStr(x); StringGrid1.Cells[2,StringGrid1.RowCount-1]:=FloatToStr(y); StringGrid1.Cells[3,StringGrid1.RowCount-1]:=FloatToStr(round(x)); StringGrid1.Cells[4,StringGrid1.RowCount-1]:=FloatToStr(round(y)); canvas.Pixels[trunc(x),trunc(y)]:=clblack; for f:=x to 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; i:=i+1; StringGrid1.RowCount:=StringGrid1.RowCount+1; StringGrid1.Cells[0,StringGrid1.RowCount-1]:=IntToStr(i); StringGrid1.Cells[1,StringGrid1.RowCount-1]:=FloatToStr(x); StringGrid1.Cells[2,StringGrid1.RowCount-1]:=FloatToStr(y); canvas.Pixels[trunc(x),trunc(y)]:=clblack; end; end; procedure TForm1.ExitClick(Sender: TObject); begin close(); end; initialization {$I modul3.lrs} end. |
Output :
Garis Algoritma C++
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls; type { TForm1 } TForm1 = class(TForm) Baru: TButton; Image1: TImage; Tutup: TButton; RadioGroup1: TRadioGroup; procedure BaruClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure Image1Click(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure RadioGroup1Click(Sender: TObject); procedure TutupClick(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; Tergambar: boolean; x1,x2,y1,y2: integer; implementation { TForm1 } procedure TForm1.TutupClick(Sender: TObject); begin close(); end; procedure TForm1.FormActivate(Sender: TObject); begin Image1.Canvas.Rectangle(0,0, Image1.Width, Image1.Height); end; procedure TForm1.Image1Click(Sender: TObject); begin end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Tergambar:=true; X1:=X; Y1:=Y; end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin BaruClick(Sender); Tergambar:=false; X2:=X; Y2:=Y; if RadioGroup1.ItemIndex=0 then begin Image1.Canvas.MoveTo(x1,y1); Image1.Canvas.LineTo(x2,y2); end; end; procedure TForm1.RadioGroup1Click(Sender: TObject); begin end; procedure TForm1.BaruClick(Sender: TObject); begin Tergambar:=false; Image1.Canvas.Rectangle(0,0, Image1.Width, Image1.Height); end; initialization {$I unit1.lrs} end. |
Output :
0 Response to "Coding Algoritma Garis Bressenhem Grafika Komputer"
Post a Comment