Trường Đại Học Công Nghiệp Hà NộiKhoa Công Nghệ Thông TinBÀI TẬP LỚN Môn: Đồ họa máy tính Đề tài: Vẽ Đồng Hồ Hoạt Động Giáo viên hướng dẫn: Nguyễn Thị Cẩm Ngoan Sinh viên thực hiện: 1..
Trang 1Trường Đại Học Công Nghiệp Hà NộiKhoa Công Nghệ Thông Tin
BÀI TẬP LỚN
Môn: Đồ họa máy tính
Đề tài: Vẽ Đồng Hồ Hoạt Động Giáo viên hướng dẫn: Nguyễn Thị Cẩm Ngoan
Sinh viên thực hiện:
1 Đinh Xuân Phong
2 Phạm Văn Trường
3 Đặng Quang Dũng
Trang 2Lời nói đầu
Đồ họa máy tính là một lĩnh vực của khoa học máy tính nghiên cứu về cơ sở toán học, các thuật toán cũng như các kĩ thuật cho phép tạo, hiển thị và điều khiển hình ảnh trên màn hình máy tính Đồ họa máy tính liên quan ít nhiều đến một số lĩnh vực như đại số, hình học giải tích và hình học họa hình, quang học…… và kĩ thuật máy tính và đặc biệt là chế tạo phần cứng ( các loại màn hình, các thiết bị nhập xuất, các vi mạch đồ họa).
Qua môn học chúng ta đã nắm cơ bản các kiến thức về lập trình
đồ họa Đề tài vẽ đồng hồ hoạt động là đề tài mà nhóm được giao tìm hiểu và viết chương trình Do quá trình tìm hiểu còn nhiều thiếu sót nên chương trình còn nhiều hạn chế, nhóm thực hiện rất mong nhận được ý kiến đóng góp từ phía cô giáo và các bạn để chương trình được hoàn thiện hơn.
Hà Nội, ngày 29 tháng 2 năm 2013
Trang 3Mục Lục
Mục Lục 3
CHƯƠNG I: KHẢO SÁT 4
CHƯƠNG II: PHÂN TÍCH 5
delay(5); 6
2.1 Kết hợp các phép tịnh tiến 10
2.2 Phép quay với tâm bất kỳ 12
CHƯƠNG III: CÀI ĐẶT CHƯƠNG TRÌNH 14
3.1 Giao diện chương trình 14
3.2 Cài đặt chương trình 15
LỜI KẾT 20
Trang 4CHƯƠNG I: KHẢO SÁT
I Mục đích nghiên cứu và đối tượng
Hiểu rõ các phép biến hình và thuật toán quay và ứng dụng của nó từ
đó ứng dụng vẽ mô phỏng hoạt động của đồng hồ
II Khảo Sát
Đề tài : Viết chương trình đồng hồ hoạt động là 1 đề tài yêu cầntìm hiểu và vận dụng các phép biến hình cơ bản liên gồm có: phép tịnh tiến phép quay…
Sử dụng các thuật toán vẽ đường thẳng như DDA, Bresenham
Đây là đề tài yêu cầu sự tư duy, phân tích cũng như nắm chắc kiến thức cơ bản
Trang 5CHƯƠNG II: PHÂN TÍCH
I Các thuật toán và các phép biến hình cơ bản có liên quan
1.1 Các thuật toán vẽ đường thẳng
Void Bre(int x1, int y1, int x2, int y2) //Breshenham
Trang 6x_inc = (float) dx/step;
y_inc = (float) dy/step;
1.2Các phép biến hình cơ bản:
Bản chất của các phép biến đổi hình học là sự thay đổi các mô tả về tọa độ của đối tượng từ đó làm đối tượng thay đổi về hướng, kích thước cũng như hình dạng
Phép tịnh tiến
Ảnh của phép tịnh tiến theo vector (a,b) của điểm P(x,y) là điểm Q(x*,y*)
Trang 7a x x
*
*
Vector tịnh tiến (a,b) còn gọi là “vector độ dời” Chúng ta có thể áp dụng quy tắc trên cho mọi điểm của đối tượng để dịch chuyển nó Đơn giản hơn, để tịnh tiến một đa giác chỉ cần tịnh tiến các đỉnh của nó rồi vẽ lại đa giác mới Tương tự, đối với đường tròn, ellip ta tịnh tiến tâm của chúng tới
vị trí mới rồi vẽ lại
Nếu gọi ttx và tty lần lượt là độ dời theo trục hoành và trục tung thì tọa độ của điểm mới Q(x’,y’) sau khi tịnh tiến điểm P(x,y) sẽ là:
Khi đó (ttx,tty) được gọi là vecto tịnh tiến hay độ dời
Ma trận biến đổi
Thuật toán cài đặt
void TinhTien(float &x,float &y,float ttx,float tty)
Trang 8α
cos sin
.
*
sin cos
.
*
y x
y
y x
x
Trang 9 Thuật toán cài đặt
void Quay(float &x,float &y,float goc)
Trang 11Vậy kết hợp hai phép tịnh tiến là một phép tịnh tiến Từ đó ta có thể kết hợp của nhiều phép tịnh tiến cũng là một phép tịnh tiến.
Thuật toán cài đặt
Void TinhTien2LanDaGiac(int n,float ttx1,float tty1,float ttx2,float tty2)
Trang 122.2 Phép quay với tâm bất kỳ
Phép quay quanh tâm quay A(x,y) góc quay α có thể phân tích thành các phép biến hình cơ sở sau:
- Tịnh tiến theo vector (-x,-y) để đưa tâm quay về gốc tọa độ
- Quay quanh gốc tọa độ một góc α
- Tịnh tiến theo vector (x,y) để đưa đối tượng về chỗ cũ
−+
1.sinsin
.cos
1
0cos
sin
0sin
cos
1
010
001
100
0cossin
0sincos
1
010
001
y x
y x
y x y
x
α α
α α
α α
α α
α α
α α
Thuật toán cài đặt
void QuayTamBatKy(int n,float a,float b,float goc)
Trang 14CHƯƠNG III: CÀI ĐẶT CHƯƠNG TRÌNH
III.Cài đặt chương trình
3.1 Giao diện chương trình
Demo chương trình bằng ngôn ngữ C++ Đầu tiên giao diện chương trình
sẽ xuất hiện
Sau khi nhập giờ và nhập phút chương trình sẽ xuất hiện :
Trang 15int const1 = 2*dy;
int const2 = 2*(dy-dx);
int x=x1, y=y1;
putpixel(x,y,c);
while(x<=x2)
Trang 16int const1 = -2*dy;
int const2 = -2*(dy+dx);
Trang 17int const2 = -2*(dx+dy);
Trang 20đã nhiệt tình dạy bảo và hướng dẫn chúng em hoàn thành bài tập lớn này Trong qua trình hoàn thành bài báo cáo không tránh khỏi thiếu sót Vì thế , nhóm chúng em rất mong nhận được chỉ dẫn, bổ sung, sửa chữa, những đóng góp và sự cảm thông sâu sắc của thầy, cô cũng như bạn bè để bài tập của chúng em được hoàn thiện hơn.
Xin chân thành cảm ơn!