intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Đồ họa máy tính - Bài 1: Các thuật toán vẽ đường

Chia sẻ: Pham Thien Luat | Ngày: | Loại File: PDF | Số trang:8

336
lượt xem
108
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài 1 : Mục tiêu: Bài thực hành cho biêt cách dùng hàm InitGraph khởi tạo chế độ đồ họa. hàm closegraph ngưng làm việc trên chế độ đồ họa. hàm putpixel(x,y,color) vẽ một điểm tại vị trí x, y, z với màu color hàm getpixel(x,y) trả về giá trị màu sắc tại vị trí x, y

Chủ đề:
Lưu

Nội dung Text: Đồ họa máy tính - Bài 1: Các thuật toán vẽ đường

  1. TH- ð H A MÁY TÍNH 1 GVHD: Huynh Duc Nghia CÁC THU T TOÁN V ðƯ NG Bài 1 : M c tiêu : Bài th c hành cho bi t cách dùng hàm InitGraph kh i t o ch ñ ñ h a hàm closegraph ngưng làm vi c trên ch d ñ h a hàm putpixel(x,y,color) v m t ñi m nh t i v trí x, y v i màu color hàm getpixel(x,y) tr v giá tr màu s c t i v trí x, y Xây d ng hàm kh i t o ch ñ ñ h a #include void InitGraph() { int gd=DETECT,gm; //Khai báo 2 bi n gd và gm ki u s nguyên initgraph(&gd,&gm,"C:\\NGHIA\\THUCHANH\\DOHOA\\TC\\BGI"); // Goi hàm kh i t o ñ ha } C u trúc m t chương trình ñ h a thông thư ng void main () { Inputdata(); // Nh p d li u cho chương trình – T a ñ c a m t ñi m, bán kính InitGraph(); // Khoi tao che do do hoa Draw(); // Các thao tác ñ h a closegraph(); // Ng ng ch ñ làm vi c c a ñ h a } * Chương trình v b u tr i sao nh p nháy minh h a các hàm v a nêu trên #include #include #include viod DrawSky() { int x,y,color; randomize(); //khoi tao random (stdlib.h) while(!kbhit()) // int kbhit() = 0 Neu bo dem ban phim rong (conio.h) { x = random(640); y = random(480); color = random(16); if(getpixel(x,y) != color) //Lay gia ti mau tai vi tri x,y so sanh voi mau se ve putpixel(x,y,color); // Ve mau khac neu khong phai la mau da ve else putpixel(x,y,1); //Ve lai gia tri mau nen BLACK } } void main() { InitGraph(); DrawSky(); closegraph()
  2. TH- ð H A MÁY TÍNH 2 GVHD: Huynh Duc Nghia } Bài 2: Vi t hàm main() v hình ch nh t và hình tròn G i ý : Dùng hàm line() ho c rectangle() và circle() do chương trình C cung c p. ðư ng th ng, hình vuông, hình tròn ñư c v như th nào? Bài 3: Cài ñ t gi i thu t v ñư ng th ng b ng thu t toán thô, v ñư ng th ng có các t a ñ x1 = 150, y1 = 150, x2 = 250, y2 = 200 và màu tùy ý. G i ý: t o hàm DT(x1,y1,x2,y2,Color) - V ñi m ñ u tiên (x1,y1) - Tính h s góc m và h s b - ði m ti p theo cho ñ n ñi m (x2,y2) , dùng: for (int x=x1; x
  3. TH- ð H A MÁY TÍNH 3 GVHD: Huynh Duc Nghia #define Round(a) int(a+0.5) //ð nh nghĩa hàm làm tròn s a nguyên void LineDDA (int x1, int y1, int x2, int y2, int Color) { int x = x1; float y = y1; float m = float(y2-y1)/(x2-x1); putpixel(x, Round(y), Color); for(int i=x1; i1, v ñư ng th ng, có các t a ñ x1 = 100, y1 = 100, x2 = 200, y2 = 300 và màu tùy ý (ð i x ng TH v i 0
  4. TH- ð H A MÁY TÍNH 4 GVHD: Huynh Duc Nghia N u 01 => g i hàm LineBres2(); N u -1
  5. TH- ð H A MÁY TÍNH 5 GVHD: Huynh Duc Nghia p = 3 – 2*R; while (x < y) { x++; if (p < 0) p += 4*x + 6; else { y--; p += 4*(x -y) + 10; } Put8Pixel(x, y,WHITE); } } // CircleBres Yêu c u: - Dùng gi i thu t trên v ñư ng tròn. - V ñư ng tròn tâm xc,yc b t kỳ. T cài ñ t chương trình: v ellipse, parabol, và m t s ñư ng cong khác,… CÁC THU T TOÁN TÔ MÀU Tô màu d a theo ñư ng biên Bài 1 : Cài ñ t gi i thu t tô màu v i lân c n 4. Cài ñ t gi i thu t: void FloodFill4(int x, int y, int bc, int nc) //bc: back color, nc: new color { int color= getpixel(x,y); if ((color != bc) && (color != nc)) { putpixel(x,y,nc); delay(30); FloodFill4(x-1,y,bc,nc); FloodFill4(x+1,y,bc,nc); FloodFill4(x,y-1,bc,nc); FloodFill4(x,y+1,bc,nc); } } Chương tình minh h a #include #include #include #include #include #define Round(a) int(a+0.5) int Color = WHITE; void FloodFill4(int x, int y, int bc, int nc) { int color= getpixel(x,y); if ((color != bc) && (color != nc)) {
  6. TH- ð H A MÁY TÍNH 6 GVHD: Huynh Duc Nghia putpixel(x,y,nc); //delay(30); FloodFill4(x-1,y,bc,nc); FloodFill4(x+1,y,bc,nc); FloodFill4(x,y-1,bc,nc); FloodFill4(x,y+1,bc,nc); } } void RecTangle(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) { line(x1,y1,x2,y2); line(x4,y4,x3,y3); line(x1,y1,x4,y4); line(x2,y2,x3,y3); } void InitGraph() { int gd=DETECT,gm; initgraph(&gd,&gm,"C:\\TC\\BGI"); } void main() { InitGraph(); RecTangle(100,100,100,120,150,120,150,100); FloodFill4(125,110,Color,RED); getch(); closegraph(); }// End programing Bài 2 : Cài ñ t gi i thu t tô màu v i lân c n chéo. Cài ñ t gi i thu t void FloodFillD(int x, int y, int bc, int nc) { int color= getpixel(x,y); if ((color != bc) && (color != nc)) { putpixel(x,y,nc); delay(30); FloodFillD(x+1,y+1,bc,nc); FloodFillD(x+1,y-1,bc,nc); FloodFillD(x-1,y-1,bc,nc); FloodFillD(x-1,y+1,bc,nc); } } Bài 3 : Cài ñ t gi i thu t tô màu v i lân c n 8. Cài ñ t gi i thu t void FloodFill8(int x, int y, int bc, int nc) { int color= getpixel(x,y); if ((color != bc) && (color != nc)) { putpixel(x,y,nc);
  7. TH- ð H A MÁY TÍNH 7 GVHD: Huynh Duc Nghia delay(30); FloodFill4(x,y,bc,nc); // lan can 4 FloodFillD(x,y,bc,nc); // va lan can cheo } } Yêu c u: V và tô ñư ng tròn, tam giác, ½, ¼ ñư ng tròn v i các màu khac nhau. T làm: v và tô ellipse, prarabol, và m t s ñư ng cong khác Tô màu d a theo dòng quét Bài 1: Tô màu hình ch nh t Cài ñ t gi i thu t void ScanLineFillR(int l, int r, int t, int b, int color) { for (int y= t; y
  8. TH- ð H A MÁY TÍNH 8 GVHD: Huynh Duc Nghia Bài 3: Tô màu tam giac t ng quát Hư ng d n: Bư c 1: S p x p l i th t các ñi m, sao cho: y1>y2>y3 Bư c 2: N u y2 = y3: g i hàm tô màu tam giác ñáy ph ng N u y1= y2: g i hàm tô màu tam giác ñ nh ph ng Ngư c l i (y1#y2#y3): g i c 2 hàm ñáy ph ng và ñ nh ph ng. T làm: Tô màu ña giác l i, t giác
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2