MỤC LỤC3.1 Xén tỉa đoạn thẳng bằng thuật toán Cohen-Sutherland 6 3.2 Xén tỉa đoạn thẳng bằng thuật toán Lyangbarsky 11 3.3 Xén tỉa đa giác bằng thuật toán Sutherland-Hogman 13 1.THIẾT KẾ
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO:
KỸ THUẬT ĐỒ HỌA
Đề tài: Dùng Tool và ngôn ngữ lập trình viết một ứng dụng liên
quan đến xén tỉa trong 2D và 3D
Thành viên nhóm Nguyễn Việt Cường B18DCCN070
Đào Văn Đạt B18DCCN134
Phan Minh Đức B18DCCN180
Đỗ Thị Thu Hà B18DCCN189
Phạm Năng Hưng B18DCCN287 Trần Thanh Khải B18DCCN299 Phan Văn Thìn B18DCCN642
Hà Nội, 2021
Trang 2MỤC LỤC
3.1 Xén tỉa đoạn thẳng bằng thuật toán Cohen-Sutherland 6 3.2 Xén tỉa đoạn thẳng bằng thuật toán Lyangbarsky 11 3.3 Xén tỉa đa giác bằng thuật toán Sutherland-Hogman 13
1.THIẾT KẾ GIAO DIỆN HIỂN THỊ 20
Trang 3LỜI NÓI ĐẦU
Như chúng ta đã thấy trong những năm gần đây sự phát triển vượtbậc về công nghệ đồ họa đã mang lại cho con người chúng ta vô vàn
sự tiện nghi, những trải nghiệm mới mẻ, chân thực
Kỹ thuật đồ họa góp phần quan trọng làm cho giao tiếp giữa conngười và máy tính trở nên thân thiện hơn Trong kỹ thuật đồ họa có nhiềuthuật toán khác nhau Xong mỗi thuật toán lại tỏ ra có những ưu việt vàhạn chế riêng đối với từng bài toán cụ thể
Là sinh viên khoa Công nghệ thông tin trường Học viện Công nghệBưu Chính Viễn Thông Chúng em cũng được tiếp xúc với môn học Kỹthuật đồ họa Với những kiến thức em đã học và được sự hướng dẫn của
cô Nguyễn Thị Thanh Tâm chúng em đã thực hiện đề tài “ Dùng tool vàngôn ngữ lập trình viết một ứng dụng liên quan đến xén tỉa trong 2D và3D”
Có lẽ rằng chương trình và báo cáo của chúng em chưa đượcchuyên nghiệp, hoàn chỉnh nhất, còn có những thiếu sót Vì thế em rấtmong cô và các bạn có thể góp ý để nhóm em xây dựng đề đạt kết quả tốtnhất có thể
Trang 4A PHÂN TÍCH BÀI TOÁN
1 XÉN TỈA LÀ GÌ?
Xén tỉa là tiến trình xác định các điểm của một đối tượng nằmtrong hay ngoài cửa sổ hiển thị Nằm trong được hiển thị, nằm ngoàiloại bỏ
Việc loại từng điểm ảnh của đối tượng thường chậm nhất là khi đốitượng mà phần lớn nằm ngoài cửa sổ hiển thị
Các thuật toán xén tỉa đoạn thẳng đều tập trung giải quyết hai vấn
đề chính nhằm tối ưu tốc độ thuật toán đó là: loại bỏ việc tìm giaođiểm đối với các đoạn thẳng chắc chắn không cắt cửa sổ (như nằmhoàn toàn trong, nằm hoàn toàn ngoài), và với đoạn thẳng có khả năngcắt cửa sổ, cần phải tìm cách hạn chế số lần tìm giao điểm với các biênkhông cần thiết
Tiến trình, giải thuật kiểm tra chấp nhận các đoạn thẳng nằm trong
và loại bỏ các đoạn thẳng nằm ngoài dựa trên 2 điểm đầu cuối
Lý do:
– Không kiểm tra mọi điểm trên đoạn thẳng
– Hầu hết các đoạn thẳng với 1 màn hình hiển thị đều được chấp nhậnhoặc loại bỏ
– Rất ít các đoạn thẳng cắt cửa sổ hiển thị
Trang 52.3Xén tỉa đa giác
Hình 2.3.1 Các loại đa giác
Đa giác lồi: là đa giác có đường thẳng nối bất ký 2 điểm bên
trong nào của đa giác đều nằm trọn trong đa giác Đa giác không lồi là
đa giác lõm
Theo quy ước: một đa giác với các đỉnh P1, ,Pn (các cạnh là Pi-1Pi và PnP1) được gọi là theo hướng dương nếu các hình theo thứ
tự đã cho tạo thành một mạch ngược chiều kim đồng hồ
Nếu bàn tay trái của một người dọc theo bất kỳ cạnh Pi-1Pi hoặcPNP1 cũng chỉ về bên trong đa giác
Hình 2.3.2 Quy tắc tìm hướng dương của một đa giác hướng
Khảo sát một điểm so với một đường thẳng:
Có điểm A(x1,y1), B(x2,y2) và P(x,y)
Theo định nghĩa thì tích của hai vectơ (ABxAP) chỉ theo hướng củavectơ K với mặt phẳng (XoY) Có:⊥
AB=(x2-x1)i + (y2-y1)jAP=(x-x1)i + (y-y1)jVậy ABxAP=[ (x2-x1).(y-y1) – (y2-y1).(x-x1) ].K
Do đó hướng được xác định như sau:
Trang 6C = (x2 - x1)(y - y1) - (y2 - y1)(x - x1)Nếu C dương thì P nằm bên trái AB.
Nếu C âm thì P nằm bên phải AB
3 CÁC GIẢI THUẬT XÉN TỈA
3.1 Xén tỉa đoạn thẳng bằng thuật toán Cohen-Sutherland
Cho đoạn thẳng P1P2, thuật toán cần tìm ra đoạn thẳng giao giữa
P P1 2 và cửa sổ Window được hiển thị như hình vẽ (Input: Đoạnthẳng P1P2; Output: P1P2 giao W(W ,Wl r ,Wb ,W )).t
Mặt phẳng được chia làm 5 vùng:
Trang 7Lúc này, ta có:
+ Input: Đoạn thẳng P1P2
+ Output: P1P2 giao W(W ,Wl r ,Wb ,W )t
Trang 8Bước 1: gán mã vùng 4 bit cho mỗi điểm cuối của đoạn thẳng.
C là mã vùng của P1 1
C là mã vùng của P2 2
Trang 9Bước 2: quá trình kiểm tra vị trí của đoạn thẳng so với cửa sổ.
Trường hợp 1 : Đoạn thẳng nằm ở vùng bên trong
Trang 10
Trường hợp 2 : Đoạn thẳng thuộc các vùng bên ngoài
Trang 11Trường hợp 3 : Đoạn thẳng cắt cửa sổ
3.2 Xén tỉa đoạn thẳng bằng thuật toán Lyangbarsky
Thuật toán xén tỉa đoạn thẳng LyaBarsky tập trung giải quyếthai vấn đề chính nhằm tối ưu tốc độ thuật toán đó là: loại bỏ việc tìm giao điểm đối với các đoạn thẳng chắc chắn không cắt cửa sổ (như nằm hoàn toàn trong, nằm hoàn toàn ngoài), và với đoạn thẳng
có khả năng cắt cửa sổ, cần phải tìm cách hạn chế số lần tìm giao điểm với các biên không cần thiết
Thuật toán LyaBarsky thì tuy dựa vào phương trình tham số của đoạn thẳng để lập luận nhưng thực chất là dựa trên việc xét các
Trang 12giao điểm có thể có giữa đoạn thẳng kéo dài với các biên của cửa sổ(cũng được kéo dài) Các giao điểm này tương ứng với các giá trị rk
= qk/pk Cả hai thuật toán này đều có thể được mở rộng cho việc xén hình trong đồ hoạ 3D
Bước 1 : Xác định tọa tộ 2 điểm đầu và cuối của đoạn thẳng đang xét (x1; y1), (x2; y2)
Nếu u0 < u1 => đọa thẳng nằm trong cửa sổ
Thay tọa đồ u0, u1 vào phương trình để tìm tọa độ mới :
a Với điểm đầu : x = x1 + x*u0, y = y1 + x*u0
b Với điểm cuối : x = x1 + x*u1, y = y1 + x*u1
3.3 Xén tỉa đa giác bằng thuật toán Sutherland-Hogman
Cho đa giác P bất kì có n cạnh, thuật toán cần tìm ra đa giác Pgiao với cửa sổ Window (input: Đa giác P; output: P giao Window)
Trang 13Mỗi cạnh mặt phẳng chia làm 2 phần: nửa mặt phẳng trong vànửa mặt phẳng ngoài.
Cửa sổ quan sát là giao của các nửa mặt phẳng trong của các cạnh
Trang 14Dùng từng cạnh của cửa sổ lần lượt xén đa giác
+ input: Đa giác IN = {P0, P1, , Pn-1}
+ output: Đa giác OUT = IN giao W{Wl, Wr, Wb, Wt}
Trang 15Bước 1:
OUT = {}
Bước 2:
Lặp P: P0 … Pn-1
S là đỉnh kề trước của PTrường hợp 1, P bên trong S bên trong
Trường hợp 2: P bên ngoài, S bên trong
Trang 16Trường hợp 3: P bên ngoài, S bên ngoài
Trường hợp 4: P bên trong, S bên ngoài
Trang 17
Ta xét ví dụ minh họa sau để hiểu rõ thuật toán hơn.
VD: Xén đa giác ABCDEF vào vùng cửa sổ như hình:
Trang 19
1.1Giao diện thanh chọn
Bao gồm 4 nút chọn (button) với các chức năng:
+ Nút Line : vẽ 1 đường thẳng với 2 điểm cho trước
+ Nút ViewPoint : vẽ một hình chữ nhật với 2 điểm cho trước
+ Nút Cut : Thực hiện xén tỉa hình vẽ
+ Nút Delete: Xóa các đối tượng có trong giao diện
1.2 Giao diện bảng vẽ
Là một khu vực hình vuông, nền đen với kích thước 400 x 400
Trang 20- Để thực hiện thuật toán: chọn nút Cut để xén tỉa hình đã vẽ
Chú ý: Nếu như chưa vẽ ViewPoint mà thực hiện xén tỉa thì sẽkhông hợp lệ, hộp thông báo chưa vẽ ViewPoint sẽ hiển thị để nhắcnhở
- Chọn nút Delete để xóa và làm mới bảng vẽ
2.1Thuật toán Cohen-Sutherland
Trang 232.2Thuật toán Lyangbarsky
Trang 27
2.3Thuật toán Sutherland-Hodgman
Trang 283 DEMO
❖ Xén tỉa đoạn thẳng
Trang 29⮚ Kết quả:
❖ Xén tỉa đa giác
Trang 30⮚ Kết quả
Trang 31TÀI LIỆU THAM KHẢO
[1] Hoàng Kiếm, Dương Anh Đức, Lê Đình Duy, Vũ Hải Quân Giáo trình cơ sở Đồ hoạ Máy tính, NXB Giáo dục, 2000
[2] Lê Tấn Hùng, Huỳnh Quyết Thắng Kỹ thuật đồ hoạ máy tính, NXB khoa học và kỹ thuật,
2002
[3] Trịnh Thị Vân Anh Bài giảng Kỹ thuật đồ họa, Học viện Công nghệ Bưu chính Viễn thông, 2020.