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

Báo cáo thực hành Đồ họa máy tính

Chia sẻ: Trịnh Hoàng Long | Ngày: | Loại File: DOC | Số trang:19

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

Báo cáo thực hành Đồ họa máy tính bao gồm các bài thực hành với các yêu cầu hướng dẫn cụ thể cho từng bài thực hành. Tham khảo báo cáo thực hành để nắm nội dung bài báo cáo một cách cụ thể.

Chủ đề:
Lưu

Nội dung Text: Báo cáo thực hành Đồ họa máy tính

  1. TRƯỜNG ĐẠI HỌC BK ĐÀ NẴNG KHOA CÔNG NGHỆ THÔNG TIN ---------- BÁO CÁO THỰC HÀNH ĐỒ HỌA MÁY TÍNH Giáo viên : Nguyễn Văn Nguyên Sinh viên : Trịnh Hoàng Long Lớp : 11T2 Nhóm : 11B MSSV : 102110212 Đà Nẵng, 10/04/2014
  2. I. Buổi thực hành 1: 1. Cài đặt và sử dụng thư viện graphics.h: 1.1. Download 2 file sau đây về máy: + File graphics.h để ở thư mục C:\Dev-Cpp\include + File libbgi.a để ở thư mục C:\Dev-Cpp\lib 1.2. Khởi động Dev C++, vào File-->New-->Project...-->Empty Project (Nhớ chọn C++ Project) -->OK Đặt 1 cái tên cho phù hợp và lưu vào đâu đó. Nhấn chuột phải lên cái project vừa tạo. -->New File hoặc chọn mục New File trong menu Project Một file mới được tạo ra trong Project. Trước khi viết code lưu lại bằng cách Nhấn Ctrl + S hoặc File -->Save. Nhấn Alt + P hoặc mục Project Options trong menu Project--->Chọn thẻ Parameters --> Gõ chính xác những dòng sau vào khung Linker: -lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32 2. Dùng hàm line() để vẽ 1 ngôi nhà đơn giản: Code: #include #include #include using namespace std; void init(){ int gd = DETECT,gm; initgraph(&gd,&gm,""); } void ve(){ line(200,100,400,100); line(100,200,500,200); line(200,100,100,200); line(400,100,500,200); line(100,200,100,400); line(100,400,500,400); line(500,400,500,200); line(300,400,300,280); line(250,280,350,280); line(250,280,250,400);
  3. line(350,280,350,400); line(150,280,200,280); line(200,280,200,330); line(200,330,150,330); line(150,330,150,280); line(400,280,450,280); line(450,280,450,330); line(450,330,400,330); line(400,330,400,280); } int main(){ init(); ve(); system("PAUSE"); return EXIT_SUCCESS; } Demo:
  4. II. Buổi thực hành 2: 1.Vẽ các đường tròn đồng tâm và tô màu chúng: Sử dụng thuật toán Michener. Code: #include #include #include #include using namespace std; void Mcircle(int R,int x0,int y0){ int x,y,p,c; p = 1 - R; c=getcolor(); x= 0;y=R; while(x
  5. Mcircle(R,250,200); totron(250,200,R,c); c++;} system("PAUSE"); return EXIT_SUCCESS; } Demo: III. Buổi thực hành 3: 1.Thuật toán xén hình: Code: #include #include #include //Kieu cua so va bien w toan cuc struct wind { float l,t,r,b; }w; // Kieu diem struct ptype
  6. { float x,y; }; // Kieu ma struct code { int l,t,r,b; }; // Ham ma hoa diem p sang ma c struct code Encode(struct ptype p) { struct code c; c.l=p.x < w.l; c.t=p.y < w.t; c.r=p.x > w.r; c.b=p.y > w.b; return c; }; //Ham kiem tra p co thuoc w hay ko int InW(struct ptype p) { struct code c; c= Encode(p); return !(c.l||c.t||c.r||c.b); } // Thuat toan int clip(ptype &p1, ptype &p2) { ptype tmpp; code c1,c2,tmpc; int in1,in2; float m; while(1) { c1= Encode(p1); c2= Encode(p2); in1=InW(p1); in2=InW(p2); if(in1 && in2){return 1;} if((c1.l && c2.l)||(c1.t && c2.t)||(c1.r && c2.r)||(c1.b && c2.b)) return 0; if(in1) { tmpp =p1; p1=p2; p2=tmpp; tmpc=c1; c1=c2; c2=tmpc; }
  7. if(p1.x == p2.x)//doan thang dung { if(c1.t) p1.y = w.t; else p1.y = w.b; } else { m=(p2.y - p1.y)/(p2.x - p1.x); if(c1.l) { p1.y += m*(w.l - p1.x); p1.x =w.l; } else if(c1.t) { p1.x +=(w.t - p1.y)/m; p1.y = w.t; } else if(c1.r) { p1.y -=m*(w.r -p1.x); p1.x = w.r; } else { p1.x -=(p1.y-w.b)/m; p1.y = w.b; } } } } main() { int gd=0,gm; struct ptype p1,p2; initgraph(&gd,&gm,""); w.l=100; w.t=150; w.r=300; w.b=350; rectangle(int (w.l), int (w.t), int (w.r), int (w.b)); p1.x=90; p1.y=100; p2.x=300; p2.y=400; line(int (p1.x), int (p1.y), int (p2.x), int (p2.y));
  8. clip(p1,p2); setcolor(RED); line(int (p1.x), int (p1.y), int (p2.x), int (p2.y)); getch(); closegraph(); } Demo: 2.Thư viện Affine.h: Thầy cho về tự tìm hiểu ở phái dưới-Phần “Bài tập trên trang chủ” Bài tập trên trang chủ: I. Khái quát hệ thống đồ họa: 1. Viết chương trình vẽ đồ thị hàm số y=sin(x) với -π≤ x≤π
  9. a. Vẽ bằng lệnh putpixel(x,y,c): #include #include #include #include int main(){ float x,y; initwindow( 800 , 600 , "09T4.no1" ); moveto(100,100); for (x=-3.14;x
  10. b. Vẽ bằng lệnh lineto(x,y): #include #include #include #include #include int main(){ float x,y,n=0.01; initwindow( 800 , 600 , "09T4.no1" ); moveto(3,100); for (x=-3.14;x
  11. 2. Các thuật toán cơ bản: a. Thuật toán Bresenham: #include #include #include void veduongthang(int x1,int y1,int x2,int y2,int mau) { int x,y,dx,dy,e,et,ekt,c=mau;float m; dx=x2-x1; dy=y2-y1; if (dx==0) { outtextxy(0,0,"Truong hop dx==0"); for(x=x1,y=(y1
  12. { x--; e+=et; } } } else if((m>-1)&&(m
  13. { putpixel(x,y,c); if(e
  14. initwindow(800,600,"WinBGIm"); int x,y,R,mau; printf("Nhap vao toa do cua x "); scanf("%d",&x); printf("Nhap vao toa do cua y "); scanf("%d",&y); printf("Nhap vao ban kinh "); scanf("%d",&R); int gd=DETECT,gm=0; initgraph(&gd,&gm,"C:\\TC\\BGI"); mau=6; setcolor(mau); veduongtron(x,y,R,mau); delay(3000); mau=4; setcolor(mau); circle(x,y,R); getch(); closegraph(); } void veduongtron(int x,int y,int R,int mau) {int a,b,d; putpixel(x,y,15); d=3-2*R; for(a=0,b=R;a
  15. if(n>0) { K(n-1,l/3,d); d+=60; K(n-1,l/3,d); d-=120; d+=60; K(n-1,l/3,d); } else linerel(int(l*cos(d*RADS)),int(l*sin(d*RADS))); } b. Đường cong C: #define FACT 0.7071 void C(int n,float l,float d){ if (n>0){ d+=45; C(n-1,l*FACT,d); d-=90; C(n-1,l*FACT,d); d+=45; } else linerel(int(l*cos(d*RADS)),int(l*sin(d*RADS))); } c. Đường cong Rồng: #define FACT 0.7071 void Dragon(int n,float l,int d,int S){ if(n>0){ d+=45*S; Dragon(n-1,l*FACT,d,1); d-=90*S; Dragon(n-1,l*FACT,d,-1); } else {setcolor(rand() %5+13);linerel(int(l*cos(d*RADS)),int(l*sin(d*RADS))); } } Demo:
  16. 4. Phép biến đổi 2 chiều a. Thư viện Affine: #include typedef float Point[2]; typedef float Affine[3][3]; void Change(Point A,Affine &B){ B[0][0]=A[0]; B[0][1]=A[1]; B[0][2]=1; } void Cover(Affine &A,Affine B){ A[0][0]=B[0][0]; A[0][1]=B[0][1]; } void MatMul(Affine A,Affine B,Affine &C,int m,int n){ int i,j,k; for(i=0;i
  17. T[2][0]=0; T[2][1]=0; T[2][2]=1; } void Tich(Affine A,Affine B,Affine &C){ Affine Tr1,Tr; Tr1[0][0]=A[2][0]; Tr1[0][1]=A[2][1]; Tr1[0][2]=1; MatMul(A,B,C,2,2); MatMul(Tr1,B,Tr,1,2); C[2][0]=Tr[0][0]+B[2][0];C[2][1]=Tr[0][1]+B[2][1]; } void QuayTamO(Affine &T,float fi,float x,float y){ Affine T1,T2,Q,tam; tam[0][2]=0; Tinhtien(T1,-x,-y); Tinhtien(T2,x,y); Quay(Q,fi); Tich(T1,Q,tam); Tich(tam,T2,T); } b. Vẽ quạt bằng Affine: #include #include #include #include #include "affine.h" #define RAD 0.01745329 int x,y,goc=0; int tm1,tm2,tm3,tm4,c[6]; Affine A1,B1,C1,D1; void Vemayquat(int x,int y,int mau1,int mau2) { //Ve may quat setcolor(mau1); rectangle(x,y,x+140,y-20); setfillstyle(9,1); floodfill(x+1,y-1,mau1); rectangle(x+50,y-20,x+90,y-80); setfillstyle(1,3); floodfill(x+52,y-21,mau1); rectangle(x+65,y-80,x+75,y-180); setfillstyle(4,7); floodfill(x+66,y-81,mau1); rectangle(x+68,y-26,x+72,y-32); setfillstyle(1,15);
  18. floodfill(x+69,y-27,mau1); rectangle(x+68,y-39,x+72,y-44); setfillstyle(1,1); floodfill(x+69,y-40,mau1); rectangle(x+68,y-51,x+72,y-57); setfillstyle(1,14); floodfill(x+69,y-52,mau1); rectangle(x+68,y-64,x+72,y-70); setfillstyle(1,4); floodfill(x+69,y-65,mau1); //Khung tron quat circle(x+70,y-260,80); circle(x+70,y-260,79); } void Vecanhquat(int x,int y,int mau1,int mau2) { //Code ve canh quat dang test setcolor(mau1); c[0]=x+70; c[1]=y-260; B1[0][0]=x+70; B1[0][1]=y-190; B1[0][2]=1; //Canh quat thu nhat QuayTamO(A1,goc*RAD,c[0],c[1]); MatMul(B1,A1,C1,1,3); line(c[0],c[1],C1[0][0],C1[0][1]); QuayTamO(A1,(goc+30)*RAD,c[0],c[1]); MatMul(B1,A1,D1,1,3); line(c[0],c[1],D1[0][0],D1[0][1]); line(C1[0][0],C1[0][1],D1[0][0],D1[0][1]); c[2]=C1[0][0]; c[3]=C1[0][1]; c[4]=D1[0][0]; c[5]=D1[0][1]; setfillstyle(6,mau2); fillpoly(3,c); //Canh quat thu hai QuayTamO(A1,(goc+120)*RAD,c[0],c[1]); MatMul(B1,A1,C1,1,3); line(c[0],c[1],C1[0][0],C1[0][1]); QuayTamO(A1,(goc+150)*RAD,c[0],c[1]); MatMul(B1,A1,D1,1,3); line(c[0],c[1],D1[0][0],D1[0][1]); line(C1[0][0],C1[0][1],D1[0][0],D1[0][1]); c[2]=C1[0][0]; c[3]=C1[0][1]; c[4]=D1[0][0]; c[5]=D1[0][1]; setfillstyle(6,mau2);
  19. fillpoly(3,c); //Canh quat thu ba QuayTamO(A1,(goc+240)*RAD,c[0],c[1]); MatMul(B1,A1,C1,1,3); line(c[0],c[1],C1[0][0],C1[0][1]); QuayTamO(A1,(goc+270)*RAD,c[0],c[1]); MatMul(B1,A1,D1,1,3); line(c[0],c[1],D1[0][0],D1[0][1]); line(C1[0][0],C1[0][1],D1[0][0],D1[0][1]); c[2]=C1[0][0]; c[3]=C1[0][1]; c[4]=D1[0][0]; c[5]=D1[0][1]; setfillstyle(6,mau2); fillpoly(3,c); } int main() { initwindow(980,480,"OTO"); outtextxy(10,360,"THUC HANH DO HOA VE MAY QUAT"); line(0,350,getmaxx(),350); x=getmaxx()/2-50; y=getmaxy()/2+110; Vemayquat(x,y,GREEN,14); while(!kbhit()){ Vecanhquat(x,y,GREEN,14); delay(50); Vecanhquat(x,y,BLACK,BLACK); goc+=20; } getch(); closegraph(); return 0; } Demo:
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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