Upload
eldipa-fajar-barus
View
37
Download
7
Embed Size (px)
Citation preview
DDADDADDADDA Halaman Halaman Halaman Halaman 1111
PEMROGRAMAN GRAFIK
1. Perintah Dasar Grafik
Initgraph()
Fungsi yang digunakan untuk membuka sistem grafik.
Bentuk : void far initgraph(int far *kendaligraf int far *modegraf, int far *path);
Keterangan:
*kendaligraf adalah pointer yang menunjuk ke data bertipe int. Nilai yang
ditunjuk:
Konstanta simbolis Nilai Kontanta simbolis Nilai
DETECT 0 IBM8514 6
CGA 1 HERCMONO 7
MCGA 2 ATT400 8
EGA 3 VGA 9
EGA64 4 PC3270 10
EGAMONO 5
*modegraf berisi konstanta simbolis atau nilai dari mode grafik yang digunakan.
Dengan memberikan DETECT kepada kendali grafik, maka initgraph() akan
melakukan pemilihan terhadap pengendali grafik dan menentukan mode grafik
dengan resolusi tertinggi pada kendali grafik yang diaktifkan.
*path menyatakan nama direktori temapat file *.bgi (pengendali grafik) berada.
Seandainya, file *.bgi berada pada direktori kini (current direktory), string yang
ditunjuk path cukup diisi dengan string kosong ().
closegraph()
Fungsi yang digunakan untuk menutup sistem grafik dan mengembalikan ke
mode layar yang aktif sebelum pemanggilan initgraph().
Bentuk : void far closegraph(void);
Dengan adanya pemanggilan fungsi ini, memori yang digunakan untuk
menyimpan data pengendali grafik yang dimuat sewaktu initgraph() akan
dibebaskan kembali.
putpixel()
Fungsi yang digunakan untuk menggambar pixel pada koordinat screen (x,y).
Bentuk : void far putpixel(int x, int y, int wrn);
Warna piksel dapat diatur melalui parameter wrn. No Nama Warna No Nama Warna
0 black 8 darkGray
1 blue 9 lightBlue
2 green 10 lightGreen
3 cyan 11 lightCyan
4 red 12 lightRed
5 magenta 13 lightMagenta
6 brown 14 yellow
7 lightGray 15 white
Contoh program: /* nama file : titik1.c */ #include main() { int gd=DETECT,gm; initgraph(&gd,&gm,""); putpixel(200,100,2); while( !kbhit() ); closegraph(); }
Output dari program di atas adalah sebuah titik yang ditampilkan pada koordinat
x=200 dan y=100 dengan warna=2 (hijau).
DDADDADDADDA Halaman Halaman Halaman Halaman 2222
getpixel()
Fungsi yang digunakan untuk memperoleh kode warna dari suatu piksel yang
berada pada koordinat (x,y).
Bentuk : unsigned far getpixel(int x,int y);
Contoh program: /* nama file : titik2.c */ #include #include #define JUMLAH 500 typedef struct koordinat { int x; int y; } POSISI_BINTANG; POSISI_BINTANG larik[JUMLAH]; void posisi_awal_bintang(void); void bintang_berkedip(void); main() { int gd=DETECT,gm; initgraph(&gd,&gm,""); posisi_awal_bintang(); while(!kbhit()) bintang_berkedip(); closegraph(); } void posisi_awal_bintang(void) { int i; srand(100); /* nilai awal bagi pembangkit bil acak */ for(i=0; i
DDADDADDADDA Halaman Halaman Halaman Halaman 3333
Menggambar Garis Menggunakan UDF (User Define Function)
Garis Horizontal
Garis horizontal adalah garis yang membentang secara paralel dengan sumbu x
dengan asumsi titik p1 pada koordinat x1 lebih kecil dari pada x2 pada p2,
sedangkan y1 dan y2 konstan.
Algoritma:
Tentukan titik awal p1 dan titik akhir p2
Periksa posisi sumbu (koordinat):
Jika titik awal < titik akhir maka lakukan inkrementasi sumbu x dari titik awal
sampai titik akhir. Kalau tidak maka lakukan dekrementasi sumbu x dari titik
awal sampai titik akhir.
Tampilkan garis menggunakan nilai parameter koordinat yang telah dihitung.
Contoh program: /* Nama File : garis_h.c */ #include void garis_h(int x1, int y, int x2); main() { int gd=0, gm; initgraph(&gd, &gm, ""); setcolor(1); setbkcolor(15); garis_h(100,50,180); garis_h(100,70,20); while(!kbhit()); closegraph(); } void garis_h(int x1, int y, int x2) { int i; if(x1
DDADDADDADDA Halaman Halaman Halaman Halaman 4444
Garis Bebas
Umumnya persamaan garis lurus pada koordinat kartesius diwujudkan dalam
persamaan: y=m.x+b
Jika dimisalkan pada dua titik (x0,y0 dan x1,y1) akan dibuat sebuah garis lurus,
kita dapat menentukan nilai m dan b dengan persamaan berikut:
01
01
xx
yym
= b = y1 m.x1
algoritma untuk menggambarkan garis pada komputer didasarkan pada dua
persamaan di atas. Dimana m adalah gradien atau kemiringan garis tersebut.
Algoritma Digital Differential Analyzer (DDA)
Prinsip algoritma ini adalah mengambil nilai integer terdekat dengan jalus
garis berdasarkan atas sebuah titik yang telah ditentukan sebelumnya (titik
awal garis).
Algoritma pembentukan garis DDA:
- Tentukan dua titik yang akan dihubungkan dalam pembentukan garis
- Tentukan salah satu titik sebagai awal (x0,y0) dan titik akhir (x1,y1)
- Hitung dx=x1-x0, dan dy=y1-y0
- Tentukan langkah, yaitu dengan cara jarak maksimum jumlah penambahan
nilai x maupun nilai y, dengan cara:
Bila nilai absolut dari dx lebih besar dari absolut dy, maka
langkah=absolut dari dx, tetapi bila tidak maka langkah=absolut dari dy
- Hitung penambahan koordinat pixel yaitu x_increment=dx/langkah, dan
y_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=x1 dan y=y1
Contoh Garis dengan algoritma DDA: /* Nama File : garis_dda.c */ #include void garis_dda(int xstart, int ystart, int xend, int yend); main() { int gd=0, gm; initgraph(&gd, &gm, ""); setbkcolor(15); garis_dda(100,100,200,100); garis_dda(200,100,200,200); garis_dda(200,200,100,200); garis_dda(100,200,100,100); garis_dda(100,100,200,200); garis_dda(200,100,100,200); while(!kbhit()); closegraph(); } void garis_dda(int xstart, int ystart, int xend, int yend) { int step, k, dx, dy, x_inc, y_inc, x, y; dx=xend-xstart; dy=yend-ystart; x=xstart; y=ystart; if(abs(dx)>abs(dy)) step=abs(dx); else step=abs(dy); x_inc=dx/step; y_inc=dy/step; putpixel(x,y,2); for(k=1; k
DDADDADDADDA Halaman Halaman Halaman Halaman 5555
Lanjutan perintah dasar grafik:
moveto()
Fungsi yang digunakan untuk memindahkan petunjuk gambar ke posisi (x,y).
Bentuk : void far moveto(int x, int y);
moverel()
Fungsi yang digunakan untuk memindahkan petunjuk gambar secara relatif
terhadap posisi semula. Seandainya posisi semula adalah (xo, yo), maka penunjuk
gambar akan berada pada posisi (xo+dx, yo+dy).
Bentuk : void far moverel(int dx, int dy);
lineto()
Fungsi yang digunakan untuk menggambar garis dari posisi penunjuk gambar
sedang berada ke posisi (x, y).
Bentuk : void far lineto(int x, int y);
linerel()
Fungsi yang digunakan untuk menggambar garis secara relatif dari titik terakhir
kali ke titik yang dituju (hasil penambahan titik terakhir dengan titik (dx, dy).
Bentuk : void far linerel(int dx, int dy);
Contoh program: /* Nama File : garis1.c */ #include main() { int gd=0, gm; initgraph(&gd, &gm, ""); moveto(70, 80); lineto(130, 80); lineto(100,20); linerel(-30,60); while(!kbhit()); closegraph(); }
line()
Fungsi yang digunakan untuk menggambar garis dari posisi (x1, y1) sampai
dengan posisi (x2, y2).
Bentuk : void far line(int x1, int y1, int x2, int y2);
Contoh Program: /* Nama File : garis2.c */ #include main() { int gd=0, gm, i; initgraph(&gd, &gm, ""); for(i=0; i
DDADDADDADDA Halaman Halaman Halaman Halaman 6666
Contoh Program: /* Nama File : garis1.c */ #include main() { int gd=0, gm; int i, bentuk_grs, ketebalan; int pola_buatan=0xAAAA; initgraph(&gd, &gm, ""); setcolor(1); setbkcolor(15); for(i=0; i
DDADDADDADDA Halaman Halaman Halaman Halaman 7777
line()
Fungsi yang digunakan untuk memebuat gambar kontak.
Bentuk : void far rectangle(int x1, int y1, int x2, int y2);
(x1,y1) menyatakan pojok kiri atas kotak.
(x2,y2) menyatakan pojok kanan bawah kotak.
Contoh Program: /* Nama File : kotak1.c */ #include main() { int gd=DETECT,gm,i; initgraph(&gd,&gm,""); setcolor(1); setbkcolor(15); rectangle(50,100,100,150); rectangle(110,50,160,150); rectangle(170,100,220,150); while(!kbhit()); closegraph(); }
drawpoly()
Fungsi yang digunakan untuk memebuat gambar poligon.
Bentuk : void far drawpoly(int jumtitik, int far *himptitik);
Keterangan:
- Jumtitik menyatakan jumlah titik dari poligon. Namun yang perlu diketahui,
untuk membentuk poligon yang tertutup, jumlah titik harus diisi dengan
jumlah titik poligon plus satu.
- *himptitik diisi dengan sederetan sepasang bilangan bulat (tipe int) yang
masing-masing menyatakan pada posisi koordinat titik poligon. Untuk
membentuk poligon tertutup, data koordinat terakhir haruslah sama dengan
data koordinat pertama.
Contoh program: /* Nama File : kotak1.c */ #include #define JUMTITIK 11 struct titik{ int x; int y;}; main() { int gd=DETECT,gm,i; static struct titik posisi[JUMTITIK]= { 105, 85, 155, 85, 155, 100, 160, 100, 160, 65, 180, 65, 195, 85, 210, 85, 210, 110, 105, 110, 105, 85 }; initgraph(&gd,&gm,""); setcolor(2); setbkcolor(15); drawpoly(JUMTITIK, (int far *) posisi); while(!kbhit()); closegraph(); }
arc()
Fungsi yang digunakan untuk memebuat busur lingkaran.
Bentuk : void far arc(int x, int y, int sdtawal, int sdtakhir, int radius);
Keterangan:
- (x, y) merupakan koordinat pusat dari busur lingkaran.
DDADDADDADDA Halaman Halaman Halaman Halaman 8888
- Sdtawal dan Sdtakhir merupakan sudut awal dan akhir dari busur (dalam
satuan derajat yang berlawanan dengan arah jarum jam 0-360o). Posisi angka
3 pada jam menyatakan sudut 0o
- Radius merupakan jari-jari dari busur.
ellipse()
Fungsi yang digunakan untuk memebuat busur elips.
Bentuk : void far ellipse(int x, int y, int sdtawal, int sdtakhir, int radx, int rady);
Circle()
Fungsi yang digunakan untuk memebuat lingkaran.
Bentuk : void far ellipse(int x, int y, int radius);
Contoh Program: /* Nama file : BusurLE.c */ #include main() { int gd=0,gm; struct arccoordstype databusur; initgraph(&gd,&gm,""); setcolor(2); setbkcolor(15); line(100,100,100,120); arc(100,100,0,180,50); getarccoords(&databusur); line(databusur.xstart,databusur.ystart,
databusur.xend,databusur.yend); arc(100,200,0,180,50); ellipse(100,300,0,180,70,35); arc(300,200,0,360,50); ellipse(300,300,0,360,70,35); circle(300,100,30); getch(); closegraph(); }