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

39 1.2K 5
Báo cáo thực hành đồ họa máy tính

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN  BÁO CÁO THỰC HÀNH ĐỒ HỌA MÁY TÍNH SVTH : LÊ LONG BẢO MÃ SV : 102120289 LỚP : 12TLT.CNTT GVHD : NGUYỄN VĂN NGUYÊN Đà Nẵng, 12/2013 Báo Cáo Thực Hành Đồ Họa Máy Tính MỤC LỤC Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT Trang 2 Báo Cáo Thực Hành Đồ Họa Máy Tính NỘI DUNG THỰC HÀNH PHẦN 1 : BÀI TẬP VỀ NHÀ Bài tập 1 : Khái quát hệ thống đồ họa Viết chương trình vẽ đồ thị hàm số y=sin(x) với -π≤x≤π bằng cách: a) Cho x chạy từ -π đến π, ở mỗi bước tính giá trị y rồi làm tròn để vẽ bằng lệnh putpixel(x,y,c). b) Chia miền xác định thành n đoạn bằng nhau, tính giá trị y lại các đầu mút của các đoạn rồi dùng lệnh lineto(x,y) để vẽ. Thay đổi giá trị n để theo dõi kết quả. Bài tập 2 : Các thuật toán cơ bản 1. Viết chương trình nhập toạ độ nguyên của hai điểm đầu mút của đoạn thẳng AB. Dùng thuật toán Bresenham để vẽ đoạn thẳng AB. Cần nhập cho tất cả các trường hợp. 2. Viết chương trình nhập toạ độ của tâm I và bán kính R của đường tròn C(I,R). Dùng thuật toán Michener để vẽ đường tròn C. Bài tập 3 : Hình học Fractal Viết chương trình nhập bậc n của các đường cong Fractal. Vẽ các đường cong bậc n: đường cong Koch, C và Rồng. Bài tập 4 : Phép biến đổi 2 chiều Cài đặt các phép affine hai chiều trong hệ toạ độ thuần nhất: a) Khai báo kiểu afine b) Định nghĩa các hàm cần thiết: biến đổi ảnh của 1 điểm, cài đặt cho các phép tịnh tiến, phép quay, phép biến dạng, phép méo hình, tích hai phép afine. Chương trình vẽ giữa màn hình một đa giác đều và gọi các hàm này để mô phỏng quạt máy quay bằng cách cho đa giác quay quanh tâm của nó Bài tập 5 : Thiết kế đường cong và mặt cong Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT Trang 3 Báo Cáo Thực Hành Đồ Họa Máy Tính Viết chương trình nhập toạ độ của n điều khiển, dùng thuật toán Casteljau để vẽ đường cong qua các điểm điều khiển này. PHẦN 2 : BÀI TẬP TRÊN LỚP Bài 1: Viết chương trình cài đặt thuật toán Bresham. Ứng dụng thuật toán Bresham để vẽ ngôi nhà. Bài 2: Viết chương trình thực hiện - Nhập tọa độ của P1,P2 - Vẽ hình chữ nhật w, vẽ đường thẳng P1P2 - Xén P1P2 vào w - Vẽ lại đường thẳng P1P2 với màu khác Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT Trang 4 Báo Cáo Thực Hành Đồ Họa Máy Tính PHẦN 1. BÀI TẬP VỀ NHÀ Bài tập 1. Khái quát hệ thống đồ họa Thuật toán : Thiết lập các cấu hình đơn giản Vẽ hệ trục tọa độ chia màn hình thành 4 phần bằng nhau. Vẽ đồ thị : - Lặp i từ -100 đến 100 (-π đến π). - Tính x = getmaxx()/2 + int(PI*i*ltx/100) . - Tính y = getmaxx()/2 – int(sin(i*PI/100)*tly). - Đối với câu a : dùng hàm putpixel(x,y,YELLOW) để nối các điểm lại với nhau. - Đối với câu b : dùng hàm lineto(x,y) để kẻ đoạn thẳng đến (x,y). Chương trình nguồn : a. Vẽ bằng lệnh putpixel(x,y,c) : #include<graphics.h> #include<stdio.h> #include<conio.h> #include<windows.h> #include<math.h> main(){ int gd = 0, gm=0,c; float x,y; initgraph(&gd,&gm,""); setcolor(BLUE); line(300,50,300,350); line(100,200,500,200); for(int x=-180;x<180;x++){ y=20*sin(x*0.017); putpixel(x/1.5+300,y+200,5?); } Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT Trang 5 Báo Cáo Thực Hành Đồ Họa Máy Tính getch(); } b. Chia miền xác định thành n đoạn bằng nhau, tính giá trị y lại các đầu mút của các đoạn rồi dùng lệnh lineto(x,y) để vẽ : #include<graphics.h> #include<stdio.h> #include<conio.h> #include<windows.h> #include<math.h> main(){ int gd = 0, gm=0,c; float x,y; initgraph(&gd,&gm,""); setcolor(BLUE); line(300,50,300,350); line(100,200,500,200); moveto(-180/1.5+300,200); for(int x=-180;x<=180;){ y=20*sin(x*0.017); lineto(x/1.5+300,y+200); x=x+2; setcolor(RED); } getch(); } Kết quả Demo Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT Trang 6 Báo Cáo Thực Hành Đồ Họa Máy Tính Câu a Câu b Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT Trang 7 Báo Cáo Thực Hành Đồ Họa Máy Tính Bài tập 2. Các thuật toán cơ bản Thuật toán : Câu 1 : Nhập các thông số cần thiết và tính ∆x, ∆y, m. Xét các trường hợp : - Nếu m>1 và m<-1 có điểm chung là thay ∆x, ∆y cho nhau. - Nếu m<0 thì ∆y = -∆y. Tính e(Ti), e(Si), e1. Xét : - Nếu m>1 hoặc m<-1 lặp điều kiện yA!=yB (y tăng chậm hơn). o Putpixel(x,y,c). o Nếu e<0 (ban đầu là e1) thì e+= e(Ti). o Ngược lại e+=e(Si) và tăng x lên 1 đơn vị - Nếu m>1 thì tăng y lên 1 và ngược lại giảm y 1 đơn vị. o Lặp điều kiện xA!=xB (x tăng chậm hơn y). o Putpixel(x,y,c). o Nếu e<0 e+=e(Ti). o Ngược lại e+=e(Si). o m>0 tăng y. o m<0 giảm y. o Tăng x lên 1 đơn vị. Câu 2 : Nhập các số cần thiết và tính d. Lặp nếu x<=y. setviewport(xo,yo,xo+R,yo+R,0). Putpixel 8 điểm đối xứng nhau qua tâm O Nếu d<0 d+=4*x+6. Ngược lại d+=4*(x-y)+10 và giảm y 1 đơn vị. Tăng x lên 1 đơn vị. Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT Trang 8 Báo Cáo Thực Hành Đồ Họa Máy Tính Chương trình nguồn : Câu 1 : #include<conio.h> #include<stdio.h> #include<graphics.h> #include<math.h> #include<dos.h> void bresline(int xa,int ya,int xb,int yb) {int x,y,e,ekt,et,dx,dy,c; float kt,dy1,dx1; if(xa>xb) { int t=xa; int t1=ya; xa=xb; ya=yb; xb=t; yb=t1; } dx=xb-xa;dy=yb-ya; dx1=float(dx); dy1=float(dy); kt=dy1/dx1; if(kt>0&&kt<1){ ekt=dy+dy;e=ekt-dx;et=e-dx; c=getcolor();y=ya; for(x=xa;x<=xb;x++){ putpixel(x,y,c); if(e<0) e=ekt+e; Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT Trang 9 Báo Cáo Thực Hành Đồ Họa Máy Tính else { y++;e=e+et; } } } else if(kt>-1&&kt<0){ e=-2*dy-dx; ekt=-2*dy; et=-2*dy-2*dx; c=getcolor();y=ya; for(x=xa;x<xb;x++){ putpixel(x,y,YELLOW); if(e<0) e=e-2*dy; else {y ;e=e-2*dy-2*dx;} } } else if(kt>1){ e=2*dx-dy; ekt=2*dx; et=2*dx-2*dy; c=getcolor();y=ya; for(x=xa;y<yb;y++) { putpixel(x,y,c); if(e<0) e=e+2*dx; else{x++;e=e+2*dx-2*dy;} } } else if(kt<-1){ e=2*dx+dy; ekt=2*dx; et=2*dx+2*dy;} else if(kt==1){ Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT Trang 10 [...]... if(c==15)c=0; } getch(); } Kết quả Demo Câu 1: Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT Trang 13 Báo Cáo Thực Hành Đồ Họa Máy Tính Câu 2: Bài tập 3 Hình học Fractal Mã nguồn: Câu 1 : #include #include #include struct{ float l,t,r,b; Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT Trang 14 Báo Cáo Thực Hành Đồ Họa Máy Tính }w; struct point{ float x,y; }; struct code{... fill(x-1,y,bc); fill(x+1,y,bc); Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT Trang 17 Báo Cáo Thực Hành Đồ Họa Máy Tính fill(x,y-1,bc); fill(x,y+1,bc);} } main() { int d=0,m=0; initgraph(&d,&m,""); setcolor(BLUE); circle(200,200,150); fill(200,200,BLUE); getch(); } Kết quả Demo Câu 1 Câu 2: Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT Trang 18 Báo Cáo Thực Hành Đồ Họa Máy Tính Bài tập 4 Phép biến đổi... p4=quay(&p1,&p3,135); Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT.CNTT Trang 24 Báo Cáo Thực Hành Đồ Họa Máy Tính do{ for(int j=0;j . BẢO MÃ SV : 102120289 LỚP : 12TLT. CNTT GVHD : NGUYỄN VĂN NGUYÊN Đà Nẵng, 12/2013 Báo Cáo Thực Hành Đồ Họa Máy Tính MỤC LỤC Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT. CNTT Trang 2 Báo Cáo Thực. Demo Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT. CNTT Trang 6 Báo Cáo Thực Hành Đồ Họa Máy Tính Câu a Câu b Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT. CNTT Trang 7 Báo Cáo Thực Hành Đồ Họa Máy. Xén P1P2 vào w - Vẽ lại đường thẳng P1P2 với màu khác Sinh viên thực hiện: Lê Long Bảo, Lớp: 12TLT. CNTT Trang 4 Báo Cáo Thực Hành Đồ Họa Máy Tính PHẦN 1. BÀI TẬP VỀ NHÀ Bài tập 1. Khái quát hệ

Ngày đăng: 21/10/2014, 10:39

Từ khóa liên quan

Mục lục

  • NỘI DUNG THỰC HÀNH

  • PHẦN 1. BÀI TẬP VỀ NHÀ

    • Bài tập 1. Khái quát hệ thống đồ họa

    • Bài tập 2. Các thuật toán cơ bản

    • Bài tập 3. Hình học Fractal

    • Bài tập 4. Phép biến đổi 2 chiều

    • Bài tập 5. Thiết kế đường cong và mặt cong

    • PHẦN 2. BÀI TẬP TRÊN LỚP

Tài liệu cùng người dùng

Tài liệu liên quan