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 sanggup digunakan 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 bulat dengan mengasumsikan hanya sebagian bulat dengan sudut sebesar 45° , hal ini dilakukan untuk mempermudah penjelasan, sedangkan untuk kondisi yanglain sanggup diderivasi dengan cara yang serupa. Untuk mendapat kinerja algoritma midpoint, dilakukan uji kecepatan komputasi dengan cara mengimplementasikan kedalam bahasa pemrograman C, dan melaksanakan perbandingan waktu komputasi dengan algoritma yang memakai dasar komputasi bilangan riel, maupun algoritma lain yang telah banyak dikenal menyerupai algoritma dda dan algoritma bressenham.
Penggambaran grafik garis lurus dan kurva memerlukan waktu komputasi yang tinggi, untuk mereduksi waktu komputasi yang tinggi tersebut sanggup 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 memakai operasi bilangan real. Implementasi ke dalam bahasa pemrograman C dari kedua macam algoritma diatas, mengatakan 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 memakai 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 memakai 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"
Posting Komentar