Você está na página 1de 19

Line Drawing Algorithms

Make it work Make it fast

Quest for Ideal Line

Garis di atas adalah ideal line yang kita inginkan Batasan yang ada: layar monitor terdiri dari sekumpulan pixel Yang bisa kita lakukan adalah membuat perkiraan bentuk garis ideal

Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003

Syarat Perkiraan Garis

Syarat yang harus dipenuhi adalah: Tampilan garis harus kontinyu, tidak putus-putus Ketebalan harus sama Harus sedekat mungkin dengan garis ideal Harus cepat
Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003 2

Ingatlah Persamaan Garis


(x2, y2)

Y = mX + c
X dan Y : koordinat m : gradient c : konstanta

(x1, y1)

Gradient dihitung dari m = (y2-y1) / (x2-x1) Dari persamaan di atas, coba kita buat program sederhana untuk menggambar garis

Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003

Simple Line (DDA Algorithm)


procedure DD_Line(row1,col1,row2,col2,color : integer) var dx, dy, y, m : real; x : integer; begin dx := col2 - col1; DDA = Digital dy := row2 - row1; Differential m := dy / dx; Analyzer y := row1; for x := col1 to col2 do begin SetPixel(x, Round(y), color); y := y + m; end end;
Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003 4

Sempurnakan lagi

Buatlah pengecekan bila gradient > 1 Buatlah pengecekan bila x1>x2 atau y1>x2

JADI TUGAS YA!

Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003

Kelemahan DDA
Ingat dulu rule optimisasi berikut ini:
penjumlahan & pengurangan lebih cepat dari perkalian perkalian lebih cepat dari pembagian menggunakan tabel lebih cepat dari menghitung fungsi perhitungan integer lebih cepat dari float hindari if-then sebisa mungkin

Terlihat bahwa DDA perlu optimisasi besar2an

Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003

Algoritma Bresenham
Algoritma yang jauh lebih cepat dibuat oleh Bresenham (1965) Algoritma ini cuma menggunakan integer Banyak yang percaya bahwa tidak ada cara menggambar garis yang lebih cepat lagi selain algoritma ini

Jack Bresenham

Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003

Algoritma Bresenham (pascal)


procedure Bresenham(xa,xb:col;ya,yb:row;col_val:color) var x : col; y : row; dx, dy, e_inc, {change in error when y increments} e_noinc, {change in error when no increment in y} e : integer; {curent error term} begin y := ya; dx := xb - xa; dy := yb - ya; e_noinc := dy+dy; {initialize error terms} e := e_noinc - dx; e_inc := e - dx; for x:= xa to xb do {the main loop} begin SetPixel(x,y,col_val); if e<0 then e:=e+e_noinc else begin y := y + 1; e := e + e_inc end; end; end;
Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003 8

Algoritma Bresenham (C)


Bresenham( { int y = W = H = int F = POINT a.y, b.x b.y 2 * H a, POINT b ) a.x, a.y; W;

for ( int x = a.x; x <= b.x; x++ ) { setPixel( x,y ); if ( F<0 ) { F += 2*H; } else { y++; F += 2*(H-W); } } }
Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003

Tentu aja masih perlu ditambahin dg pengecekan gradient dsb

Conto
Gambarlah garis dengan algoritma Bresenham dari (4,1) ke (16,4).
W = 12 dan H = 3
x: 4 y: 1 F: -6 5 1 0 6 2 -18 7 2 -12 8 2 -6 9 2 0 10 3 -18 ... ... ...

Lihat lanjutannya di papan tulis ...

Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003

10

Circle Drawing Algorithm


Tadi itu soal garis. Lalu bagaimana cara menggambar lingkaran?

Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003

11

Persamaan Lingkaran
(xc, yc) r

(x-xc)2+(y-yc)2=r2 Persamaan ini susah diimplementasikan di program

x= xc + r * cos y= yc + r * sin Persamaan ini lebih mudah Tapi ada cara yang lebih cepat!
Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003 12

Bagi Lingkaran Jadi 8

Lalu setiap segmen digambar dengan Micheners Circle Algorithm (Mid-Point Algorithm)

Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003

13

Micheners Circle Algorithm


procedure MichCirc(xc:col;yc:row;Rad:integer;value:color) var x : col; y : row; d : integer; begin x := 0; y := Rad; d := 3 - 2 * Rad; while x<=y do begin SetPixel(xc+x,yc+y,value); {draw 8 points} if d<0 then d:=d+4*x+6 {update error term} else begin d := d + 4 * (x-y) + 10; y := y + 1 end x:=x+1 end end; End;
Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003 14

Aliasing vs Anti-Aliasing

Fakta bahwa mata manusia lebih toleran terhadap pola yang buram daripada pola yang jelas Anti-aliasing dilakukan untuk menghilangkan jagginess
Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003 15

Metode Anti-Aliasing (1)

Mempertebal garis. Ukuran pixel berdasar gradient.

Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003

16

Metode Anti-Aliasing (2)

Menggunakan intensitas yang berbeda-beda dalam menggambar garis


Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003 17

Setelah Itu Apa?

Beberapa algoritma dikembangkan setelah Bresenham. Misalkan: two-pass algorithm (Xiaolin Wu). Pelajarilah sendiri! Coba kembangkan algoritma untuk menggambar bentuk-bentuk lain

Grafika Komputer Sekolah Tinggi Teknik Surabaya, 2003

18

Você também pode gostar