Anda di halaman 1dari 10

LAPORAN

GRAFIKA KOMPUTER

DI SUSUN OLEH

NAMA KELOMPOK : NIM :


ADRIAN IMANUEL UDA DBC 116 095
AYU AMASETIA DBC 117 074
DIO SINGGAN J.B DBC 117 066
YEREMIA BINSAR T DBC 117 061
FEBRI ANGGRIAWAN DBC 117 036
ROSA THERESIA DBC 117 090
MOHAMMAD FAIZ M DBC 117 027
SANDRI DBC 117 050
SENDY ARISKA PUTRA DBC 117 088

JURUSAN TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS PALANGKA RAYA
2019
BAB I
PENDAHULUAN

Algoritma merupakan suatu bidang ilmu yang sangat penting untuk dipahami oleh
seorang programer, dalam algoritma pembentukan suatu garis dikenal dengan 2 metode yaitu
algoritma pembentukan garis Digital Differential Analyzer (DDA) dan juga Brasanham.
Garis merupakan kumpulan dari titik-titik, untuk membentuk garis lurus adalah dengan
mengetahui titik awal dan titik akhir maka kita dapat membentuk garis.

Gambar : Digital Differential Analyzer


Perkembangan kemampuan komputasi prosesor yang pesat telah membuat komputer
desktop mempunyai kemampuan komputasi yang besar. Hal ini mendorong perkembangan
program aplikasi yang memerlukan komputasi yang besar seperti program aplikasi yang
menggunakan grafik 3 dimensi. Peningkatan kemampuan komputasi prosesor untuk aplikasi
grafik yang sarat efisiensi algoritma, sehingga pembuatan grafik garis dan kurva yang
merupakan dasar pembuatan grafik dapat memberikan hasil yang optimal.
Flood fill adalah sebuah algoritma yang digunakan untuk menentukan area yang
terhubung pada suatu titik pada array berdimensi dua atau lebih. Flood Fill juga
kadangdisebut sebagai seed fillatau boundaryfill (jika diaplikasikan untuk mengisi suatu area
terbatas pada gambar seperti yang dilakukan kakas paint bucket).

Gambar 1.1 Flood Fill


Walaupun aplikasi algoritma flood fillkebanyakan terdapat pada grafika komputer, flood fill
juga digunakan pada beberapa permainan mulai dari permainan abad ke-20 seperti
Minesweepersampai permainan tradisional China yang bernama Go. Pada permainan
Gopemain akan bertujuan mengelilingi bidak lawan menggunakan bidak miliknya. Bidak
yang dikelilingi akan “dimakan”.
BAB II
PEMBAHASAN

A. Algoritma Digital Differential Analyzer


Dalam membentuk suatu algoritma pembentukan garis secara umum ada dua metode antara
lain :

1. Algoritma pembentukan garis DDA


Algoritma Digital Differential Analyzer (DDA) adalah algoritma
pembentukangaris berdasarkan perhitungan dx maupun dy dengan menggunakan
rumus dy = m.dx.Garis dibuat dengan menentukan dua endpoint yaitu titik awal dan
titik akhir. Setiapkoordinat titik yang membentuk garis diperoleh dari perhitungan
kemudian dikonversikanmenjadi nilai integer.[5]
a. langkah-langkah
 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
xmaupun 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
 Hitung penambahan koordinat pixel yaitu x_increment=dx/langkah,
dany_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=x1dan y=y1.

Algoritma DDA merupakan salah satu algoritma menggambar cukup sederhana


Bentuk garis:
Cenderung mendatar

Gradien bernilai 0 < m < 1


Pixel bertambah 1 pada sumbu x dan bertambah
Cenderung tegak

Gradien bernilai m > 1


Pixel bertambah 1 pada sumbu y dan bertambah
sebesar 1/m pixel pada sumbu x

Miring 𝟒𝟓°

Gradien bernilai m = 1
Pixel bertambah 1 pada sumbu x dan bertambah
sebesar 1 pixel pada sumbu y[6]

2. Keuntungan dan Kerugian Algoritma DDA


Keuntungan dari algoritma Digital Differential Analyzer (DDA) adalah tidak perlu
menghitung koordinat berdasarkan persamaan yang lengkap (menggunakan metode off set)
Kerugiannya dari algoritma Digital Differential Analyzer (DDA) adalah adanya akumulasi
Round-off errors, sehingga garis akan melenceng dari garis lurus, selain itu operasi round-
off juga menghabiskan waktu.
3. Contoh penerapan Algoritma DDA dalam program ( Digital Differential Analyzer )
Yaitu sebuah algoritma sederhana untuk menggambar garis, garis di kelompokkan ke dalam 3
bentuk: mendatar, cenderung tegak dan miring 45 derajat.
Nilai untuk gradien : m>1, m=1, 0<m<1.[7]
Contoh Algoritma DDA
Int dx = x2-x1;
Int dy = y2-y1;
Int steps,k,x1,y1,x2,y2;
Float x_inc, y_inc;
Float x = x1;
Float y = y1;
If (abs(dx)>abs(dy)) steps = abs(dx) else steps = abs(dy);
X_inc = dx/(float)steps;
Y_inc = dy/(float)steps;

setPixel(Round(x),Round(y)); [7]
Contoh hasil dari implementasi program yang menggunakan algoritma DDA dengan bahasa
pemrograman java

Hasil dari implementasi program di atas seperti berikut :


B. ALGORITMA FLOOD FILL
Flood fill adalah algoritma yang digunakan untuk memeriksa keterhubungan suatu
area dengan salah satu titik di larik berdimensi dua atau lebih. Implementasi dari flood
fill dapat memanfaatkan kedua algoritma traversal graf yang telah dijelaskan di atas.
Flood fill pada larik berdimensi dua berdasarkan banyak arah penyebarannya dibagi dua,
yakni Four-way flood fill dan eightway flood fill. Four-way flood fill hanya
memungkinkan penyebaran ke arah atas, bawah, kiri, dan kanan. Sedangkan
eight-way flood fill memungkinkan penyebaran ke empat diagonalnya. Flood fill
yang diimplementasikan dengan DFS, jika disimulasikan akan terlihat seperti manusia
yang sedang mewarnai suatu gambar dengan pensil warna. Sedangkan jika
diimplementasikan dengan BFS, akan terlihat seperti cat dituangkan ke dalam suatu
wadah. Walaupun demikian, hasil yang didapat tidak memliki perbedaan.

Gambar : Ilustrasi flood fill dimensi dua dengan BFS (kiri) dan DFS (kanan)

Gambar : flood fill

Metode ini dimulai pada titik (x,y) dan mendefinisikan seluruh pixel pada bidang tersebut
dengan warna yang sama. Bila bidang yang akan diisi warna mempunyai beberapa warna,
pertama-tama yang dilakukan adalah membuat nilai pixel yang baru, sehingga semua pixel
mempunyai warna yang sama.. titik awal warna dituang dinamakan dengan titik bakar.
Algoritme flood fill mengambil tiga parameter: simpul mulai, warna target, dan warna
pengganti. Algoritma mencari semua node dalam array yang terhubung ke node mulai dengan
jalur warna target dan mengubahnya ke warna pengganti. Ada banyak cara di mana algoritma
pengisian banjir dapat terstruktur, tetapi mereka semua menggunakan struktur
data antrian atau tumpukan , secara eksplisit atau implisit.
Bergantung pada apakah kita menganggap node menyentuh di sudut yang terhubung atau
tidak, kami memiliki dua variasi: masing-masing delapan arah dan empat arah.
Implementasi rekursif berbasis tumpukan (empat arah)
Salah satu implementasi implementasi flood fill ( rekursif ) secara implisit berbasis stack
(untuk array dua dimensi) adalah sebagai berikut:

Flood-fill (node, target-color, replacement-color):


1. If target-color is equal to replacement-color, return.
2. ElseIf the color of node is not equal to target-color, return.
3. Else Set the color of node to replacement-color.
4. Perform Flood-fill (one step to the south of node, target-color, replacement-color).
Perform Flood-fill (one step to the north of node, target-color, replacement-color).
Perform Flood-fill (one step to the west of node, target-color, replacement-color).
Perform Flood-fill (one step to the east of node, target-color, replacement-color).
5. Return.

algoritma rekursif memang memiliki ekspresi yang sederhana namun seringkali


implementasinya terganggu dengan pesan stack overflow yang diakibatkan ukuran stack di
heap untuk procedure call yang terbatas. Hal ini dapat diatasi dengan mengubah algoritma di
atas menjadi iteratif dan mensimulasikan stack sebagai struktur data eksternal. Apakah kedua
hal tersebut sudah cukup? tentu belum, jika mekanisme mencari tetangganya sama persis
dengan algoritma rekursif di atas maka justru algoritma versi iteratif lebih buruk
performanya. Kita perlu mengoptimasi pencarian tetangga sehingga ukuran untuk stack dapat
dikurangi.
Untuk mengurangi pengisian stack tersebut kita dapat mengubah ide dari algoritma di atas
dengan cara memusatkan perhatian pada tetangga yang berada di satu sumbu. Misalkan kita
perhatikan di sumbu vertikal (sumbu Y), maka kita akan mendapatkan sebuah rentang
minimum-maksimum yang memiliki predikat sama. Rentang ini kemudian ditelusuri. Selama
menelusuri rentang tersebut, barulah kita memperhatikan tetangga di sumbu lainnya (sumbu
X). Karena kita secara konstan menelusuri rentang vertikal maka kita cukup memperhatikan
perubahan di tetangga. Kita hanya perlu menyimpan ke stack, tetangga yang baru kita
temukan pertama. Tetangga yang letaknya di bawah tetangga tersebut jika memiliki predikat
yang sama tidak perlu disimpan karena pasti dikunjungi ketika titik tersebut diproses pertama
kali secara vertikal. Algoritma tersebut diekspresikan dalam kode berikut:

{menggunakan predikat warna sama dengan warna titik bakar}


false;
procedure floodfill(p:point3d, i:image; newcolor:color);
var end;
oldcolor : color; if (pt.x < i.right_bound) then begin
stpt : stack;// stack of point3d;
if not span_right and
pt : point3d;
y1, y2, yy : integer; (i.pixel[pt.x+1][yy][pt.z]=oldcolor) then begin
span_left, span_right, span_front, span_rear: boolean; span_right := true;
begin stpt.push(pt.x+1, yy, pt.z);
oldcolor := i.pixel[p.x][p.y];
stpt.push(p.x,p.y,p.z); end else if span_right and not
while not stpt.is_empty() do begin (i.pixel[pt.x+1][yy][pt.z]=oldcolor) then span_right := false;
pt := stpt.pop(); end;
y1 := pt.y;
if (pt.z > i.front_bound) then begin
while (y1 > i.top_bound) and (i.pixel[pt.x][y1-
1][pt.z]=oldcolor) do dec(y1); if not span_front and (i.pixel[pt.x][yy][pt.z-
y2 := pt.y; 1]=oldcolor) then begin
while (y2 < i.bottom_bound) and
span_front := true;
(i.pixel[pt.x][y1+1][pt.z]=oldcolor) do inc(y2);
span_left := false; stpt.push(pt.x, yy, pt.z-1);
span_right := false; end else if span_front and not (i.pixel[pt.x][yy][pt.z-
span_front := false;
1]=oldcolor) then span_front := false;
span_rear := false;
for yy := y1 to y2 do begin end;
if (pt.x > i.left_bound) then begin if (pt.z < i.rear_bound) then begin
if not span_left and (i.pixel[pt.x- if not span_rear and
1][yy][pt.z]=oldcolor) then begin
(i.pixel[pt.x][yy][pt.z+1]=oldcolor) then begin
span_left := true;
stpt.push(pt.x-1, yy, pt.z); span_rear := true;
end else if span_left and not (i.pixel[pt.x- stpt.push(pt.x, yy, pt.z+1);
1][yy][pt.z]=oldcolor) then span_left :=
end else if span_rear and not
(i.pixel[pt.x][yy][pt.z+1]=oldcolor) then span_rear := false;
end;
i.pixel[pt.x][yy][pt.z] := newcolor;
end;
end;
end;

BAB III
PENUTUP

Berdasarkan hasil penelitian dann pembahasan yang telah diuraikan sebelumnya maka dapat
diambil kesimpul sebagai berikut :
1. Setelah adanya pembelajaran ini kami lebih memahami materi algoritma pembentukan garis
dan penyelesaian perhitungan algoritma pembentukan garis pada mata kuliah grafika
komputer.
2. Untuk percobaan dengan data sangat kecil (dalam kasus ini n <= 10), tidak dapat dijadikan
pembanding karena waktu yang diperlukan dari kedua algoritma sangat kecil (sepersekian
nano detik).

DAFTAR PUSTAKA

https://dantiaisyah09.wordpress.com/2014/12/30/pengertian-dan-sejarah-algoritma/
https://www.scribd.com/document/114586703/Algoritma-Pembentukan-Garis

http://ayauliani.blogspot.co.id/2013/03/garis-dalam-desain.html

https://en.wikipedia.org/wiki/File:Wfm_floodfill_animation_qu que.gif dan

https://en.wikipedia.org/wiki/File:Wfm_floodfill_animation_st ack.gif

Anda mungkin juga menyukai