Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
544 KB
Nội dung
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN Đề Tài:Cài Đặt Thuật Toán Cohen-Sutherland Để Xén Một Tam Giác. Phân tích các trường hợp thuật toán sao cho kết quả là các đoạn thẳng rời rạc. Giảng viên hướng dẫn: Nguyễn Thị Cẩm Ngoan Lớp: Khoa Học Máy Tính 1-k5 Nhóm thực hiện : Nhóm 19 Thành viên trong nhóm : 1. Hoàng Thị Nhài 2. Nguyễn Văn Trường 3. Nguyễn Văn Đinh Hà Nội, tháng 02 năm 2013 Bài Tập Lớn môn học Đồ Họa Máy Tính LỜI NÓI ĐẦU Đồ họa máy tính là một trong những lĩnh vực lí thú nhất và phát triển nhanh nhất của tin học. Ngay từ khi xuất hiện, đồ họa máy tính đã có sức lôi cuốn mãnh liệt, cuốn hút rất nhiều người và được sử dụng ở nhiều lĩnh vực khác nhau như : khoa học, nghệ thuật, kinh doanh, thương mại, công nghiệp, quản lí, giáo dục, giải trí, … Số lượng các chương trình đồ họa ứng dụng thật khổng lồ và phát triển liên tục. Với sự hứng thú về thuật toán Cohen-Sutheland nhóm chúng em quyết định chọn đề tài “Cài đặt thuật toán Cohen-Sutheland để xén một tam giác. Phân tích các trường hợp thuật toán này sao cho kết quả là các đoạn thẳng rời rạc” để có cơ hội tìm hiểu sâu hơn về thuật toán và thư viện đồ họa của thuật toán này. Qua thời gian tìm hiểu, chúng em đã tìm hiều được tổng quan về thuật toán Cohen-Sutheland và thấy rằng đây là một thư viện rất thú vị. 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 chỉ 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 những sai sót, khuyết điểm. Vì vậy, nhóm thực hiện chúng em hy vọng nhận được sự đánh giá và đóng góp nhiệt tình từ phía thầy cô và các bạn để bài của nhóm chúng em được hoàn thiện hơn. Nhóm 19, lớp KHMT1 – K5 chúng em xin chân thành cảm ơn! Trường ĐH Công Nghiệp Hà Nội, tháng 02 năm 2013. 2 Bài Tập Lớn môn học Đồ Họa Máy Tính MỤC LỤC Tiêu Đề Trang LỜI NÓI ĐẦU Error: Reference source not found MỤC LỤC Error: Reference source not found PHẦN 1: TỔNG QUAN VỀ ĐỀ TÀI CỦA NHÓM Error: Reference source not found 3 Bài Tập Lớn môn học Đồ Họa Máy Tính PHẦN 1: TỔNG QUAN VỀ ĐỀ TÀI CỦA NHÓM I. Giới Thiệu Đề Tài. Cùng với sự phát triển của nền kinh tế hiện nay là sự phát triển mạnh mẽ của ngành công nghệ thông tin. Các ứng dụng của công nghệ thông tin ngày càng nhiều và có mặt trong hầu hết các lĩnh vực của cuộc sống. Với đề tài: “Cài đặt thuật toán Cohen-Sutherland để xén một tam giác. Phân tích các trường hợp thuật toán này cho kết quả là các đoạn thẳng rời rạc”, nhóm 19 – lớp KHMT1K5 sẽ trình bày về thuật toán COHEN-SUTHERLAND. Đây là một trong những thuật toán ra đời sớm nhất, thông dụng nhất và nó cũng có ý nghĩa không hề nhỏ bé trong lĩnh vực tin học. Bằng cách kéo dài các biên của cửa sổ, người ta chia mặt phẳng thành chín vùng gồm cửa sổ và tám vùng xung quanh nó. Qua đề tài này nhóm 19 mong sẽ giúp ích được cho mọi người hiểu thêm phần nào về thuật toán xén hình. II. Giới Thiệu Ngôn Ngữ Lập Trình Được Sử Dụng Trong Đề Tài Stroustrup đã bắt đầu làm việc với khái niệm lớp trong 1979. Ý tưởng tạo ra một ngôn ngữ mới bắt nguồn từ kinh nghiệm lập trình khi mà ông viết luận án tiến sĩ. Stroustrup nhận ra rằng Simulacó nhiều tính năng hữu dụng cho việc phát triển một phần mềm lớn nhưng nó đã quá chậm trong ứng dụng thực tế, trong khi đó, BCPL lại nhanh nhưng ở cấp quá thấp và không tiện cho việc phát triển phần mềm lớn. Đến khi làm việc ở Bell Labs, thì ông gặp phải vấn đề trong việc phân tích nhân Unix với việc tính toán phân tán. Dùng lại kinh nghiệm lúc làm luận án tiến sĩ, Stroustrup cài thêm các tính năng giống như Simula vào trong C để nâng cao. C được chọn là vì đó là ngôn ngữ tổng quát, nhanh và năng động. Lần đầu tiên, các chức năng như là lớp, lớp dẫn xuất, kiểm tra kiểu mạnh, nội tuyến (inline), và đối số mặc định đã được thêm vào trong C. Lần xuất bản đầu tiên vào thị trường xảy ra trong tháng 11/1985. Năm 1983, thì tên C với các lớp được đổi thành C++. các chức năng mới được thêm vào bao gồm hàm ảo, quá tải hàm và toán tử, tham chiếu, hằng, khả năng kiểm soát bộ nhớ của lưu trữ tự do, nâng cao việc kiểm soát kiểu, và lệnh chú giải kiểu (//). 4 Bài Tập Lớn môn học Đồ Họa Máy Tính Năm 1985, tác phẩm The C++ Programming Language được xuất bản lần đầu tiên, cung cấp một tài liệu tham khảo quan trọng cho ngôn ngữ nhưng đó chưa là một tiêu chuẩn chính thức. Năm 1989 phiên bản C++ 2.0 phát hành. Các tính năng mới bao gồm đa kế thừa, lớp trừu tượng, hàm tĩnh, hàm thành viên hằng, và thành viên bảo tồn. Năm 1990, cuốn The Annotated C++ Reference Manual được xuất bản cung cấp nền tảng cho tiêu chuẩn tương lai. Phiên bản xuất bản sau đó có thêm các chức năng tiêu bản, ngoại lệ, không gian tên, chuyển kiểu cho toán tử new, và kiểu Boolean. Khi C++ hình thành, thì thư viện chuẩn hoàn thiện với nó. Thư viện C++ đầu tiên thêm vào là iostream.h cung cấp cơ sở để thay thế các hàm C truyền thống như là printf và scanf. Sàu này, trong những thư viện chuẩn quan trọng nhất được thêm vào là Thư viện Tiêu bản Chuẩn. Sau nhiều năm làm việc, có sự cộng tác giữa ANSI và hội đồng tiêu chuẩn hoá C++ của ISO để soạn thảo tiêu chuẩn ISO/IEC 14882:1998. Phiên bản tiêu chuẩn này được phát hành năm 1989, hội đồng tiếp tục xử lí các báo cáo trục trặc, và ấn hành một phiên bản sửa sai của chuẩn C++ trong năm 2003. Không ai là chủ nhân của ngôn ngữ C++, nó hoàn toàn miễn phí khi dùng. Mặc dù vậy, các văn bản tiêu chuẩn thì không miễn phí. III. Giới Thiệu Thư Viện Graphics.h Trong Dev-C++. Tạo một chương trình đồ hoạ 2D trong DOS sữ dụng turbo C khá dễ dàng và ai cũng có thể làm được.Thư viện đựoc #include có tên là graphis.h. Nhưng các thư viện C/C++ của borland lại có 1 điều đặc biệt là không sữ dụng được đối với 1 số trình compiler khác, tuy nhiên so với các IDE hiện đại thì borland lại kém về mặt quản lý và tính thuận tiện. Chính vì lẽ đó mà bản hack thư viện graphics cũng như các thư viện khác ra đời, và hôm nay thư viện mình muốn giới thiệu graphics.h của Micheal. Micheal đã thay đỗi BGI library (thư viện BGI) thành thư viện có tên WinBGIm để có thể sữ dụng tốt trên windows. Và bây giờ bạn đã có thể sữ dụng tốt các hàm đặc biệt của borland bằng dev-c++ IV. Cách sử dụng thư viện đồ họa trong Dev-C++. Đầu tiên bạn tải file đính kèm về máy mình, giải nén ra sẽ được 2 file là graphics.h và libbgi.a + File graphics.h để ở thư mục C:\Dev-Cpp\include 5 Bài Tập Lớn môn học Đồ Họa Máy Tính + File libbgi.a để ở thư mục C:\Dev-Cpp\lib (Nếu bạn cài mặc đinh Dev C++ ở ổ C) Tiếp theo bạn khởi động Dev C++ lên, vào File >New > Project >Empty Project (Nhớ chọn C++ Project) >OK Đặt tên cho Project của mình! Nhấn chuột phải lên cái project của bạn >New File Nhấn Alt + P >Chọn thẻ Parameters > Copy và paste vào ô Linker những dìng dưới đây: -lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32 (Bao gồm cả dấu "-") >OK Phần 2: Ý tưởng xây dựng chương trình và cài đặt thuật toán I. Qui định hiển thị đối tượng 2 chiều 1.1. Một số khái niệm Cửa sổ (window) là một vùng được chọn để hiển thị trong hệ tọa độ thế giới thực. Vùng quan sát (viewport) là vùng đƣợc chọn trên thiết bị hiển thị để các đối tượng ở trong cửa sổ ánh xạ vào. Cửa sổ xác định cái gì được thấy trên thiết bị hiển thị, còn vùng quan sát xác định nơi nào nó sẽ được hiển thị. Ở đây chúng ta nên phân biệt khái niệm cửa sổ đƣợc dùng trong phần này với khái niệm cửa sổ đƣợc dùng trong các chương trình ứng dụng trên các hệ điều hành như Windows. Thông thường cửa sổ và vùng quan sát có dạng hình chữ nhật, có các cạnh song song với các trục tọa độ. Tuy nhiên chúng cũng còn có một số dạng khác như đa giác, hình tròn, … Quá trình ánh xạ một vùng định nghĩa trong hệ tọa độ thế giới thực vào một vùng trong hệ tọa độ thiết bị được gọi là phép biến đổi hệ quan sát (viewing transformation). 6 Bài Tập Lớn môn học Đồ Họa Máy Tính Phép biến đổi hệ quan sát với cửa sổ và vùng quan sát có dạng là các hình chữ nhật Quy trình hiển thị các đối tượnng trong đồ họa hai chiều có thể được mô tả qua sơ đồ sau : Trước tiên, các đối tượng sẽ đƣợc mô tả bằng các đối tượng đồ họa cơ sở và các thuộc tính của chúng trong từng hệ tọa độ cục bộ (modeling coordinates - MC) nhằm đơn giản hóa và tận dụng các đặc trƣng riêng của từng loại. Sau đó, chúng ta sẽ dùng các phép biến đổi hệ tọa độ để chuyển các mô tả từ các hệ tọa độ cục bộ này sang một hệ tọa độ thế giới thực (world coordinates - WC) duy nhất chứa toàn bộ các đối tƣợng thành phần. Phép chuyển đổi này đƣợc gọi là phép chuyển đổi mô hình (modeling coordinates transformation). Tiếp theo, chúng ta sẽ định một hệ tọa độ quan sát (viewing coordinates - VC), là hệ tọa độ mô tả vị trí của người quan sát đối tượng. Nhờ việc sử dụng hệ tọa độ này mà cùng một mô tả, các đối tượng có thể được quan sát ở nhiều góc độ và vị trí khác nhau. 7 Chuyển đổi từ hệ tọa độ cục bộ sang hệ tọa độ thế giới thực Chuyển đổi từ hệ thế giới thực sang hệ tọa độ quan sát Chuyển đổi từ hệ tọa độ quan sát sang hệ tọa đồ thiết bị chuẩn Ánh xạ từ hệ tọa độ thiết bị chuẩn sang hệ tọa độ thiết bị Bài Tập Lớn môn học Đồ Họa Máy Tính Qui trình hiền thị đối tượng 2 chiều Sau khi chuyển các mô tả đối tƣợng từ hệ tọa độ thế giới thực sang hệ tọa độ quan sát, chúng ta sẽ định nghĩa cửa sổ trong hệ tọa độ này, đồng thời định nghĩa vùng quan sát trong hệ tọa độ thiết bị chuẩn (normalized device coordinates - NDC) có tọa độ các chiều thay đổi trong khoảng từ 0 đến 1. Sau khi thực hiện phép ánh xạ từ cửa sổ sang vùng quan sát, tất cả các phần của đối tượng nằm ngoài vùng quan sát sẽ bị xén (clip) và toàn bộ những gì nằm trong vùng quan sát sẽ được ánh xạ sang hệ tọa độ thiết bị (device coordinates - DC). Việc đưa ra hệ tọa độ thiết bị chuẩn nhằm giúp cho việc tƣơng thích dễ dàng với nhiều loại thiết bị hiển thị khác nhau.Bằng cách thay đổi vị trí của vùng quan sát chúng ta có thể quan sát các đối tượng tại các vị trí khác nhau trên màn hình hiển thị, đồng thời, bằng cách thay đổi kích thƣớc của vùng quan sát, chúng ta có thể thay đổi kích thước và tính cân xứng của các đối tượng được hiển thị. Chúng ta có thể thực hiện các hiệu ứng thu phóng bằng cách ánh xạ các cửa sổ có kích thước khác nhau vào vùng quan sát có kích thước cố định. Khi các cửa sổ đƣợc thu nhỏ, phần nằm trong cửa sổ sẽ được phóng to giúp chúng ta dễ dàng quan sát các chi tiết mà không thể thấy được trong các cửa sổ lớn hơn. 1.2. Hệ tọa độ quan sát và hệ tọa độ thiết bị chuẩn 1.2.1. Hệ tọa độ quan sát Để thiết lập hệ tọa độ quan sát, trƣớc tiên ta sẽ chọn một điểm P 0 (x 0 , y 0 ) trong hệ tọa độ thế giới thực làm gốc tọa độ. Sau đó chúng ta sẽ sử dụng một vector V mô tả hướng quan sát để định hướng cho trục tung y v của hệ tọa độ. Vector V được gọi là view-up vector. Từ V chúng ta có thể tính đƣợc các vector đơn vị v = (v x v y ) và u = (u x ,u y ) tương ứng cho các trục tung yvvà trục hoành xvcủa hệ tọa độ. Các vector đơn vị này sẽ được 8 Bài Tập Lớn môn học Đồ Họa Máy Tính dùng để tạo thành hai dòng đầu tiên của ma trận quay MR để đưa các trục xv yv trùng với các trục xw ywcủa hệ trục tọa độ thế giới thực. Ma trận của phép chuyển một điểm trong hệ tọa độ thế giới thực sang hệ tọa độ quan sát là tích của hai ma trận của các phép biến đổi : phép tịnh tiến gốc tọa độ hệ quan sát về gốc tọa độ hệ tọa độ thế giới thực, phép quay đưa các trục của hệ tọa độ quan sát trùng với các trục của hệ tọa độ thế giới thực. M WC,VC =M T M R 1.2.2. Hệ tọa độ thiết bị chuẩn Do cách định nghĩa của các hệ tọa độ thiết bị khác nhau nên một hình ảnh hiển thị được trên thiết bị này chưa chắc hiển thị chính xác trên thiết bị kia. Chính vì vậy cần phải xây dựng hệ tọa độ thiết bị chuẩn đại diện chung cho các thiết bị để có thể mô tả các hình ảnh của thế giới thực mà không phụ thuộc vào bất cứ thiết bị nào. Trong hệ tọa độ này, các tọa độ x, y sẽ đƣợc gán các giá trị trong khoảng từ 0 đến 1. Như vậy, vùng không gian của hệ tọa độ thiết bị chuẩn chính là hình vuông đơn vị có góc trái dưới là (0,0) và góc phải trên (1,1). Hệ tọa độ thiết bị chuẩn 1.3. Các thuật toán xén hình 9 Bài Tập Lớn môn học Đồ Họa Máy Tính Thao tác loại bỏ các phần hình ảnh nằm ngoài một vùng cho trƣớc đƣợc gọi là xén hình. Vùng được dùng để xén hình gọi là cửa sổ xén (clip window). Tùy thuộc vào từng ứng dụng cụ thể mà cửa sổ xén có thể có dạng là đa giác hay là đường cong khép kín. Để đơn giản, trong các thuật toán xén hình, cửa sổ xén được gọi là cửa sổ. II. Thuật toán Cohen-Sutherland Đây là một trong những thuật toán ra đời sớm nhất và thông dụng nhất. Bằng cách kéo dài các biên của cửa sổ, người ta chia mặt phẳng thành chín vùng gồm cửa sổ và tám vùng xung quanh nó. 1. Khái niệm mã vùng (area code) Một con số 4 bit nhị phân gọi là mã vùng sẽ được gán cho mỗi vùng để mô tả vị trí tương đối của vùng đó so với cửa sổ. Bằng cách đánh số từ 1 đến 4 theo thứ tự từ phải qua trái, các bit của mã vùng được dùng theo quy ước sau để chỉ một trong bốn vị trí tương đối của vùng so với cửa sổ bao gồm : trái, phải, trên, dưới. Bit 1 : trái (LEFT) Bit 2 : phải (RIGHT) Bit 3 : trên (TOP) Bit 4 : dưới (BOTTOM) 10 [...]... Đồ Họa Máy Tính KẾT LUẬN Đề tài của nhóm 19 chúng em có phần nào đó giúp mọi người hiểu rõ hơn về thuật toán xén một tam giác vào hình chữ nhật thành những đoạn thẳng rời rạc trong Đồ Họa Máy Tính và có thể ứng dụng trong học tập Qua việc thực hiện đề tài: Cài đặt thuật toán Cohen-Sutherland để xén một tam giác Phân tích các trường hợp thuật toán này cho kết quả là các đoạn thẳng rời rạc”, nhóm 19... của đoạn thẳng cần xén lần lượt là C1, C2 Ta có nhận xét: • Các đoạn thẳng nằm hoàn toàn bên trong cửa sổ sẽ có C1=C2=0000, ứng với các đoạn này, kết quả sau khi xén là chính nó • Nếu tồn tại k thuộc khoảng từ 1->4, sao cho với bit thứ k của C1, C2 đều có giá trị 1, lúc này đoạn thẳng sẽ nằm về cùng phía ứng với bit k so với cửa sổ, do đó nằm hoàn toàn ngoài cửa sổ Đoạn này sẽ bị loại bỏ sau khi xén. .. mất tính tổng quát giả sử điểm đó là P1 Bằng cách xét mã vùng của P1 là C1 ta có thể xác định được các biên mà đoạn thẳng có thể cắt để từ đó chọn một biên và tiến hành tìm giao điểm P1’ của đoạn thẳng với biên 11 Bài Tập Lớn môn học Đồ Họa Máy Tính đó Lúc này, đoạn thẳng ban đầu được xén thành P1P1’ Tới đây chúng ta lặp lại thao tác đã xét cho đoạn thẳng mới P1P1’ cho tới khi xác định được phần nằm... này đoạn P1’P2’, chính là phần nằm hoàn toàn trong cửa sổ Trong trường hợp đoạn P3P4, P3 nằm bên trái cửa sổ nên chúng ta có thể xác định giao điểm P3’, và từ đó loại bỏ đoạn thẳng P3P3’ Bằn cách kiểm tra mã vùng, chúng ta dễ dàng xác định được đoạn thẳng P3’P4 nằm hoàn toàn bên dưới cửa sổ nên có thể bỏ đi toàn bộ Hình 4.8-Minh hoa thuật toán CohenSutherland Các điểm giao với các biên cửa sổ của đoạn. .. được đặt bằng 0 Ví dụ một vùng có mã là 1001, thì nó sẽ nằm phía dưới (bit 4 bằng 1), bên trái (bit 1 bằng 1) so với cửa sổ, vùng có mã là 0000 chính là cửa sổ Các giá trị bit trong mã vùng đƣợc tính bằng cách xác định tọa độ của điểm (x, y) thuộc vùng đó với các biên của cửa sổ Bit 1 được đặt là 1 nếu x < xmin, các bit khác được tính tương tự 2 .Thuật toán Cohen-Sutherland Gán mã vùng tương ứng cho các. .. biên bên trái), do đó đoạn thẳng nằm hoàn toàn về biên trái của cửa sổ Để xác định tính chất này, đơn giản chỉ cần thực hiện phép toán logic AND trên C1, C2 Nếu kết quả khác 0000, đoạn thẳng này sẽ nằm hoàn toàn ngoài cửa sổ • Nếu C1, C2 không thuộc về 2 trường hợp trên, đoạn thẳng có thể hoặc không cắt ngang cửa sổ (ví dụ đoạn P5, P6, P7,P8 trong hình 4.6) chắc chắn sẽ tồn tại một điểm nằm ngoài cửa... đoạn thẳng có thể được tính từ phương trình tham số như đã đề cập ở phần trên Tung độ y của điểm giao đoạn thẳng với biên đứng của cửa sổ có thể tính từ công thức y=y1+m(x-x1), trong đó x có thể là Xmin hay Xmax Tương tự, hoành độ x của điểm giao đoạn thẳng với biên ngang của cửa sổ có thể tính công thức :x=x1+(y-y1)/m, trong đó y có thể là Ymin hay Ymax Lưu đồ thuật toán Cohen-Sutherland dùng để xén một. .. phần nằm trong hoặc loại bỏ toàn bộ đường thẳng Chúng ta minh họa thuật toán bằng hình vẽ Với đoạn thẳng P1P2, ta sẽ kiểm tra P1 lần lượt với các biên trái, phải, dưới, trên và tìm ra điểm này nằm dưới cửa sổ, sau đó chúng ta tìm giao điểm P1’ của đoạn thẳng với biên dưới Lúc này đoạn thẳng ban đầu được xén ngắn lại thành P1’P2 Vì P2 nằm ngoài cửa sổ nên bằng cách xét tương tự, chúng ta sẽ tiến hành... River, New Jersey, 1997, 652tr • Slide bài giảng Đồ Họa Máy Tính - Ths Vũ Minh Yến - Trường ĐH Công Nghiệp Hà Nội • Giáo trình Kỹ Thuật Đồ Họa - Lâm Thị Ngọc Châu • Bài viết: “Xử lý các trường hợp đặc biệt trong bài toán tô màu đa giác bằng thuật toán Scanline” tại: http://www.schoolnet.vn/modules.php? name=News&file=article&sid=2489 • Và 1 số bài viết tại: http://msdn.microsoft.com/en-us/library/gg145023... cửa sổ có thể tính công thức :x=x1+(y-y1)/m, trong đó y có thể là Ymin hay Ymax Lưu đồ thuật toán Cohen-Sutherland dùng để xén một đoạn thẳng qua 2 điểm (x1,y1) và (x2,y2) vào cửa sổ hình chữ nhật cho trước 12 Bài Tập Lớn môn học Đồ Họa Máy Tính Cài đặt minh họa thuật toán Cohen-Sutherland: #include #include 13 Bài Tập Lớn môn học Đồ Họa Máy Tính #include #include . trước 12 Bài Tập Lớn môn học Đồ Họa Máy Tính Cài đặt minh họa thuật toán Cohen-Sutherland: #include<graphics.h> #include<math.h> 13 Bài Tập Lớn môn học Đồ Họa Máy Tính #include<dos.h> #include<stdio.h> #include<conio.h> #include<stdlib.h> void. học Đồ Họa Máy Tính LỜI NÓI ĐẦU Đồ họa máy tính là một trong những lĩnh vực lí thú nhất và phát triển nhanh nhất của tin học. Ngay từ khi xuất hiện, đồ họa máy tính đã có sức lôi cuốn mãnh liệt,. Lớn môn học Đồ Họa Máy Tính setcolor(11); rectangle(200,200,400,400); cohen(200,200,400,400,150,100,300,300); getch(); } 3.Giao diện:Form chính 17 Bài Tập Lớn môn học Đồ Họa Máy Tính KẾT LUẬN Đề