Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 21 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
21
Dung lượng
310,12 KB
Nội dung
BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN -o0o - BÁO CÁO LỚN BÀI TẬP ĐỒ HỌA MÁY TÍNH Đề tài 28: Cài đặt thuật toán vẽ các Parabol Sinh viên thực hiện: -Trần Văn Huấn -Chu Thanh Quy LỜI NÓI ĐẦU Đồ họa máy tính lĩnh vực lí thú phát triển nhanh tin học Ngay từ xuất hiện, đồ họa máy tính có sức lơi mãnh liệt, hút nhiều người sử dụng nhiều lĩnh vực khác : khoa học, nghệ thuật, kinh doanh, thương mại, công nghiệp, quản Bài tập lớn mơn đồ họa máy tính lí, giáo dục, giải trí, … Số lượng chương trình đồ họa ứng dụng thật khổng lồ phát triển liên tục Cùng với phát triển tin học, kỹ thuật đồ họa máy vi tính, ngày trở nên tinh xảo Giao diện phần mềm ngày trở nên thân thiện, đẹp mắt nhờ thể đồ họa Sự hổ trợ tin học cho ngành khác trở nên đắc lực nhờ khả đồ họa vi tính Và giới thực biểu diễn cách sinh động, linh hoạt, đầy màu sắc không gian ba chiều Trong thành công kỹ thuật đồ họa ngày khơng thể khơng nói đến phát triển vượt bậc tốc độ phần cứng lẫn hệ điều hành Nhưng thân kỹ thuật đồ họa có bước tiến nhảy vọt từ phép tính tốn học phức tạp đến thư viện đồ họa tạo sẳn Các thư viện cho phép giảm nhẹ thời gian cơng sức người lập trình Mục tiêu tập lớn tìm hiểu thuật tốn,cách vẽ Parabol ngơn ngữ C++ Chúng em xin gửi lời cảm ơn chân thành tới cô giáo: “Nguyễn Thị Cẩm Ngoan” tận tâm bảo và giúp đỡ chúng em hoàn thành đề tài này Trong quá trình làm đề tài sẽ khơng tránh khỏi sai sót, khuyết điểm Vì vậy, nhóm thực hiện chúng em hy vọng nhận sự đánh giá và đóng góp nhiệt tình từ phía thầy và các bạn để bài nhóm chúng em hoàn thiện Chúng em xin chân thành cảm ơn! I Nội dung yêu cầu của đề tài Cài đặt thuật toán vẽ Parabol y= x2/A y2=Ax với A số nguyên bất ky YÊU CẦU Mỗi thành viên phải hiểu làm chủ tồn đề tài nhóm Bài tập lớn mơn đồ họa máy tính Ngơn ngữ lập trình: C++ hoặc NET (Visual C++, Visual C#) Phân tích đánh giá lý thuyết 1) Đồ thị Parabol dạng y= x /A II Đồ thị Parabol dạng y= x2/A dạng đặc biệt đồ thị hàm số bậc 2: y=ax2+bx+c x biến số a,b,c số với a#0 Tập xác định D=R Khi b=c=0 đồ trở thành Parabol có dạng y=ax Đồ thị hàm số y = ax2 có đỉnh điểm O(0;0), điểm thấp đồ thị trường hợp a > (y ≥ với x), điểm cao đồ thị trường hợp a < (y ≤ với x) Nhờ phép biến đổi ta được: Bài tập lớn môn đồ họa máy tính Ta có Như vậy, đồ thị hàm số y = ax2 + bx + c có điểm I ( ,) đóng vai trò điểm O(0,0) đồ thị hàm số y=ax2 Ta thấy đồ thị hàm số y = ax2 + bx + c đồ thị hàm số y = ax2 sau số phép "dịch chuyển" mặt phẳng tọa độ Đồ thị hàm số y=ax2+bx+c (a#0) đường Parabol có đỉnh I ( ,) Có trục đối xứng x dưới a < = Parabol quay bề lõm lên a > xuống Bài tập lớn môn đồ họa máy tính Đối với Đồ thị Parabol y= x2/A đồ thị hàm số hàm bậc y=ax2+bx+c với a=1/A b=c=0 2) Đồ thị Parabol dạng y2= Ax y2= Ax dạng phương trình tắc Có đồ thị Bài tập lớn mơn đồ họa máy tính 3) Tḥt toán sử dụng CƠNG THỨC CHUYỂN ĐỔI QUAN SÁT Void cuaso(float x1,float y1,float x2,float y2 { xw1=x1;yw1= y1; xw2= x2,yw2= y2; } Void khungnhin(float x1,float y1,float x2,float y2) { xv1= x1; yv1=y1; xv2= x2; yv2=y2; tlx=(xv2-xv1)/(xw2-xw1);tly=(yv2-yv1)/(yw2-yw1); } BỘ CÔNG CỤ 2D * void chuyenden(float x, float y): Con trỏ chuyển tương ứng đến điểm (xm, ym) hình * *Cài Đặt: void veden(float x, float y): Vẽ đến điểm (xm, ym) tương ứng hình void chuyenDen(float x, float y){ int xm = (int) (tlx*(x - xw1)+xv1); int ym = (int) (tly*(yw2 - y)+yv1); moveto(xm,ym); } void veDen(float x, float y){ int xm = (int) (tlx*(x - xw1)+xv1); int ym = (int) (tly*(yw2 - y)+yv1); lineto(xm,ym); Bài tập lớn môn đồ họa máy tính } 4) Code chương trình #include #include #include #include #include #include #include #define pi 3.14 #include #include #include #include using namespace std; float xw1,yw1,xw2,yw2; int xv1,yv1,xv2,yv2; float tlx,tly; void veOXY(); void cuaSo(float x1, float y1, float x2, float y2){ xw1 = x1; yw1 = y1; xw2 = x2; yw2 = y2; } void khungNhin(int x1, int y1, int x2, int y2){ xv1 = x1; yv1 = y1; xv2 = x2; yv2 = y2; tlx = (xv2 - xv1)/(xw2 - xw1), tly = (yv2 - yv1)/(yw2 - yw1); } void chuyenDen(float x, float y){ int xm = (int) (tlx*(x - xw1)+xv1); int ym = (int) (tly*(yw2 - y)+yv1); moveto(xm,ym); } void veDen(float x, float y){ int xm = (int) (tlx*(x - xw1)+xv1); int ym = (int) (tly*(yw2 - y)+yv1); lineto(xm,ym); } void chu(float x, float y,char *s){ int xm = (int) (tlx*(x - xw1)+xv1); int ym = (int) (tly*(yw2 - y)+yv1); outtextxy(xm,ym,s); Bài tập lớn mơn đồ họa máy tính } int ktra(char *s){ for(int i=0; i'9'||s[i]