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