![Page 1: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/1.jpg)
KOMPUTER GRAFIKAlgoritma Garis Naïve dan DDA
![Page 2: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/2.jpg)
GarisDinyatakan dengan 4 nilai : x1,y1,x2,y2Koordinat / titik awal (x1,y1)Koordinat / titik akhir (x2,y2)
m = gradien / kemiringan garis
![Page 3: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/3.jpg)
Persamaan garis lurus :Y = mx + cM : gradienC : konstanta
Garis dikelompokkan ke dalam 3 bentuk : cenderung tegak (m>1), miring 45 derajat (m=1) dan cenderung mendatar (0<m<1)
![Page 4: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/4.jpg)
Naïve IdeaMenentukan titik-titik garis penghubung
koordinat awal dan akhirDimulai dari (x, y), untuk menentukan titik
selanjutnya, koordinat x diincrement sebanyak 1 dan koordinat y dihitung sebagai y=m*x+c
Kelemahan : Komputasi tinggi, tidak efisien
for x from x0 to xend Compute y=mx+b Draw_fn(x, round(y))
![Page 5: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/5.jpg)
Naive Ideavoid NaiveLine(int x0,int y0,int xend,int yend,int color) int x;
float y, m, b; m=(yend-y0)/(xend-x0); b = y0 – m*x0; for (x=x0; xxend; x++) drawpixel (x, int(y+0.5), color); y=m*x+b;
Costly floating point computations !!Multiplications, additions, roundings
![Page 6: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/6.jpg)
DDA (Digital Differential Analyzer) AlgorithmIncrement
Jika m<1 (garis cenderung mendatar pada kuadran 1 ,oktan 1) maka x sebagai iterator.
ForDimulai dari x=x0 and y=y0, setiap posisi (x,y)
dihitung dengan melakukan increment x sebanyak 1 dan y sebanyak m -> x sebagai iterator
xmyxmbmxbxxm
bmxy
i
i
i
ii
)(11
myy ii 11x
![Page 7: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/7.jpg)
Example: draw segment, octant 1
x y int(y+0.5) 0 0 01 0+0.4 02 0.4+0.4 13 0.8+0.4 14 1.2+0.4 25 1.6+0.4 2
0 1 2 3 4 5
3
2
1
Li ne: P0( 0, 0) - - P1( 5, 2)
0 (0,0) (5,2)endP P
round
![Page 8: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/8.jpg)
Jika m> 1, garis cenderung tegak pada kuadran 1, oktan 2, maka yang jadi iteratornya adalah y
y di-incremet 1 dan x di-increment 1/mBagaimana mengimplementasikan pada
program?
Draw segment, octant 2
![Page 9: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/9.jpg)
Berikut ini adalah algoritma DDA untuk kuadran 1, oktan 1 dan 2Tentukan 2 buah titik.Tentukan yang menjadi titik awal (X0,Y0) dan titik akhir (X1,Y1).Hitung Dx dan Dy dimana Dx= X1-X0 dan Dy= Y1–Y0Bandingkan Abs(Dx) dan Abs(Dy). Jika Abs(Dx) > Abs(Dy) maka
Steps = Abs(Dx) bila tidak Steps = Abs(Dy)Hitung penambahan koordinat pixel, yaitu: X_increment =
dx/steps, dan Y_increment = dy/steps.Koordinat selanjutnya, yaitu X+X_increment dan Y+Y_incrementPosisi pixel ditentukan dengan pembulatan nilai koordinat
tersebut.Ulangi langkah 6 dan 7 untuk posisi selanjutnya sampai X = X1, Y
= Y1
DDA (Digital Differential Analyzer) Algorithm
![Page 10: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/10.jpg)
•Hasil dari fungsi : bilangan riil•Koordinat pixel : integer•Harus dibulatkan ke dalam integer
terdekat
![Page 11: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/11.jpg)
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.
Contoh
![Page 12: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/12.jpg)
JawabTitik awal = A(10,10)Titik akhir = B(17,16)Dx= X1-X0 = 17 –10 = 7Dy= Y1-Y0 = 16 –10 = 6Absolut(Dx) = 7Absolut(Dy) = 6Absolut (Dx) > absolute (Dy) maka steps =
Absolut(Dx) = 7X_increment= =7/7 = 1Y_increment= = 6/7 = 0,86
![Page 13: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/13.jpg)
X1 = X + X_increment= 10 + 1 =11Y1 = Y + Y_increment= 10 + 0,857 = 10,857
=11
K X Y X_inc Y_in- - - 10 101 11 10,86 11 112 12 11,71 12 123 13 12,57 13 134 14 13,43 14 135 15 14,29 15 146 16 15,14 16 157 17 16 17 16
![Page 14: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/14.jpg)
Diketahui 2 buah titik A(10,10) dan titik B(16,17), bila titik A sebagai titik awal dan titik B sebagai titik akhir maka buatlah garis yang menghubungkan titik tersebut dengan menggunakan algoritma DDA.
Contoh
![Page 15: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/15.jpg)
JawabTitik awal = A(10,10)Titik akhir = B(16,17)Dx= X1-X0 = 16–10 = 6Dy= Y1-Y0 = 17 –10 = 7Absolut(Dx) = 6Absolut(Dy) = 7Absolut (Dy) > absolute (Dx) maka steps =
Absolut(Dy) = 7X_increment= 6/7 = 0,86Y_increment= 7/7 = 1
![Page 16: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/16.jpg)
Y1 = Y + Y_increment= 10 + 1 =11X1 = X + X_increment= 10 + 0,857 = 10,857
=11
K X Y X_inc Y_in- - - 10 101 10,86 11 10 112 11,71 12 11 123 12,57 13 13 134 13,43 14 13 145 14,29 15 14 156 15,14 16 15 167 16 17 16 17
![Page 17: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/17.jpg)
KelemahanHanya dapat digunakan untuk nilai x1<x2
dan y1<y2 (kuadran I)Menggunakan pembagian serta pembulatan
sehingga kurang akurat
![Page 18: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/18.jpg)
Membuat titik #include<GL/glut.h> #include<stdlib.h> #include<math.h>
void setPixel(int px, int py) { glBegin(GL_POINTS); glVertex2i(px, py); glEnd(); }
void display() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,0.0,0.0); glPointSize(4.0); // Draws points (100,100) and (200,200). setPixel(100, 100);
setPixel(200, 200); glFlush(); }
![Page 19: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/19.jpg)
void init(void) { //set display-window background color to white glClearColor(1.0,1.0,1.0,0.0); //set projection paramaters glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,300.0,0.0,300.0); }
main(int argc, char**argv) { //initialize GLUT glutInit(&argc,argv); //initialize display mode glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //set display-window width & height glutInitWindowSize(500,500); //set display-window upper-left position glutInitWindowPosition(0,0); //create display-window with a title glutCreateWindow("Digital Differential Analyzer Algorithm: Programmed by Salha"); //initialze OpenGL init(); //call graphics to be displayed on the window glutDisplayFunc(display); //display everything and wait glutMainLoop(); }
![Page 20: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/20.jpg)
Latihan 1
Modifikasilah program titik di atas sesuai dengan algoritma DDA sehingga program bisa menggambar beberapa titik membentuk garis dari suatu koordinat awal dan akhir. Untuk membulatkan gunakan fungsi berikut
int round (float a) { return int (a+0.5);}
![Page 21: KOMPUTER GRAFIK Algoritma Garis Naïve dan DDA](https://reader036.vdocuments.net/reader036/viewer/2022081416/5681611e550346895dd076bf/html5/thumbnails/21.jpg)
Latihan 2
Modifikasilah program di atas sesuai dengan algoritma Naive sehingga program bisa menggambar beberapa titik membentuk garis dari suatu koordinat awal dan akhir. Untuk membulatkan gunakan fungsi berikut