BAB-3
ATRIBUT PRIMITIF 2D
Yang termasuk dalam atribut primitive adalah titik dan garis.
Pembetuk garis yang dikenal adalah algoritma DDA, dan Bresenham.
Oleh : I Gusti Ngurah Suryantara,S.Kom., M.Kom
3.1. PENDAHULUAN
Yang merupakan atribut primitif adalah: titik dan garis. Ada beberapa metode pembentuk
garis yang umum digunakan yaitu:
Algoritma DDA (Digital Defferential Analyzer)
Algoritma Bressenham
48
Readln(X0);
Readln(Y0);
Readln(X1);
Readln(Y1);
Contoh
Diketahui 2 buah titik A(10,10) dan titik B(17,16), bila titik A sebagai titik awal dan titik B
sebagai titik akhir maka buatlah garis yang menghubungkan titik tersebut dengan
menggunakan algoritma DDA.
Jawab
Titik Awal = A(10,10)
Titik Akhir = B(17,16)
Dx = (X1-X0)
(17-10) = 7
Dy = (Y1-Y0)
(16-10) = 6
Abs(Dx) = Abs(7) = 7
Abs(Dy) = Abs(6) = 6
Abs(Dx) > Abs(Dy) maka Step = Abs(Dx) = 7
Xincrement = Dx / Step
=7/7=1
Yincrement = Dy / Step
= 6 / 7 = 0,86
K
0
1
2
3
4
5
6
X
11
12
13
14
15
16
17
Y
10,86
11,71
12,57
13,43
14,28
15,14
16
Y
16
10
Xinc
10
11
12
13
14
15
16
17
Yinc
10
11
12
13
14
14
15
16
B(17,16)
A(10,10)
10
17
X
Gambar 3.1. Digambar pada sumbu cartesian
y
Gambar 3.2. Coordinat monitor
50
4.1.2.BRESSENHAM
ALGORITMA BRESSENHAM
Tujuan dari algoritma Bressenham ini adalah untuk menghindari pembulatan nilai seperti
pada algoritma DDA.
1. Tentukan dua titik yang akan dihubungkan dalam pembentukan garis.
2. Tentukan salah satu titik di sebelah kiri sebagai titi awal, yaitu (x0,y0) dan titik lainnya
sebgai titik akhir (x1,y1).
3. Hitung dx,dy,2dx dan 2dy-2dx.
4. Hitung parameter P0 = 2dy-dx
5. Untuk setiap Xk sepanjang jalur garis, dimulai dengan k=0,
- bila pk <0, maka titik selanjutnya adalah (xk+1, yk), dan Pk+1 = Pk+2dy
- bila tidak, maka titik selanjutnya adalah (xk+1,yk+1), dan Pk+1 = Pk+2dy-2dx
6. Ulangi langkah no 5 untuk menentukan posisi pixel selanjutnya,
sampai x = x1 dan y = y1.
51
Contoh
Berdasarkan contoh pada algoritma DDA buatlah dengan metode bresenham.
JAWAB
dx = abs(xb xa)
= abs(17 10 ) = 7
dy = abs(yb ya)
= abs(16 10) = 6
p
twody
twodydx
= 2 * dy - dx
=2*67=5
= 2 * dy
= 2 * 6 = 12
= 2 * (dy dx )
= 2 * ( 6 7 ) = -2
Periksa xa dan xb
xa = 10 < xb = 17
Maka
52
= xa
= 10
y
= ya
= 10
Xend = xa
= 17
Ulangi selama x < xend
K0: x = x + 1
= 10 + 1 = 11
Periksa nilai p , dimana p = 5
y =y+1
= 10 + 1 = 11
p = p + twodydx
= 5 + (-2) = 3
K1: x = x + 1
= 11 + 1 = 12
Periksa nilai p, dimana p = 3
y = y +1
= 11 + 1 = 12
p = p + twodydx
= 3 + (-2) = 1
K2: x = x + 1
= 12 + 1 = 13
Periksa nilai p, dimana p = 1
y = y +1
= 12 + 1 = 13
p = p + twodydx
= 1 + (-2) = -1
K3: x = x + 1
= 13 + 1 = 14
Periksa nilai p, dimana p = -1
Nilai y tetap yaitu y=13
p = p + twody
= (-1) + 12 = 11
K4: x = x + 1
= 14 + 1 = 15
Periksa nilai p, dimana p = 11
53
K
0
1
2
3
4
5
6
Pk
3
1
-1
11
9
7
5
(Xk+1 , Yk+1)
10,10
11,11
12,12
13,13
14,13
15,14
16,15
17,16
54
16
10
B(17,16)
A(10,10)
10
17
55
Properti
Nama
Caption
Frame1
Name
Caption
Frame2
Name
Caption
Frame3
Name
Caption
PictureBox1
Name
ScaleMode
Label1
Name
Caption
Label2
Name
Caption
TextBox1
Name
Text
TextBox2
Name
Text
Label3
Name
Caption
Label4
Name
Caption
TextBox3
Name
Text
TextBox4
Name
Text
Label5
Name
Caption
ListBox1
Name
CommandButton1 Name
Capton
CommandButton2 Name
Caption
Setting
FrmDDA
AlgoritmaDDA
Frame1
Bidang Gambar
Frame2
Titik Awal
Frame3
Titik Akhir
PicBidangGambar
Pixel
Label1
X0
Label2
Y0
TxtX0
TxtY0
Label3
X1
Label4
Y1
TxtX1
TxtY1
Label5
X_Inc , Y_Inc
ListData
cmdOk
&Ok
cmdCancel
&Cancel
Buat Modul
Buat sebuah modul dengan nama module1
Option Explicit
Public SzeX As Long, SzeY As Long
Public PSzeX As Long, PSzeY As Long
Public PixSze As Long
Public ShowGrid As Boolean
Public PenWidth As Long
Type POINTAPI
X As Long
Y As Long
End Type
56
57
58
59
60