Bài giảng Đồ họa máy tính - Đại học Hàng Hải

pdf 54 trang Gia Huy 16/05/2022 3450
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Đồ họa máy tính - Đại học Hàng Hải", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_do_hoa_may_tinh_dai_hoc_hang_hai.pdf

Nội dung text: Bài giảng Đồ họa máy tính - Đại học Hàng Hải

  1. BỘ GIAO THÔNG VẬN TẢI TRƢỜNG ĐẠI HỌC HÀNG HẢI BỘ MÔN: KHOA HỌC MÁY TÍNH KHOA: CÔNG NGHỆ THÔNG TIN BÀI GIẢNG ĐỒ HỌA MÁY TÍNH TÊN HỌC PHẦN : ĐỒ HỌA MÁY TÍNH MÃ HỌC PHẦN : 17211 TRÌNH ĐỘ ĐÀO TẠO : ĐẠI HỌC CHÍNH QUY DÙNG CHO SV NGÀNH : CÔNG NGHỆ THÔNG TIN HẢI PHÒNG - 2010
  2. MỤC LỤC STT NỘI DUNG TRANG CHƢƠNG 1 GIỚI THIỆU ĐỒ HỌA MÁY TÍNH 1 1.1 Giới thiệu về đồ họa máy tính 1 1.2 Tổng quan về một hệ đồ họa 2 1.2.1 Hệ tọa độ thực, hệ tọa độ thiết bị và hệ tọa độ chuẩn 2 1.2.2 Mô hình màu 3 CHƢƠNG 2 CÁC ĐỐI TƢỢNG ĐỒ HỌA CƠ BẢN 4 2.1 Giới thiệu về các đối tượng đồ họa cơ sở 4 2.1.1 Các đối tượng đồ họa cơ sở: điểm, đường, vùng tô, văn bản 4 2.1.2 Các thuộc tính của các đối tượng đồ họa cơ sở 4 2.2 Các thuật toán vẽ điểm, đường 4 2.2.1 Vẽ đường thẳng 4 2.2.2 Vẽ đường tròn, elip 7 2.3 Các thuật toán tô màu 10 2.3.1 Thuật toán tô màu dựa theo dòng quét đơn giản 10 2.3.2 Thuật toán tô màu dựa theo đường biên 12 2.4 Bài tập áp dụng 13 CHƢƠNG 3 CÁC PHÉP BIẾN ĐỔI ĐỒ HỌA 2 CHIỀU 14 3.1 Các phép biến đổi cơ sở 14 3.1.1 Giới thiệu về phép biến đổi 14 3.1.2 Phép tịnh tiến 14 3.1.3 Phép biến đổi tỉ lệ 14 3.1.4 Phép quay 15 3.2 Kết hợp các phép biến đổi 15 3.2.1 Kết hợp các phép tịnh tiến 15 3.2.2 Kết hợp các phép biến đổi tỉ lệ 15 3.2.3 Kết hợp các phép quay 16 3.3 Một số phép biến đổi khác 16 3.3.1 Phép biến dạng 16 3.3.2 Phép đối xứng 16 3.3.3 Tính chất của phép biến đổi affine 16 3.4 Phép biến đổi giữa các hệ tọa độ 16 3.5 Bài tập áp dụng 17 CHƢƠNG 4 PHÉP QUAN SÁT 2 CHIỀU 18 4.1 Cửa sổ và vùng quan sát 18 4.2 Phép biến đổi từ cửa sổ - đến – vùng quan sát 19 4.3 Phép cắt xén hai chiều 20 4.3.1 Giải thuật Cohen – Sutherland 21 4.3.2 Giải thuật chia tại trung điểm 22 4.3.3 Giải thuật Liang – Barsky 23 4.4 Bài tập áp dụng 24 CHƢƠNG 5 ĐỒ HỌA 3 CHIỀU 25
  3. 5.1 Tổng quan về đồ họa ba chiều 25 5.1.1 Quy trình hiển thị đồ họa ba chiều 25 5.1.2 Mô hình hóa đối tượng 25 5.2 Biểu diễn đối tượng ba chiều 26 5.2.1 Biểu diễn mặt đa giác 27 5.2.2 Đường cong và mặt cong , đường cong và mặt cong Bezier, B- 27 Spline 5.3 Các phép biến đổi hình học ba chiều 29 5.3.1 Phép biến đổi tỷ lệ 30 5.3.2 Phép biến dạng 30 5.3.3 Phép tịnh tiến 31 5.3.4 Phép quay 31 5.4 Bài tập áp dụng 31 CHƢƠNG 6 QUAN SÁT 3 CHIỀU 33 6.1 Các phép chiếu 33 6.1.1 Phép chiếu song song 34 6.1.2 Phép chiếu phối cảnh 37 6.2 Điểm tụ 38 6.3 Loại bỏ mặt khuất 39 6.4 Bài tập áp dụng 44
  4. Tên học phần: Đồ họa máy tính Loại học phần: 4 Bộ môn phụ trách giảng dạy: Khoa học Máy tính Khoa phụ trách: CNTT Mã học phần: 17211 Tổng số TC: 4 TS tiết Lý thuyết Thực hành/Xemina Tự học Bài tập lớn Đồ án môn học 75 45 15 0 15 0 Điều kiện tiên quyết: Sinh viên phải học xong các học phần sau mới được đăng ký học phần này: Toán cao cấp, Toán rời rạc, Kỹ thuật lập trình, Tin học đại cương, Cấu trúc dữ liệu, Giải thuật Mục tiêu của học phần: Cung cấp cho sinh viên kiến thức và rèn luyện kỹ năng lập trình đồ họa máy tính đồ họa máy tính, các phương pháp dựng hình, xử lý hình ảnh cơ bản trong đồ họa. Nội dung chủ yếu - Những vấn đề cơ bản về đồ họa máy tính - Các thuật toán cơ bản trong đồ họa máy tính. - Đồ họa 2D/3D - Các phương pháp biến hình - Các phương pháp tạo bóng Nội dung chi tiết của học phần: PHÂN PHỐI SỐ TIẾT TÊN CHƢƠNG MỤC TS LT TH/Xemina BT KT Chƣơng I : Giới thiệu đồ họa máy tính. 3 3 0 1.1. Giới thiệu về đồ họa máy tính 1.2. Tổng quan về một hệ đồ họa Chƣơng II : Các đối tƣợng đồ họa cơ bản 16 9 3 3 1 2.1. Giới thiệu về các đối tượng đồ họa cơ sở 2.1.1. Các đối tượng đồ họa cơ sở : điểm,
  5. PHÂN PHỐI SỐ TIẾT TÊN CHƢƠNG MỤC TS LT TH/Xemina BT KT đường, vùng tô, văn bản, 2.1.2. Các thuộc tính của các đối tượng đồ họa cơ sở 2.2. Các thuật toán vẽ điểm, đường 2.2.1. Vẽ đường thẳng 2.2.2. Vẽ đường tròn, ellipse 2.3. Các thuật toán tô màu 2.3.1. Thuật toán tô màu dựa theo đường biên 2.3.2. Thuật toán tô màu theo dòng quét 2.4. Bài tập áp dụng Chƣơng III: Các phép biến đổi đồ họa 2 chiều. 10 8 2 3.1. Các phép biến đổi cơ sở 3.1.1 Giới thiệu về phép biến đổi, biểu diễn ma trận của phép biến đổi, phép biến đổi affine 3.1.2. Phép tịnh tiến 3.1.3. Phép biến đổi tỉ lệ 3.1.4. Phép quay quanh gốc tọa độ 3.1.5. Biểu diễn ma trận của các phép biến đổi. Hệ tọa độ thuần nhất 3.2. Kết hợp các phép biến đổi 3.2.1. Kết hợp hai hay nhiều phép tịnh tiến, phép biến đổi tỉ lệ, phép quay. 3.2.2. Phép biến đổi tỉ lệ với tâm tỉ lệ bất kì. 3.2.3. Phép quay quanh tâm là một điểm bất kì.
  6. PHÂN PHỐI SỐ TIẾT TÊN CHƢƠNG MỤC TS LT TH/Xemina BT KT 3.3. Một số phép biến đổi khác 3.3.1. Phép biến dạng 3.3.2. Phép đối xứng 3.3.3. Tính chất của phép biến đổi affine 3.4. Phép biến đổi giữa các hệ tọa độ 3.5. Bài tập áp dụng Chƣơng IV: Phép quan sát hai chiều 12 9 2 1 4.1. Cửa sổ, Vùng quan sát 4.2. Phép biến đổi từ cửa sổ - đến – vùng quan sát 4.3. Phép cắt xén 2 chiều 4.3.1 Giải thuật Cohen – Suntherland 4.3.2 Giải thuật chia trung điểm 4.3.3 Giải thuật Liang – Barsky 4.4. Bài tập áp dụng Chƣơng V: Đồ họa ba chiều 22 10 5 6 1 5.1. Tổng quan về đồ họa ba chiều 5.1.1. Quy trình hiển thị đồ họa ba chiều 5.1.2. Mô hình hóa đối tượng 5.2. Biểu diễn đối tượng ba chiều 5.2.1. Biểu diễn mặt đa giác 5.2.2. Đường cong và mặt cong , đường cong và mặt cong Bezier, B-Spline 5.3. Các phép biến đổi hình học ba chiều 5.3.1. Phép tịnh tiến 5.3.2. Phép quay quanh một trục
  7. PHÂN PHỐI SỐ TIẾT TÊN CHƢƠNG MỤC TS LT TH/Xemina BT KT 5.3.3. Phép biến đổi tỉ lệ 5.3.4. Kết hợp các phép biến đổi 5.3.5. Các phép chuyển đổi giữa các hệ tọa độ 5.4. Bài tập áp dụng Chƣơng VI: Quan sát ba chiều 15 6 3 6 6.1. Các phép chiếu 6.2. Điểm tụ 6.3. Loại bỏ mặt khuất 6.4. Bài tập áp dụng Nhiệm vụ của sinh viên : Tham dự các buổi thuyết trình của giáo viên, tự học, tự làm bài tập do giáo viên giao, tham dự các bài kiểm tra định kỳ và cuối kỳ. Tài liệu học tập : - Đặng Văn Đức. Kỹ thuật đồ họa máy tính. Viện Công nghệ thông tin. 2002. - Donald Hearn, M. Pauline Baker, Computer Graphics, Prentice-Hall Inc., Englewood Cliffs, New Jersey, 1986. - F.S.Hill, Computer graphics, 1990 Hình thức và tiêu chuẩn đánh giá sinh viên: - Hình thức thi cuối kỳ : Thi viết. - Sinh viên phải đảm bảo các điều kiện theo Quy chế của Nhà trường và của Bộ Thang điểm: Thang điểm chữ A, B, C, D, F Điểm đánh giá học phần: Z = 0,4X + 0,6Y. Bài giảng này là tài liệu chính thức và thống nhất của Bộ môn Khoa học máy tính, Khoa Công nghệ thông tin và được dùng để giảng dạy cho sinh viên. Ngày phê duyệt: / /2010 Trưởng Bộ môn: (ký và ghi rõ họ tên)
  8. CHƢƠNG I GIỚI THIỆU ĐỒ HỌA MÁY TÍNH 1.1 Giới thiệu về đồ họa máy tính Ngày nay, đồ họa máy tính được ứng dụng rộng rãi trong ngành công nghệ thông tin. Khó mà tìm được một ứng dụng thương mại của công nghệ thông tin không sử dụng một thành phần nào đó của hệ đồ họa máy tính. Đồ họa máy tính ở vị trí quan trọng trong lĩnh vực thiết kế và giao tiếp kỹ thuật. Nó là cơ sở để chuyển đổi các giải pháp tính toán số sang thể hiện hình ảnh tự nhiên cho thiết kế kỹ thuật hay muốn sáng tỏ một vấn đề phức tạp. Đồ họa máy tính biểu diễn được hình ảnh đối tượng, quan hệ, dữ liệu, vị trí Đồ họa máy tính còn có chức năng mô tả kích thước của đối tượng, phân tích dữ liệu. Trong những thập niên cuối thế kỷ 20, sự phát triển mạnh của những hệ đồ họa như CAD/CAM đã trở thành chuẩn công nghiệp và trường học. 1.2 Tổng quan về một hệ đồ họa Mục tiêu của đồ họa máy tính có chức năng tạo ra và thao tác các hình ảnh đồ họa, nên nó phải có khả năng tạo ra và hiệu chỉnh các hình ảnh bằng các tương tác và đáp ứng. Các ứng dụng đồ họa đưa ra các chỉ dẫn thuật ngữ theo yêu cầu đồ họa người dùng. Thư viện đồ họa thực hiện tương tác, làm cầu nối cho giao tiếp giữa người dùng và các thiết bị vật lý đơn giản đi. Hình 1.1 Hệ thống đồ họa Một trong các yêu cầu chính của một hệ thống đồ họa là các ứng dụng, áp dụng cho nhiều hệ thiết bị vật lý, phải được phát triển không phụ thuộc vào phần cúng. Để có được điều đó, phải có tiêu chuẩn hóa cho môi trường đồ họa ở mức chức năng, bằng việc cung cấp sự độc lập thiết bị và ngôn ngữ lập trình. Sự độc lập với thiết bị cho phép các chương trình ứng dụng đồ họa chạy trên các dạng phần cứng khác nhau. Nó được thực hiện thông qua thiết bị nhập xuất logic cung cấp cho phần mềm ứng dụng thông qua thư viện đồ họa và ánh xạ thiết bị vật lý cụ thể. Cho tới nay, có những tiêu chuẩn đồ họa đã được phát triển trong nhiều năm, bao gồm: GKS(Graphics Kernel System – 1985), được phát triển riêng cho các thiết bị nhập xuất 2 chiều. GKS-3D bổ sung thêm khả năng lập trình 3 chiều. PHIGS (Programmer’s Hierarchical Graphics System – 1984) hay PHIGS+ bao gồm khả năng lập trình không gian , tạo thành thao tác dữ liệu đồ họa phức tạp Các tiêu chuẩn đồ họa thực tế là kết quả của việc chấp nhận trong công nghiệp các giao diện đặc trưng, được đề xuất bởi nhiều công ty và không nêu ra trong các tiêu chuẩn chính thức. Được nhắc đến trong số này là hệ X-Windows, cung cấp một loạt các chức năng nhập và thao tác đồ họa 2 chiều. Sự mở rộng được bắt đầu vào giữa những năm 80 là hệ X-Windows 3 chiều. Để đảm bảo sự linh hoạt, các tiêu chuẩn đồ họa thiết lập cho ứng dụng các thay đổi tối thiểu, cho 1
  9. phép nó định địa chỉ các thiết bị nhập xuất khác nhau. Khởi đầu, người lập trình tạo ra một hệ thống tọa độ mô hình, mô tả đối tượng gọi là hệ thống tọa độ thực. Tiếp theo, là hệ tọa độ tiêu chuẩn và hệ tọa độ thiết bị. Chương trình ứng dụng sẽ giao tiếp với hệ tọa độ chuẩn theo cách thức phù hợp, không quan tâm đến thiết bị xuất được dùng. Do đó, tạo ra sự độc lập với thiết bị trong việc tạo ra hình ảnh của đối tượng. 1.2.1 Hệ tọa độ thực, hệ tọa độ thiết bị và hệ tọa độ chuẩn Trong lĩnh vực kỹ thuật đồ họa, chúng ta phải hiểu được rằng thực chất của đồ họa là làm thế nào để có thể mô tả và biến đổi được các đối tượng trong thế giới thực trên máy tính. Bởi vì, các đối tượng trong thế giới thực được mô tả bằng tọa độ thực. Trong khi đó, hệ tọa độ thiết bị lại sử dụng hệ tọa độ nguyên để hiển thị các hình ảnh. Đây chính là vấn đề cơ bản cần giải quyết. Ngoài ra, còn có một khó khăn khác là với các thiết bị khác nhau thì có các định nghĩa khác nhau. Do đó, cần có một phương pháp chuyển đổi tương ứng giữa các hệ tọa độ và đối tượng phải được định nghĩa bởi các thành phần đơn giản như thế nào để có thể mô tả gần đúng với hình ảnh thực bên ngoài. a.Hệ tọa độ thực: Một trong những hệ tọa độ thực thường được dùng để mô tả các đối tượng trong thế giới thực là hệ tọa độ Descartes. Với hệ tọa độ này, mỗi điểm P được biểu diễn bằng một cặp tọa độ (xp,yp) với xp, yp ∈R (xem hình 1.1). Hình 2.1 Hệ tọa độ thực . Ox : gọi là trục hoành; Oy : gọi là trục tung. . xp : hoành độ điểm P; yp : tung độ điểm P. b. Hệ tọa độ thiết bị: Hệ tọa độ thiết bị (device coordinates) được dùng cho một thiết bị xuất cụ thể nào đó, ví dụ như máy in, màn hình, Trong hệ tọa độ thiết bị thì các điểm cũng được mô tả bởi cặp tọa độ (x,y). Tuy nhiên, khác với hệ tọa độ thực là x, y ∈ N. Điều này có nghĩa là các điểm trong hệ tọa độ thực được định nghĩa liên tục, còn các điểm trong hệ tọa độ thiết bị là rời rạc. Ngoài ra, các tọa độ x, y của hệ tọa độ thiết bị chỉ biểu diễn được trong một giới hạn nào đó của N. c. Hệ tọa độ thiết bị chuẩn: Do cách định nghĩ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 là chính xác thì chưa chắc hiển thị chính xác trên thíết bị khác. Người ta xây dựng một hệ tọa độ thiết bị chuẩn đại diện chung cho tất cả các thiết bị để có thể mô tả các hình ảnh mà không phụ thuộc vào bất kỳ thiết bị nào. Trong hệ tọa độ chuẩn, các tọa độ x, y sẽ được gán các giá trị trong đoạn từ [0,1]. Như vậy, vùng không gian của hệ tọa độ chuẩn chính là hình vuông đơn vị có góc trái dưới (0, 0) và góc phải trên là (1, 1). 2
  10. 1.2.2 Mô hình màu Màu sắc được sử dụng trong các ứng dụng đồ họa máy tính để giúp người dùng hiểu rõ về đối tượng hình học. Các màn hình đồ họa dựa sử dụng các màu sắc chromatic. Chúng dựa trên lý thuyết về bộ não người là màu sắc ánh sáng được tiếp nhận như sự phối hợp từ 3 màu là đỏ (red), xanh lá cây (green), và xanh dương (blue). Nói chung, màu được mô tả bằng 3 thuộc tính là màu sắc (hue), độ bão hòa (saturation), và độ sáng (brightness); chúng xác định vị trí trong quang phổ màu, độ tinh khiết và cường độ sáng. Có hàng loạt phương pháp được tạo các mô hình màu trong các ứng dụng đồ họa. Trong phần này chỉ đưa ra những mô hình màu tiêu biểu hơn cả, giúp tìm hiểu các ứng dụng đã lựa chọn màu sắc thích hợp như thế nào. a. RGB (Red - Green - Blue): Mô hình màu RGB mô tả màu sắc bằng 3 thành phần chính là Red - Green và Blue. Mô hình này được xem như một khối lập phương 3 chiều với màu red là trục x, màu Green là truc y, và màu Blue là trục z. Mỗi màu trong mô hình này được xác định bởi 3 thành phần R, G, B. Ứng với các tổ hợp khác nhau của 3 màu này sẽ cho ta một màu mới . Trong hình lập phương trên, mỗi màu gốc (R,G,B) có các gốc đối diện là các màu bù với nó. Hai màu được gọi là bù nhau khi kết hợp hai màu này lại với nhau ra màu trắng. Ví dụ : Green - Magenta, Red - Cyan, Blue - Yellow. b. CMY (Cyan - Magenta - Yellow): Tương tự như mô hình màu RGB nhưng 3 thành phần chính là Cyan - Magenta - Yellow. Do đó, tọa độ các màu trong mô hình CMY trái ngược với mô hình RGB. Ví dụ : màu White có các thành phần là (0,0,0), màu Black (1,1,1), màu Cyan (1,0,0), c. HSV (Hue - Saturation - Value ): Thực chất của mô hình này là sự biến đổi của mô hình RGB. Mô hình HSV được mô tả bằng lệnh lập phương RGB quay trên đỉnh Black. H (Hue) là góc quay trục V (value) qua 2 đỉnh Black và White. Các giá trị biến thiên của H, S, V như sau: (Hue) chỉ sắc thái có giá trị từ 00 - 3600 . S (Saturation) chỉ độ bão hoà. V (Value) có giá trị từ 0 - 1. Các màu đạt giá trị bão hòa khi s = 1 và v = 1. 3
  11. CHƢƠNG II CÁC ĐỐI TƢỢNG ĐỒ HỌA CƠ BẢN 2.1 Giới thiệu về các đối tƣợng đồ họa cơ sở Kỹ thuật đồ họa liên quan đến tin học và toán học bởi vì hầu hết các giải thuật vẽ, tô cùng các phép biến hình đều được xây dựng dựa trên nền tảng của hình học không gian hai chiều và ba chiều. Trong chương này, chúng ta giới thiệu các thuật toán vẽ và tô các đường cơ bản như đường thẳng, đa giác, đường tròn, ellipse. Các thuật toán này giúp cho sinh viên hiểu được quá trình vẽ và tô một đối tượng hình học cơ sở như thế nào. 2.1.1 Các đối tượng đồ họa cơ sở - Điểm: điểm là thành phần cơ sở được định nghĩa trong một hệ tọa độ, đối với hệ tọa độ 2 chiều mỗi điểm được xác định bởi hoành độ và tung độ. Ngoài thông tin tọa độ, điểm còn có thông tin màu sắc. - Đoạn thẳng, đường thẳng: đường thẳng xác định qua 2 điểm, đoạn thẳng bị giới hạn bởi 2 điểm đầu và cuối. Phương trình đường thẳng được xác định qua 2 điểm P(x1, y1) và Q(x2, y2) như sau: x x x x 1 2 1 y y1 y 2 y1 Hay ở dạng phương trình đoạn chắn y = mx + b, trong đó: Dx = x2 –x1 , Dy = y2 –y1 , D m y D x Hay ở dạng tổng quát: Ax + By + C = 0 , trong đó: A = y2- y1, B = x1 – x2, C = x2y1 – x1y2 - Đường gấp khúc: là tập các đoạn thẳng nối với nhau một cách tuần tự, các đoạn không nhất thiết phải tạo thành hình khép kín và có thể cắt nhau. Giao của hai đoạn thẳng là đỉnh, đỉnh và đỉnh cuối của đa giác trùng nhau. - Vùng tô: bao gồm đường biên và vùng bên trong, đường biên là đường khép kín như đa giác lồi. - Ký tự, chuỗi ký tự: Ký tự cho phép hiển thị thông tin theo ngôn ngữ nào đó. 2.1.2 Các thuộc tính của các đối tượng đồ họa cơ sở - Điểm có thuốc tính màu sắc. - Đoạn thẳng, đường thẳng có thuộc tính màu sắc, độ rộng, kiểu nét. - Vùng tô có thuộc tính của đường thẳng, và thuộc tính riêng là mầu tô và mẫu tô. - Ký tự có thuộc tính màu sắc, kiểu chữ, cỡ chữ, khoảng cách giữa các ký tự, hướng hiển thị ký tự 2.2 Các thuật toán vẽ điểm, đƣờng 2.2.1 Thuật toán vẽ đường thẳng Xét đoạn thẳng có hệ số góc 0 0. Với các đoạn thẳng dạng này, nếu (xi, yi) là điểm đã được xác định ở bước thứ i thì điểm kế tiếp (xi+1, yi+1) ở bước thứ i+1 sẽ là một trong hai điểm sau: 4
  12. x x i 1 i yi yi yi 1 Vấn đề đặt ra là chọn điểm vẽ như thế nào để đường thẳng được vẽ gần với đường thẳng muốn vẽ nhất và đạt được tối ưu hóa về mặt tốc độ ? Thuật toán DDA Là thuật toán tính toán các điểm vẽ dọc theo đường thẳng dựa vào hệ số góc của phương trình Δ y đường thẳng y = mx+b. Trong đó: m ,Δ y yi 1 yi ,Δ x x i 1 x i Nhận thấy tọa độ của Δ x điểm x sẽ tăng 1 đơn vị trên mỗi điểm vẽ, còn việc quyết định chọn yi +1 là yi +1 hay yi sẽ phụ thuộc vào giá trị sau khi làm tròn của tung độ y. Tuy nhiên, nếu tính trực tiếp giá trị thực của y ở mỗi bước từ phương trình y = mx+b thì cần một phép toán nhân và một phép toán cộng số thực: yi +1 = mxi +1 + b = m(xi + 1) + b = mxi + b + m Để cải thiện tốc độ, người ta khử phép nhân trên số thực. Ta có: yi = mxi + b ⇒ yi +1 = yi + m → int(yi +1) (2-1) Có 2 khả năng: 0 1: xi +1 = xi + 1/m → int(xi+1), yi +1 = yi + 1 Hai trường hợp này dùng để vẽ một điểm bắt đầu từ bên trái đến điểm cuối cùng bên phải của đường thẳng (xem hình 1.1). Nếu điểm bắt đầu từ bên phải đến điểm cuối cùng bên trái thì xét ngược lại : 0 1: xi +1 = xi - 1/m → int(xi+1), yi +1 = yi - 1 Hình 2.1 Dạng đường thẳng tương ứng 2 khả năng của m. Tương tự, có thể tính toán các điểm vẽ cho trường hợp m 1 (sinh viên tự tìm hiểu thêm). 5
  13. Thuật toán Bresenham Hình 2.2 Dạng đường thẳng nếu 0<m<=1 Gọi (xi +1,yi +1) là điểm thuộc đoạn thẳng (xem hình 1.2). Ta có y = m(xi +1) + b Đặt d1 = yi +1 – yi và d2 = (yi +1) - yi +1 Việc chọn điểm (xi +1, yi +1) là P1 hay P2 phụ thuộc vào việc so sánh d1 và d2 Nếu d1- d2<0 : chọn điểm P1, tức là yi +1= yi Nếu d1- d2 ≥0 : chọn điểm P2, tức là yi +1= yi +1 Ta có : d1 – d2 = 2yi+1 – 2yi – 1 = 2m(xi+1) + 2b – 2yi – 1 (2-4) Δy ⇒ Pi = Δx (d1 – d2) = Δx[2m(xi+1) + 2b - 2yi - 1] = x [ 2 (x i 1) 2b 2y i 1 ] Δx = 2Δy(xi+1) - 2Δx.yi + Δx(2b – 1) = 2Δy.xi - 2Δx.yi + 2Δy + Δx(2b - 1) Vậy C = 2Δy + Δx(2b - 1) = Const ⇒ Pi = 2Δy.xi - 2Δx.yi + C (2-5) Nhận xét rằng nếu tại bước thứ i ta xác định được dấu của Pi thì xem như ta xác định được điểm cần chọn ở bước (i+1). Ta có : Pi +1 - Pi = (2Δy.xi+1 - 2Δx.yi+1 + C) - (2Δy.xi - 2Δx.yi + C ) ⇔ Pi +1 = Pi + 2Δy - 2Δx ( yi+1 - yi ) Nếu Pi < 0 : chọn điểm P1, tức là yi +1= yi và Pi +1 = Pi + 2Δy Nếu Pi ≥ 0 : chọn điểm P2, tức là yi +1= yi +1 và Pi +1 = Pi + 2Δy - 2Δx (2-6) Giá trị P0 được tính từ điểm vẽ đầu tiên (xo, yo) theo công thức: Po = 2Δy.xo - 2Δx.yo + C Δy Do (xo ,yo ) là điểm nguyên thuộc về đoạn thẳng nên ta có: y mx b x b o o Δx o 6
  14. Thay yo vào phương trình trên ta được: Po = 2Δy - Δx Nhận xét: Thuật toán Bresenham chỉ thao tác trên số nguyên và chỉ tính toán trên phép cộng và phép nhân 2. Điều này là một cải tiến làm tăng tốc độ đáng kể so với thuật toán DDA. Ý tưởng chính của thuật toán này là ở chổ xét dấu Pi để quyết định điểm kế tiếp, và sử dụng công thức truy hồi Pi +1 - Pi để tính Pi bằng các phép toán đơn giản trên số nguyên. Tuy nhiên, việc xây dựng trường hợp tổng quát cho thuật toán Bresenham có phức tạp hơn thuật toán DDA. 2.2.2 Thuật toán vẽ đƣờng tròn, elip Trong hệ tọa độ Descartes, phương trình đường tròn bán kính R có dạng: 2 2 2 2 2 2 tâm O(0,0) : x + y = R ; tâm C(xc,yc): (x - xc ) + (y - yc ) = R (2-7) x x c Rcosθ Trong hệ tọa độ cực : , θ [0, 2 ] y yc Rsinθ Do tính đối xứng của đường tròn C, nên ta chỉ cần vẽ 1/8 cung tròn, sau đó lấy đối xứng qua 2 trục tọa độ và 2 đường phân giác thì ta vẽ được cả đường tròn. Hình 2.3 Đường tròn với các điểm đối xứng. Thuật toán xét trung điểm Do tính đối xứng của đường tròn nên ta chỉ cần vẽ 1/8 cung tròn, sau đó lấy đối xứng là vẽ được cả đường tròn. Thuật toán trung điểm đưa ra cách chọn yi+1 là yi hay yi-1 bằng cách so sánh điểm Q(xi+1,y) với điểm giữa là trung điểm (Midpoint) của S1 và S2. Chọn điểm bắt đầu để vẽ là (0,R). Giả sử (xi, yi) là điểm nguyên đã tìm được ở bước thứ i (xem hình 1.4), thì điểm (xi+1, yi+1) ở bước i+1 là sự lựa chọn giữa S1 và S2. 7
  15. x x 1 i 1 i yi 1 y i 1 yi Hình 2.4 Đường tròn với điểm Q(xi +1, y) và trung điểm. Đặt F(x,y) = x2 + y2 - R2 , ta có : F(x,y) 0 , nếu điểm (x,y) nằm ngoài đường tròn. Xét Pi = F(MidPoint) = F(xi +1, yi - 1/2). Ta có : Nếu Pi = 0 : điểm MidPoint nằm ngoài đường tròn. Khi đó, điểm Q gần với điểm S2 hơn nên ta chọn yi+1 = yi - 1. Mặt khác : Pi+1 - Pi = F(xi+1 +1, yi+1 - 1/2) - F(xi + 1, yi - 1/2) 2 2 2 2 2 2 = [(xi+1 +1) + (yi+1 - 1/2) - R ] - [(xi +1) + (yi - 1/2) - R ] 2 2 = 2xi + 3 + ((yi+1) - (yi) ) - (yi+1 - yi) Vậy: Nếu Pi = 0 : chọn yi+1 = yi - 1. Khi đó Pi+1 = Pi + 2xi - 2yi +5 Pi ứng với điểm ban đầu (xo , yo) = (0,R) là: Po = F(xo + 1, yo - 1/2) = F(1, R - 1/2) = 5/4 -R Thuật toán Bresenham 8
  16. Tương tự thuật toán vẽ đường thẳng Bresenham, các vị trí ứng với các tọa độ nguyên nằm trên đường tròn có thể tính được bằng cách xác định một trong hai pixel gần nhất với đường tròn hơn trong mỗi bước. Hình 2.5 Đường tròn với khoảng cách d1 và d2. 2 2 2 2 2 2 2 2 2 Ta có: d1 = (yi) - y = (yi) - (R - (xi + 1) ) và d2 = y - (yi - 1) = (R - (xi + 1) ) - (yi - 2 1) 2 2 Đặt Pi = d1 - d2 , do đó Pi+1 = Pi + 4xi + 6 + 2((yi+1) - (yi) ) - 2(yi+1 - yi) Nếu Pi = 0 : chọn yi+1 = yi - 1. Khi đó Pi+1 = Pi + 4(xi - yi ) + 10 Po ứng với điểm ban đầu (xo , yo) = (0,R) là: Po= 3 - 2R. Thuật toán vẽ elip Tương tự thuật toán vẽ đường tròn, sử dụng thuật toán Bresenham để vẽ, ta chỉ cần vẽ 1/4 ellipse, sau đó lấy đối xứng qua các trục tọa độ sẽ vẽ được toàn bộ ellipse. x 2 y2 Xét ellipse có tâm O, các bán kính là a và b, phương trình là: 1 a 2 b2 Chọn tọa độ pixel đầu tiên cần hiển thị là (xi ,yi) = (0,b). Cần xác định pixel tiếp theo là (xi+1 ,yi+1). Ta có : x x 1 i 1 i y y i 2 2 2 2 i 1 ; d1 = (y ) - y ; d2 = y - (y - 1) yi 1 i i 2b 2 P P 2((y )2 (y )2 ) 2(y y ) (2x 3) Đặt Pi = d1- d2, có i 1 i i 1 i i 1 i a 2 i 2b 2 Nếu Pi < 0 : chọn yi+1 = yi, P P ( 2x 3) (2 - 10) i 1 i a 2 i 2b 2 Pi 1 Pi (2x i 3) a 2 9
  17. Nếu Pi >= 0 : chọn yi+1 = yi – 1, Po ứng với điểm ban đầu (xo, yo) = (0, b) là: 2b 2 Po 2 2b 1 2.3 Thuật toán tô màu a Tô màu một vùng là thay đổi màu sắc của các điểm vẽ nằm trong vùng cần tô. Một vùng tô thường đựơc xác định bởi một đường khép kín nào đó gọi là đường biên. Dạng đường biên đơn giản thường gặp là đa giác. Dạng đường biên đơn giản thường gặp là đa giác. Việc tô màu thường chia làm 2 công đoạn : - Xác định vị trí các điểm cần tô màu. - Quyết định tô các điểm trên bằng màu nào. Công đoạn này sẽ trở nên phức tạp khi ta cần tô theo một mẫu tô nào đó chứ không phải tô thuần một màu. Có 3 cách tiếp cận chính để tô màu. Đó là : tô màu theo từng điểm (có thể gọi là tô đơn giản), tô màu theo dòng quét và tô màu dựa theo đường biên. Chúng ta sẽ giới thiệu 2 loại thuật toán tô mầu đơn giản và tô màu đường biên. Thuật toán tô màu theo dòng quét thì sinh viên tự tìm hiểu. 2.3.1 Tô đơn giản Thuật toán này bắt đầu từ việc xác định một điểm có thuộc vùng cần tô hay không ? Nếu đúng là điểm thuộc vùng cần tô thì sẽ tô với màu muốn tô. a. Tô đường tròn Để tô đường tròn thì ta tìm hình vuông nhỏ nhất ngoại tiếp đường tròn bằng cách xác định điểm trên bên trái (xc – r, yc – r) và điểm dưới bên phải (xc + r, yc + r) của hình vuông . Giải thuật giả mã như sau: i chạy từ xc-r đến xc+r j chạy từ yc-r đến yc+r tìm khoảng cách d giữa hai điểm (i,j) và tâm (xc,yc) nếu d<r thì tô điểm (i,j) với màu muốn tô Hình 2.6 đường tròn nội tiếp hình vuông. 10
  18. b.Tô đa giác Trước tiên, chúng ta giải quyết bài toán tìm hình chữ nhật nhỏ nhất có các cạnh song song với hai trục tọa độ chứa đa giác cần tô dưa vào hai tọa độ (xmin, ymin), (xmax, ymax). Hình 2.7 đa giác nội tiếp hình chữ nhật. Trong đó, xmin, ymin là hoành độ và tung độ nhỏ nhất, xmax, ymax là hoành độ và tung độ lớn nhất của các đỉnh của đa giác. Cách tô đa giác là cho x đi từ xmin đến xmax, y đi từ ymin đến ymax (hoặc ngược lại). Xét điểm P(x,y) có thuộc đa giác không ? Nếu có thì tô với màu cần tô. Thông thường một điểm nằm trong đa giác thì số giao điểm từ một tia bất kỳ xuất phát từ điểm đó cắt biên của đa giác phải là một số lẻ lần. Đặc biệt, tại các đỉnh cực trị (cực đại hay cực tiểu ) thì một giao điểm phải được tính 2 lần (xem hình 2.5). Tia có thể qua phải hay qua trái. Thông thường ta chọn tia qua phải. Hình 2.8 Xét đa giác gồm 13 đỉnh là Po , P1 , , P12 , Po Gọi tung độ của đỉnh Pi là Pi.y . Nếu : Pi.y Max ( Pi+1.y, Pi-1.y) thì Pi là đỉnh cực trị ( cực tiểu hay cực đại ). Pi-1.y Pi.y > Pi+1.y thì Pi là đỉnh đơn điệu. Pi = Pi+1 và Pi.y Max ( Pi+2.y, Pi-1.y) thì đoạn [Pi,Pi+1] là đoạn cực trị ( cực tiểu hay cực đại ). Pi = Pi+1 và Pi-1.y Pi.y > Pi+2.y thì đoạn [Pi,Pi+1] là đoạn đơn điệu. Thuật toán kiểm tra điểm có nằm trong đa giác - Với mỗi đỉnh của đa giác ta đánh dấu là 0 hay 1 theo qui ước như sau: nếu là đỉnh cực trị hay đoạn cực trị thì đánh số 0. Nếu là đỉnh đơn điệu hay đoạn đơn điệu thì đánh dấu 1. - Xét số 11
  19. giao điểm của tia nữa đường thẳng từ P là điểm cần xét với biên của đa giác. Nếu số giao điểm là chẳn thì kết luận điểm không thuộc đa giác. Ngược lại, số giao điểm là lẻ thì điểm thuộc đa giác. 2.3.2 Tô màu đường biên Bài toán đặt ra : Cần tô màu một vùng nếu biết được màu của đường biên vùng tô và một điểm nằm bên trong vùng tô. Ý tưởng : Bắt đầu từ một điểm nằm bên trong vùng tô, kiểm tra các điểm lân cận của nó đã được tô với màu muốn tô, hay điểm lân cận có màu trùng với màu biên không ? Nếu cả hai trường hợp đều không phải thì ta sẽ tô điểm đó với màu muốn tô. Quá trình này được lặp lại cho đến khi không còn tô được nữa thì dừng. Có 2 quan điểm về cách tô này. Đó là dùng 4 điểm lân cận (có thể gọi là 4 liên thông) hay 8 điểm lân cận (8 liên thông) Cài đặt minh họa thuật toán 4 liên thông Boundary_fill ( x,y, mauto, maubien :integer); mau_ht : integer; begin mau_ht:= getpixel(x, y); If (mau_ht maubien) then begin putpixel(x,y,color); Boundary_fill ( x+1,y, mauto, maubien ); Boundary_fill ( x-1,y, mauto, maubien ); Boundary_fill ( x,y+1, mauto, maubien ); Boundary_fill ( x,y-1, mauto, maubien ); end; end; Nhận xét : - Thuật toán có thể không chính xác khi có một số điểm nằm trong vùng tô có màu là màu cần tô của vùng. - Việc thực hiện gọi đệ qui làm thuật toán không thể sử dụng cho vùng tô lớn ( tràn stack). - Có thể khắc phục việc tràn stack bằng cách giảm số lần gọi đệ qui. Khởi đầu điểm (x,y) là điểm có vị trí đặc biệt trong vùng tô, sau đó, gọi đệ qui các điểm lân cận của (x,y). 12
  20. 2.4 Bài tập áp dụng Bài 1 Tại sao phải so sánh giá trị Pi với 0 trong các giải thuật Bresenham hay Midpoint. Bản chất của so sánh là gì? Gợi ý: giá trị Pi tạo ra không có phép chia nguyên, tính toán nhanh và chính xác hơn là tính trực tiếp. Bài 2 Cặt đặt các giải thuật Bresenham, MidPoint vẽ đoạn thẳng với hệ số góc trong khoảng [-1, 1], đường tròn. Gợi ý: Vẽ đường thẳng, ta xét 3 trường hợp 0 < m < 1, -1 < m < 0, m= 0. Bài 3 Giải thích tại sao chỉ chọn cung 1/8 để vẽ rồi lấy đối xứng mà không mở rộng cho cung 1/16 hay 1/32. Gợi ý: Nếu cung độ dài nhỏ hơn 1/8 thì giải thuật Midpoint không còn đúng nữa, vì không chính xác. Bài 4 Cài đặt giải thuật vẽ elip có tâm là gốc tọa độ, bán kính trục chính, trục phụ là a, b. Gợi ý: Dựa trên cơ sở giải thuật Midpoint cho vẽ đường tròn, nhưng vẽ cho cung ¼ rồi lấy đối xứng. Bài 5 Cài đặt thuật toán tô màu đường biên cho đối tượng hình tròn. Gợi ý: Sử dụng giả thuật tô mầu đường biên cải tiến, sử dụng giải thuật không đệ quy thì tốt hơn giải thuật đệ quy. 13
  21. CHƢƠNG III CÁC PHÉP BIẾN ĐỔI ĐỒ HỌA 2 CHIỀU 3.1 Các phép biến đổi cơ sở Trong lĩnh vực đồ họa máy tính, hình dạng và kích thước của đối tượng 2 chiều đặc trưng bởi một số 2 chiều quan hệ với hệ thống tọa độ Descartes. Một tập hợp các phép biến đổi hình học áp dụng cho đối tượng như: dịch chuyển, thay đổi kích thước, phương chiều của nó . Các hệ CAD luôn có thao tác như: scale, move, rotate, copy thực hiện những phép biến đổi hình học cơ sở. 3.1.1 Phép tịnh tiến Khả năng tịnh tiến đối tượng là một đặc điểm cần thiết của mọi hệ thống đồ họa. Phép tịnh tiến làm cho đối tượng dịch chuyển theo một hướng với độ dài xác định. Dưới dạng toán học, mô tả với hệ phương trình sau: x' = x + Tx (3-1) y' = y + Ty 3.1.2 Phép biến đổi tỷ lệ Phép biến đổi tỉ lệ làm thay đổi kích thước đối tượng. Để co hay giãn tọa độ của một điểm P(x,y) theo trục hoành và trục tung lần lượt là Sx và Sy (gọi là các hệ số tỉ lệ), ta nhân Sx và Sy lần lượt cho các tọa độ của P. x' = x.Sx (3-2) y' = y.Sy - Khi các giá trị Sx , Sy nhỏ hơn 1, phép biển đổi sẽ thu nhỏ đối tượng. Ngược lại, khi các giá trị này lớn hơn 1, phép biến đổi sẽ phóng lớn đối tượng. - Khi Sx = Sy , người ta gọi đó là phép đồng dạng (uniform scaling). Đây là phép biến đổi bảo toàn tính cân xứng của đối tượng. Ta gọi là phép phóng đại nếu |S|>1 và là phép thu nhỏ nếu |S|<1. - Nếu hai hệ số tỉ lệ khác nhau thì ta gọi là phép không đồng dạng. Trong trường hợp hoặc Sx hoặc Sy có giá trị 1, ta gọi đó là phép căng (strain). 3.1.3 Phép đối xứng Thuật ngữ đối xứng hiểu như hình ảnh trong gương. Phép đối xứng sử dụng trong việc tạo các hình đối xứng. Ví dụ như một nửa hình được tạo ra, sau đó lấy đối xứng để tạo nguyên hình, ví dụ như việc tạo khung đỡ mái nhà. Các ứng dụng như CAD luôn có chỉ thị Mirror thực hiện chức năng trên. Phép đối xứng qua điểm hay qua trục nào đó. Ma trận đối xứng sẽ có dạng chung như sau: a 0 0 [Tr] 0 b 0 (3-3) 0 0 1 14
  22. Các trường hợp khác nhau của đối xứng trục X, Y, Z như sau: 1 0 0 -1 0 0 -1 0 0 [Tr] 0 -1 0 [Tr] 0 1 0 [Tr] 0 -1 0 X y Z 0 0 1 0 0 1 0 0 1 3.1.4 Phép quay Phép quay làm thay đổi hướng của đối tượng. Một phép quay đòi hỏi phải có tâm quay, góc quay. Góc quay dương thường được qui ước là chiếu ngược chiều kim đồng hồ. Ta có công thức biến đổi của phép quay điểm P(x,y) quanh gốc tọa độ góc θ tới vị trí P’(x’, y’): x' = x.cosθ - y.sinθ (3-4) y' = x.sinθ + y.cosθ cosθ sinθ 0 hoặc dưới dạng ma trận sau: x' y' 1 x y 1 sinθ cosθ 0 0 0 1 3.2 Kết hợp các phép biến đổi Những phép biến hình 2 chiều đòi hỏi không chỉ một mà là chuỗi thứ tự các phép biến hình cơ sở để cuối cùng thu được mục tiêu mong muốn. 3.2.1 Kết hợp các phép tịnh tiến Nếu ta thực hiện phép tịnh tiến lên điểm P được điểm P', rồi lại thực hiện tiếp một phép tịnh tiến khác lên P' được điểm Q. Như vậy, điểm Q là ảnh của phép biến đổi kết hợp hai phép tịnh tiến liên tiếp. Qx = Px + ( Tx1 +Tx2 ) Qy = Py + ( Ty1 + Ty2 ) Vậy kết hợp hai phép tịnh tiến là một phép tịnh tiến. Từ đó, ta có kết hợp của nhiều phép tịnh tiến là một phép tịnh tiến. 3.2.2 Kết hợp các phép biến đổi tỉ lệ Tương tự như phép tịnh tiến, ta có tọa độ điểm Q là điểm có được sau hai phép tịnh tiến M1(Sx1, Sy1 ), M2 (Sx2, Sy2 ) là : Qx = Px* Sx1* Sx2 Qy = Py* Sy1* Sy2 15
  23. 3.2.3 Kết hợp các phép quay Tương tự, ta có tọa độ điểm Q là điểm kết quả sau khi kết hợp hai phép quay quanh gốc tọa độ MR1(θ1) và MR2(θ2) là : Qx = Px*cos(θ1+θ2) - Py*sin (θ1+θ2) Qy = Px*sin(θ1+θ2) + Py*cos(θ1+θ2) 3.3 Một số phép biến đổi khác 3.3.1 Phép biến dạng Phép biến dạng làm thay đổi hình dạng đối tượng, biến dạng theo trục hoành hay trục tung bằng cách thay đổi tọa độ điểm ban đầu theo cách sau đây: 1 0 0 1 s y 0 [M] s 1 0 [M] 0 1 0 X x y 0 0 1 0 0 1 Sx và Sy là các hệ số biến dạng theo trục hoành và trục tung. 3.3.2 Phép đối xứng Phép đối xứng xem như phép quay quanh trục đối xứng góc 180o. Nếu trục đối xứng là trục hoành hay trục tung , ta có các ma trận biến đổi đối xứng qua trục hoành và trục tung như sau: 1 0 0 -1 0 0 [M] 0 -1 0 [M] 0 1 0 RFX RFY 0 0 1 0 0 1 3.3.3 Tính chất của phép biến đổi affine Phép biến đổi affine là phép biến đổi tuyến tính, như những biến đổi trên. Sau đây là một vài tích chất cơ bản của phép biến đổi affine: - Phép biến đổi affine bảo toàn đường thẳng. - Tính song song của các đường thẳng được bảo toàn. - Tính tỷ lệ khoảng cách được bảo toàn. 3.4 Phép biến đổi giữa các hệ tọa độ Để thuận tiện cho việc mô tả đối tượng, thông thường đối tượng được mô tả trong hệ tọa độ cục bộ gắn với chúng. Tuy nhiên, muốn hiển thị toàn bộ ảnh bao gồm nhiều đối tượng thành phần, các mô tả phải chuyển về một hệ tọa độ. Quá trình chuyển đổi tọa độ chia thành 2 loại: - Từ hệ tọa độ cực, tọa độ cầu sang hệ tọa độ đề các. - Giữa 2 hệ tọa độ đề các. Trong nội dung trình bày của chương này, ta chỉ xét đối tượng hình học trong không gian tọa độ Đề các, do đó ta khảo sát phép biến đổi giữa 2 hệ tọa độ Đề các. Giả sử ta có hệ tọa độ I có gốc 16
  24. tọa độ O và các véc tơ đơn vị là i, j . Hệ tọa độ II là ảnh của hệ tọa độ I qua phép biến đổi T(M), có gốc tọa độ O’ và các véc tơ đơn vị là tương ứng u, v. Lúc này, một điểm P(x, y) trong hệ tọa độ I sẽ biến đổi thành điểm Q(a, b) trong hệ tọa độ II. Qua chứng minh, tìm được mối liên hệ giữa 2 điểm Q và P: Q = P.M-1 3.5 Bài tập áp dụng Bài 1 Cho biết phép biến đổi hình vuông thành hình chữ nhật? Gợi ý: Sử dụng phép biến đổi tỷ lệ Bài 2 Chứng minh rằng ma trận phép biến đổi lấy đối xứng qua đường thẳng y = x tương đương với kết hợp của phép lấy đối xứng trục hoành và phép quay quanh gốc tọa độ góc 90o . Gợi ý: Tìm ma trận M1 của phép lấy đối xứng qua trục y = x, ma trận M2 của phép đối xứng qua o trục hoành, ma trận M3 của phép quay 90 quanh gốc tọa độ. Chứng minh M1 = M2 M3 Bài 3 Chứng minh phép quay có tính giao hoán. Gợi ý: Giả sử với phép quay quanh gốc tọa độ 1 góc α, ta có được kết quả: MR1(α1) MR2(α2) = MR ( α1 + α2 ) = MR2(α2) MR1(α1) Bài 4 Chứng minh phép biến đổi affine được phân tích thành tích của các phép tịnh tiến, tỷ lệ, quay. Gợi ý: Áp dụng quy tắc phân rã phép biến đổi. Bài 5 Hệ tọa độ x’O’y’ nhận được bằng cách quay quanh gốc tọa độ góc α, rồi tịnh tiến theo véc tơ (trx, try) trong hệ tọa độ xOy. Hãy cho biết công thức tọa độ của điểm Q trong hệ tọa độ x’O’y’ nếu P(x, y) là tọa độ của điểm P trong xOy. Gợi ý: Hệ tọa độ x’O’y’ là ảnh của hệ tọa độ xOy, cần tìm ma trận biến đổi là tích giữa ma trận quay và ma trận tịnh tiến. 17
  25. CHƢƠNG IV PHÉP QUAN SÁT 2 CHIỀU 4.1 Cửa sổ, Vùng quan sát Hệ tọa độ Descartes là dễ thích ứng cho các chương trình ứng dụng để miêu tả các hình ảnh trên hệ tọa độ thực. Các hình ảnh được định nghĩa trên hệ tọa độ thực này sau đó được hệ đồ họa vẽ lên các hệ tọa độ thiết bị. Điển hình, một vùng đồ họa cho phép người sử dụng xác định vùng nào của hình ảnh sẽ được hiển thị và bạn muốn đặt nó ở nơi nào trên hệ tọa độ thiết bị. Một vùng đơn lẻ hoặc vài vùng của hình ảnh có thể được chọn. Những vùng này có thể được đặt ở những vị trí tách biệt, hoặc một vùng có thể được chèn vào một vùng lớn hơn. Quá trình biến đổi này liên quan đến những thao tác như tịnh tiến, biến đổi tỷ lệ vùng được chọn , xóa bỏ vùng không được chọn. Những thao tác trên là Windowing và Clipping. Hình 4.1 ánh xạ cửa sổ - đến – vùng quan sát Một vùng có dạng hình chữ nhật được xác định trong hệ tọa độ thực được gọi là một cửa sổ (window). Còn vùng hình chữ nhật trên thiết bị hiển thị để cửa sổ đó ánh xạ đến được gọi là một vùng quan sát (viewport). Hình 3.1 minh họa việc ánh xạ một phần hình ảnh vào trong một vùng quan sát. Việc ánh xạ này gọi là một phép biến đổi hệ quan sát, biến đổi cửa sổ, biến đổi chuẩn hóa. Các lệnh để xây dựng một cửa sổ và vùng quan sát từ một chương trình ứng dụng có thể được định nghĩa như sau: set_window(xw_min, xw_max, yw_min, yw_max) set_viewport(xv_min, xv_max, yv_min, yv_max) Các tham số trong mỗi hàm được dùng để định nghĩa các giới hạn tọa độ của các vùng chữ nhật. Các giới hạn của cửa sổ được xác định trong hệ tọa độ thực. Hệ tọa độ thiết bị chuẩn thường được dùng nhất cho việc xác định vùng quan sát, dù rằng hệ tọa độ thiết bị có thể được dùng nếu chỉ có một thiết bị xuất duy nhất trong hệ thống. Khi hệ tọa độ thiết bị chuẩn được dùng, lập trình viên xem thiết bị xuất có giá trị tọa độ trong khoảng 0 1. Một sự xác định vùng quan sát được cho với các giá trị trong khoảng này. Các việc xác định sau đây, đặt một phần của sự định nghĩa hệ tọa độ thực vào trong góc trên bên phải của vùng hiển thị, như được minh họa trong hình 3.2: set_window(-60.5, 41.25, -20.75, 82.5); set_viewport(0.5, 0.8, 0.7, 1.0); Nếu một cửa sổ buộc phải được ánh xạ lấp đầy vùng hiển thị, sự xác định vùng quan sát được thiết 18
  26. lập theo thủ tục: set_viewport(0,1, 0, 1) Các vị trí được biểu diễn trên hệ tọa độ thiết bị chuẩn phải được biến đổi sang hệ tọa độ thiết bị trước khi được hiển thị bởi một thiết bị xuất cụ thể. Thông thường một thiết bị xác định được chứa trong các gói đồ họa cho mục đích này. Thuận lợi của việc dùng hệ tọa độ thiết bị chuẩn là để các gói đồ họa độc lập với thiết bị. Các thiết bị xuất khác nhau có thể được dùng nhờ việc cung cấp các trình điều khiển thiết bị thích hợp. Mọi điểm được tham khảo đến trong các gói đồ họa phải được xác định tương ứng trong hệ tọa độ Descartes. Bất kỳ sự định nghĩa hình ảnh nào dùng trong một hệ tọa độ khác, như hệ tọa độ cực, người sử dụng trước tiên phải biến đổi nó sang hệ tọa độ thực. Những hệ tọa độ Descart này sau đó được dùng trong các lệnh cửa sổ để xác định phần nào của hình ảnh muốn được hiển thị. Hình 4.2: Ánh xạ một cửa sổ vào một vùng quan sát trong hệ tọa độ thiết bị chuẩn 4.2 Phép biến đổi từ cửa sổ - đến – vùng quan sát Khi tất cả các điểm, đoạn thẳng, và văn bản vừa bị cắt, chúng được ánh xạ lên vùng vùng quan sát để hiển thị. Phép biến đổi đến vùng quan sát này được thực hiện để các vị trí tọa độ liên hệ được giữ lại. Trong hình, một điểm ở vị trí (xw, yw) trong một cửa sổ được ánh xạ và trong vị trí (xv, yv) trong vùng quan sát. Để duy trì sự sắp đặt liên hệ tương tự trong vùng quan sát như trong cửa sổ, chúng ta cần xác định ánh xạ: x v x vmin x w x wmin yv yvmin yw ywmin , (4-1) x vmax x vmin x w x wmin yvmax yvmin yw ywmin vì vậy: x vmax x vmin x (x x ) x v w wmin vmin x wmax x wmin 19
  27. (4-2) yvmax yvmin y (y y ) y v w wmin vmin ywmax ywmin x vmax x vmin yvmax yvmin Các giá trị tỷ lệ và là hằng số đối với các điểm được ánh xạ và x wmax x wmin ywmax ywmin là hệ số tỷ lệ Sx và Sy theo 2 trục tương ứng. Nếu 2 tỷ lệ khác nhau thì hình vẽ mới trong vùng quan sát bị biến dạng so với hình ban đầu, còn nếu 2 tỷ lệ giống nhau thì hình vẽ mới không biến dạng. 4.3 Phép cắt xén 2 chiều Ánh xạ một vùng cửa sổ vào trong một vùng quan sát, kết quả là chỉ hiển thị những phần trong phạm vi cửa sổ. Mọi thứ bên ngoài cửa sổ sẽ bị loại bỏ. Các thủ tục để loại bỏ các phần hình ảnh nằm bên ngoài biên cửa sổ được xem như các thuật toán cắt xén (clipping algorithms) hoặc đơn giản được gọi là clipping. Việc cài đặt phép biến đổi cửa sổ thường được thực hiện bằng việc cắt khỏi cửa sổ, sau đó ánh xạ phần bên trong cửa sổ vào một vùng quan sát . Như một lựa chọn, một vài gói đồ họa đầu tiên ánh xạ sự định nghĩa trong hệ tọa độ thực vào trong hệ tọa độ thiết bị chuẩn và sau đó cắt khỏi biên vùng quan sát. Trong các các phần thảo luận sau, chúng ta giả thiết rằng việc cắt được thực hiện dựa vào đường biên cửa sổ trong hệ tọa độ thực. Sau khi cắt xong, các điểm bên trong cửa sổ mới được ánh xạ đến vùng quan sát. Việc cắt các điểm khỏi cửa sổ được hiểu đơn giản là chúng ta kiểm tra các giá trị tọa độ để xác định xem chúng có nằm bên trong biên không. Một điểm ở vị trí (x,y) được giữ lại để chuyển đổi sang vùng quan sát nếu nó thỏa các bất phương trình sau: xwmin ≤ x ≤ xwmax, ywmin ≤ y ≤ ywmax (4-3) Nếu điểm nào không thỏa một trong bốn bất phương trình trên, nó bị cắt bỏ. Trong hình dưới đây, điểm P1 được giữ lại, trong khi điểm P2 bị cắt bỏ. Hình 4.3 minh họa các quan hệ có thể có giữa các vị trí đoạn thẳng với biên cửa sổ. Chúng ta kiểm tra một đoạn thẳng xem có bị cắt hay không bằng việc xác định xem hai điểm đầu mút đoạn thẳng là nằm trong hay nằm ngoài cửa sổ. Một đoạn thẳng với cả hai đầu nằm trong cửa sổ thì được giữ lại hết, như đoạn từ P5 đến P6. Một đoạn với một đầu nằm ngoài (P9) và một đầu nằm trong (P10) sẽ bị cắt bớt tại giao điểm với biên cửa sổ (P’9). Các đoạn thẳng có cả hai đầu đều nằm ngoài cửa sổ, có thể rơi vào hai trường hợp: toàn bộ đoạn thẳng đều nằm ngoài hoặc đoạn thẳng cắt hai cạnh cửa sổ. Đoạn từ P3 đến P4 bị cắt bỏ hoàn toàn. Nhưng đoạn từ P7 đến P8 sẽ được giữ lại phần từ P’7 đến P’8. 20
  28. Hình 4.3 Thuật toán cắt xén đường xác định xem đoạn nào toàn bộ nằm trong, đoạn nào bị cắt bỏ hoàn toàn hay bị cắt một phần. Đối với các đoạn bị cắt bỏ một phần, các giao điểm với biên cửa sổ phải được tính. Vì một hình ảnh có thể chứa hàng ngàn đoạn thẳng, việc xử lý clipping nên được thực hiện sao cho có hiệu quả nhất. Trước khi đi tính các giao điểm, một thuật toán nên xác định rõ tất cả các đoạn thẳng được giữ lại hoàn toàn hoặc bị cắt bỏ hoàn toàn. Với những đoạn được xem xét là bị cắt bỏ, việc xác định các giao điểm cho phần được giữ lại nên được thực hiện với sự tính toán ít nhất. 4.3.1 Giải thuật Cohen – Suntherland Một tiếp cận để cắt các đoạn là dựa trên cơ chế đánh mã được phát triển bởi Cohen và Sutherland. Mọi điểm ở hai đầu mút đoạn thẳng trong hình ảnh sẽ được gán một mã nhị phân 4 bit, được gọi là mã vùng, giúp nhận ra vùng tọa độ của một điểm. Các vùng này được xây dựng dựa trên sự xem xét với biên cửa sổ, như ở hình 4.4. Mỗi vị trí bit trong mã vùng được dùng để chỉ ra một trong bốn vị trí tọa độ tương ứng của điểm so với cửa sổ: bên trái, phải, trên đỉnh, dưới đáy. Việc đánh số theo vị trí bit trong mã vùng từ 1 đến 4 cho từ phải sang trái, các vùng tọa độ có thể liên quan với vị trí bit như sau: Bit 1 – trái ; Bit 2 – phải; Bit 3 – dưới; Bit 4 – trên. Giá trị 1 ở bất kỳ vị trí nào chỉ ra rằng điểm ở vị trí tương ứng, ngược lại bit ở vị trí đó là 0. Nếu một điểm nằm trong cửa sổ, mã vị trí là 0000. Một điểm bên dưới và bên trái cửa sổ có mã vùng là 0101 . Các giá trị bit trong mã vùng được xác định bằng cách so sánh giá trị tọa độ (x,y) của điểm đầu mút với biên cửa sổ. Bit 1 đặt lên 1 nếu x < xwmin. Các giá trị của ba bit còn lại được xác định bằng cách so sánh tương tự. Trong các ngôn ngữ lập trình, làm việc trên bit như thế này có thể thực hiện được, các giá trị bit mã vùng có thể được xác định theo các bước sau: (1) Tìm hiệu giữa tọa độ các điểm đầu mút với biên cửa sổ. (2) Dùng bit dấu (kết quả của mỗi hiệu) để đặt giá trị tương ứng trong mã vùng. Bit 1 là bit dấu của x - xwmin; bit 2 là bit dấu của xwmax – x; bit 2 là bit dấu của y - ywmin; và bit 4 là bit dấu của ywmax – y. 21
  29. Khi chúng ta xây dựng xong các mã vùng cho tất cả các điểm đầu mút, chúng ta có thể xác định nhanh chóng đoạn thẳng nào là hoàn toàn nằm trong cửa sổ, đoạn nào là hoàn toàn nằm ngoài. Bất kỳ đoạn nào có mã vùng của cả 2 đầu mút là 0000 thì nằm trong cửa sổ và chúng ta chấp nhận các đường này. Bất kỳ đường nào mà trong hai mã vùng của hai đầu mút có một số 1 ở cùng vị trí bit thì đoạn hoàn toàn nằm ngoài cửa sổ, và chúng ta loại bỏ các đoạn này. Ví dụ, chúng ta vứt bỏ đoạn có mã vùng ở một đầu là 1001, còn đầu kia là 0101 (có cùng bit 1 ở vị trí 1 nên cả hai đầu mút của đoạn này nằm ở phía bên trái cửa sổ). Một phương pháp có thể được dùng để kiểm tra các đoạn cho việc cắt toàn bộ là thực hiện phép logic and với cả hai mã vùng. Nếu kết quả không phải là 0000 thì đoạn nằm bên ngoài cửa sổ. Các đường không được nhận dạng là hoàn toàn nằm trong hay hoàn toàn nằm ngoài một cửa sổ thông qua các phép kiểm tra trên sẽ được tìm giao điểm với biên cửa sổ. Như được chỉ ra ở hình dưới đây, các đường thuộc nhóm này có thể cắt hoặc không cắt cửa sổ. Chúng ta có thể xử lý các đoạn này bằng cách so sánh một điểm đầu mút (cái đang nằm ngoài cửa sổ) với một biên cửa sổ để xác định phần nào của đường sẽ bị bỏ. Sau đó, phần đường được giữ lại sẽ được kiểm tra với các biên khác, và chúng ta tiếp tục cho đến khi toàn bộ đường bị bỏ đi hay đến khi một phần đường được xác định là nằm trong cửa sổ. Chúng ta xây dựng thuật toán để kiểm tra các điểm đầu mút tương tác với biên cửa sổ là ở bên trái, bên phải, bên dưới hay trên đỉnh. Để minh họa các bước xác định trong việc cắt các đoạn khỏi biên cửa sổ dùng thuật toán của Cohen-Sutherland, chúng ta xem các đoạn trong hình được xử lý như thế nào. Bắt đầu ở điểm đầu mút bên dưới từ P1 đến P2, ta kiểm tra P1 với biên trái, phải và đáy cửa sổ và thấy rằng điểm này nằm phía dưới cửa sổ. Ta tìm giao điểm P’1 với biên dưới. Sau khi tìm giao điểm P’1, chúng ta vứt bỏ đoạn từ P1 đến P’1. Giao điểm P’2 được tính, và đoạn từ P’1 đến P’2 được giữ lại. Kết thúc quá trình xử lý đoạn P1P2. Bây giờ xét đoạn kế tiếp, P3P4. Điểm P3 nằm bên trái cửa sổ, vì vậy ta xác định giao điểm P’3 và loại bỏ đoạn từ P’3 đến P3. Bằng cách kiểm tra mã vùng phần đoạn thẳng từ P’3 đến P4, chúng ta thấy rằng phần còn lại này nằm phía dưới cửa sổ và cũng bị vứt bỏ luôn. Các giao điểm với biên cửa sổ có thể được tính bằng cách dùng các tham số của phương trình đường thẳng. Với một đường thẳng đi qua hai điểm (x1, y1) và (x2, y2), tung độ y của giao điểm với một biên dọc cửa sổ có thể tính được theo phép tính: y = y1 + m (x - x1) (4-4) Ở đây giá trị x được đặt là xwmin hoặc xwmax, và độ dốc m được tính bằng là m = (y2 - y1)/ (x2 - x1) Tương tự, nếu ta tìm giao điểm với biên ngang, hoành độ x có thể được tính như sau: x = x1 + (y - y1)/m (4-5) với y là ywmin hoặc ywmax. 4.3.2 Giải thuật chia tại trung điểm Một kỹ thuật để xác định giao điểm với biên cửa sổ mà không dùng đến phương trình đường thẳng là dùng thủ tục tìm kiếm nhị phân, được gọi là sự phân chia tại trung điểm. Đầu tiên, việc kiểm tra các đoạn một lần nửa được thực hiện bằng cách dùng mã vùng. Bất kỳ đoạn nào không được chấp nhận hoàn toàn hoặc không bị huỷ bỏ hoàn toàn (nhờ vào kiểm tra mã vùng) thì sẽ được đi tìm giao điểm bằng cách kiểm tra tọa độ trung điểm. Tiếp cận này được minh họa trong hình dưới đây. Mọi đoạn thẳng với hai điểm đầu mút (x1,y1) và (x2, y2), trung điểm được tính như sau: 22
  30. xm = (x1 + x2) / 2; ym = (y1 + y2) / 2 (4-6) Mỗi kết quả tính toán cho tọa độ giao điểm liên quan đến một phép cộng và một phép chia 2. Khi tọa độ giao điểm được xác định, mỗi nửa đoạn thẳng được kiểm tra để chấp nhận hay huỷ bỏ toàn bộ. Nếu một nửa đoạn được chấp nhận hoặc bị huỷ bỏ, một nửa kia sau đó sẽ được xử lý theo cách tương tự. Điều này tiếp tục cho đến khi gặp một giao điểm. Nếu một nửa được chấp nhận hoặc bị huỷ bỏ toàn bộ, nửa kia tiếp tục được xử lý cho đến khi toàn bộ nó là bị huỷ bỏ hoặc được giữ lại. Cài đặt phần cứng theo phương pháp này có thể giúp ta clipping khỏi biên vùng quan sát nhanh chóng sau khi các đối tượng vừa được chuyển sang hệ tọa độ thiết bị. 4.3.3 Giải thuật Liang – Barsky Giải thuật được dựa trên phân tích phương trình tham số đoạn thẳng: x x1 t(x2 x1) x1 tDx y y 1 t(y 2 y 1 ) y 1 tD y , 0 t 1 (4-7) Ứng với mỗi giá trị t, ta có một điểm P tương ứng thuộc đường thẳng. Tập hợp các điểm thuộc phần giao của đoạn thẳng và cửa sổ thỏa mãn hệ bất phương trình: x x tD x wmin 1 x wmax y y1 tDy y wmin wmax 0 t 1 (4-8) Đặt p1 = -Dx, q1 = x1 - xwmin P2 = Dx, q2 = xwmax - x1 p3 = -Dy, q3 = y1 - ywmin p4 = Dy, q4 = ywmax – y1 Hệ bất pt 4-8 có dạng: p t q k k , k {1,2,3,4} (4-9) 0 t 1 Như thế, tìm đoạn giao thực chất là tìm nghiệm của hệ bất pt 4-9. Có các trường hợp sau: - Nếu  k {1,2,3,4} : pk = 0 và qk 0: ta có t pk pk 23
  31. q t max({ k , p 0 } , 0) Vậy nghiệm của hệ 4-9 là [t1, t2] thỏa mãn: 1 p k k qk t2 min({ , pk 0 } , 1) pk t t 1 2 Nếu hệ 4-9 có nghiệm thì đoạn giao giữa đoạn thẳng và cửa sổ là Q1( x t D , y t D ) 1 1 x 1 1 y và Q2 ( x t D , y t D ) 1 2 x 1 2 y 4.4 Bài tập áp dụng Bài 1 Ý nghĩa mã vùng trong giải thuật Cohen – Sutherland. Gợi ý: mã vùng để mô tả vị trí tương đối của vùng nào đó so với cửa sổ. Bài 2 So sánh hai thuật toán Cohen – Sutherland và Liang – Barsky về số phép tính thực hiện trong các trường hợp chính. Gợi ý: Giải thuật Liang – Barsky thực hiện ít phép toán hơn. Bài 3 Cài đặt thuật toán cắt xén hình chữ nhật với 1 đoạn thẳng cho trước theo giải thuật Liang – Barsky hay Cohen – Sutherland. Gợi ý: Sử dụng giải thuật Liang – Barsky. Bài 4 Cho biết ma trận của phép biến đổi từ cửa sổ sang vùng quan sát. Gợi ý: ma trận biến đổi là tích ba ma trận tịnh tiến, tỷ lệ, tịnh tiến. 24
  32. CHƢƠNG V ĐỒ HỌA 3 CHIỀU 5.1 Tổng quan về đồ họa ba chiều Khi mô hình hóa và hiển thị một đối tượng ba chiều, ta cần mô tả thông tin cho đối tượng. Các công cụ hỗ trợ đồ họa cung cấp một số hàm hiển thị các thành phần bên trong, những nét tiêu biểu hay một phần của đối tượng. Ngoài ra, các phép biến đổi được dùng đa dạng hơn so với đồ họa hai chiều vì phải chọn nhiều tham số mô tả đối tượng. Mô tả một đối tượng ba chiều phải qua quy trình xử lý gồm nhiều công đoạn như phép biến đổi hệ tọa độ quan sát và phép chiếu phối cảnh , chuyển đổi từ hệ tọa độ quan sát ba chiều sang hệ tọa độ quan sát hai chiều. Những phần nhìn thấy trong hệ tọa độ quan sát được chọn, xác định và cuối cùng, giải thuật vẽ bề mặt của đối tượng được áp dụng nhằm tạo ra hình ảnh thực tế của đối tượng ba chiều. 5.1.1 Quy trình hiển thị đồ họa ba chiều Đối tượng được mô tả trong không gian (x, y, z). Có hai dạng mô hình hóa là mô hình thể hiện vật thể (solid) hay bề mặt (boundaries) của đối tượng. Các mô hình được biểu diễn trong hệ tọa độ cục bộ, hệ tọa độ này chỉ định nghĩa cho đối tượng nên gốc tọa độ và đơn vị đo được chọn sao cho phù hợp với đối tượng. Bước đầu tiên trong quy trình hiển thị là biến đổi đối tượng từ không gian đối tượng sang không gian thực. Trong không gian này thì đối tượng, nguồn sáng, người quan sát cùng tồn tại. Quá trình này gọi là biến đổi mô hình. Tiếp theo, ta loại bỏ các phần của đối tượng không nhìn thấy, giúp giảm bớt những thao tác dư thừa của hình ảnh sẽ hiển thị. Bước tiếp theo là phải chiếu sáng đối tượng , gán cho chúng màu sắc dựa vào đặc điểm hình thành vật. Sau khi chiếu sáng, phải thực hiện một phép biến đổi hệ tọa độ đặt vị trí quan sát về gốc tọa độ và mặt phẳng quan sát tại vị trí phù hợp. Các đối tượng được đưa về không gian quan sát. Sau đó, chiếu đối tượng xuống mặt phẳng hai chiều, biến đổi từ không gian quan sát sang không gian thiết bị màn hình. Đối tượng xem như tập hợp các điểm, toàn cảnh đối tượng được hiển thị lên màn hình. 5.1.2 Mô hình hóa đối tượng Một phương pháp thông dụng để mô hình hóa đối tượng là mô hình khung nối kết. Mô hình khung nối kết gồm tập đỉnh và tập cạnh nối các đỉnh. Khi thể hiện mô hình, các đối tượng là rỗng và không giống thực tế. Để hoàn thiện, ta tạo màu sắc, độ bóng bề mặt, loại bỏ các mặt đường không nhìn thấy. Hình dạng của đối tượng ba chiều được biểu diễn trên hai danh sách: danh sách đỉnh và danh sách cạnh. Danh sách đỉnh cho thông tin hình học là vị trí các đỉnh, còn danh sách cạnh xác định thông tin kết nối. Có nhiều cách đặc tả mô hình khung nối kết như dùng mảng, xâu Ở đây, ta biểu diễn mô hình trên theo cấu trúc dữ liệu mảng như sau: typedef struct { float x, y, z; 25
  33. }Point3d; typedef struct { int NumVertext; int NumEdge; Point3d Vert[50]; int Edge[100][2]; }Wireframe; Ngoài ra, đôi khi ta mô tả các mặt phẳng của đối tượng. Mỗi mặt được định nghĩa bởi một đa giác bao. Ví dụ đối tượng hình lập phương có 6 mặt và danh sách đỉnh, cạnh biểu diến mô hình khung nối kết của nó: Danh sách đỉnh Danh sách cạnh Chỉ số x y z Cạnh Đỉnh Đỉnh đầu 1 0 0 0 1 1 2 2 0 0 1 Mặt 2 1 3 3 0 1 0 sau 3 2 3 4 0 1 1 4 1 5 5 1 0 0 Mặt 5 2 6 6 1 0 1 Trước 6 3 4 7 1 1 0 7 3 7 8 1 1 1 8 4 8 9 5 6 10 5 7 11 2 4 12 7 8 5.2 Biểu diễn đối tƣợng ba chiều Các cảnh đồ họa được biểu diễn theo những phương pháp khác nhau sao cho phù hợp với thuộc tính đối tượng. Các mặt đa giác và mặt bậc hai cung cấp cho chúng ta mô tả gần đúng của các đối 26
  34. tượng elip, hyperbol, cách tiếp cận thủ tục như Fractal cho phép ta biểu diễn chính xác các đối tượng tự nhiên như bầu trời, không gian thực tế. Sơ đồ biểu diễn một đối tượng chia thành 2 dạng chính: Phương pháp biểu diễn bề mặt B – reps và phương pháp biểu diễn theo phân hoạch không gian. 5.2.1 Biểu diễn mặt đa giác Mô hình hóa bề mặt đối tượng thường được biểu diễn đối tượng, thông qua tập hợp các mặt đa giác xác định bề mặt đối tượng. Với cách biểu diễn trên, ta đơn giản hóa cách lưu trữ dữ liệu và tăng tốc độ hiển thị đối tượng vì bề mặt được mô tả bằng phương trình tuyến tính. Vì nguyên nhân trên mà mô tả các đối tượng thông qua mặt đa giác được dùng cho các đối tượng đồ họa cơ sở. Trong một vài trường hợp, ta chỉ có thể chọn lựa cách biểu diễn đa giác, việc biểu diễn như thế cung cấp một định nghĩa chính xác về đặc tính của đối tượng. Ví dụ như biểu diễn một hình trụ thì xem như hình trụ là tập các mặt đa giác ghép liền. Nếu cần thể hiện hình trụ thực hơn thì phải biến đổi tạo bóng nội suy cho hình trụ. Hình 5.1 Mô hình biều diễn hình trụ thông qua mặt đa giác. 5.2.2 Đường cong và mặt cong , đường cong và mặt cong Bezier, B-Spline Hình ảnh các đường cong và mặt cong có thể được tạo ra từ một tập các hàm toán học định nghĩa các đối tượng hoặc tập các điểm trên đối tượng. Đối với các đối tượng hình học như hình tròn hay elip thì thư viện đồ họa đã cung cấp sẵn hàm vẽ đối tượng lên mặt phẳng hiển thị. Hình biểu diễn đường cong là tập các điểm dọc theo hình chiếu của đường mô tả bởi hàm số. Nhưng với các đường cong hay mặt cong không có quy luật, thì tập điểm hay lưới đa giác xấp xỉ với đường mặt cong sẽ tạo ra. Hệ đồ họa hay tạo các lưới tam giác để đảm bảo tính đồng phẳng của các cạnh. Một đường cong hay mặt cong có thể diễn tả bằng phương trình tham số hay không có tham số, tuy nhiên cách biểu diễn thứ nhất được áp dụng trong các bài toán đồ họa sẽ thuận tiện hơn cách kia. Những đối tượng hình học như hình tròn, elip hình trụ, hình nón, hay hình cầu được xem là những đường và mặt cong xác định được phương trình tham số chính xác cho nó. Do đó, mọi hệ đồ họa đều hỗ trợ trực tiếp biểu diễn các đối tượng hình học trên. Tuy nhiên, trong thực tế, có những đối tượng hình học không có quy luật chính xác để mô tả những đối tượng như mặt cong của thanh chắn va đập của xe ô tô, hình thân tàu thủy, tay cầm tách chén cafe Ngoài ra, cũng không thể mô tả đối tượng hình học thông qua phép nội suy. Yêu cầu đặt ra là: Có một đường cong, xác định theo tập các điểm phân biệt p1, p2, pk . Hãy tìm ra giải thuật tạo đường cong ban đầu với độ chính xác nào đó? Có 2 cách giải quyết: 27
  35. - Thứ nhất, định vị tọa độ các điểm đã biết thuộc đường cong, tìm ra phương trình tham số để nó đi qua các điểm đó và trùng khớp hình dáng với đường cong ban đầu. - Thứ hai, xác định một số điểm điều khiển, và tìm giải thuật tạo đường cong dựa trên các điểm đó. Ta phải thay đổi vị trí điểm điều khiển cho tới khi đường cong mới có hình dáng giống như hình dáng đường cong ban đầu thì xem như giải quyết xong. Trong phần này, chúng ta sẽ giới thiệu phương trình đường cong Bezier và B – Spline, chúng dựa trên cách giải quyết thứ hai. Đường cong Bezier: đường cong dựa trên L+1 điểm điều khiển p0, p1, pL được biểu diễn qua công thức sau đây: L L (5-1) P(t) Pk Bk (t) k 0 L L k L k k Bk (t) là đa thức Berntein được xác định theo: Bk (t) C (1 t) t (5-2) L L k L C là tổ hợp chọn k từ L. Từ công thức 5-2, dẫn đến Bk (t) 1 L k 0 Đường cong phức tạp thì yêu cầu số lượng điểm điều khiển nhiều, tuy nhiên trong trường hợp đó khiến bậc đa thức càng cao, đòi hỏi tính toán dài và khó. Cách khắc phục là đường cong phức tạp vẫn được ghép từ những đoạn khác nhau, mỗi đoạn xấp xỉ theo một đường cong Bezier bậc nhỏ hơn. Việc tạo các đường cong phức tạp, bằng cách ghép các đoạn ngắn cũng cho phép kiểm soát sự thay đổi một phần đường cong, trong khi các đoạn khác thuộc tập điểm điều khiển khác nên không bị ảnh hưởng. Đường cong B – Spline: đường cong cấp m dựa trên véc tơ nút T và L+1 điểm kiểm soát pk có dạng: L (5-3) P(t) Pk N (t) k 0 k, m Trong đó N (t) là đa thức bậc m-1 như sau k, m t - t t t N (t) ( k )N (t) ( k m )N (t) (5-4) k, m t t k, m 1 t t k 1, m 1 k m - 1 k k m k 1 k = 0,1, ,L; N (t) = 1 nếu tk ≤ t < tk+1 ; = 0 trong các trường hợp khác. k,1 Các khoảng cách [ti, ti+1] có thể chia đều nhau hoặc theo định nghĩa khác. Mặt cong Bezier: Xét đường cong Bezier như hàm theo tham số v và các điểm kiểm soát theo tham số u. Công thức cho đường cong sẽ là: L L P(u, v) Pk (u)Bk (v) k 0 Lúc này, khi u thay đổi kéo theo các điểm kiểm soát thay đổi dẫn tới đường cong thay đổi. Sự biến thiên của đường cong Bezier trong không gian tạo ra mặt cong. Nếu u thay đổi, các điểm 28
  36. kiểm soát cũng thay đổi trên một đường cong nào đó xem như đường cong Bezier, dựa trên M+1 điểm kiểm soát. M L M L Phương trình mặt cong Bezier là: P(u, v)   P i, k B i (u) B k (v) (5-5) i 0k 0 Mặt cong B – Spline: Cũng dựa trên phân tích trên, ta có phương trình mặt cong B – Spline là: M L P(u, v)  Pi, k N (u)N (v) (5-6) i 0k 0 i, m k, m Một vấn đề nảy sinh khi tạo các đường, mặt cong Bezier hay B – Spline là nếu đường, mặt cong phức tạp thì làm cách nào để đường cong liên tục tại các điểm điều khiển nối, hay các mảnh ghép tạo mặt cong được trơn tru tại các đường biên. Nguyên nhân là do mỗi phần đường cong, mỗi mảnh ghép mặt cong được kiểm soát bằng tập điểm khác nhau. Dựa vào đặc điểm liên tục bậc nhất, bậc hai, của các điểm nối sẽ khiến đường cong, mặt cong được liên tục và trơn tru tại các biên. 5.3 Các phép biến đổi hình học 3 chiều Các điểm trong không gian ba chiều được biểu diễn bằng hệ trục tọa độ ba chiều, có thể xem là mở rộng của hệ trục tọa độ hai chiều. Trong thế giới hai chiều, mặt phẳng xy chứa toàn bộ đối tượng. Trong thế giới ba chiều, một trục z vuông góc được đưa ra để tạo thêm hai mặt phẳng chính khác là xz và yz. Chiều của các trục tọa độ trong hệ trục tọa độ ba chiều có thể tuân theo quy tắc bàn tay phải hay quy tắc bàn tay trái. Hệ trục tọa độ tuân theo quy tắc bàn tay phải được mô tả bằng bàn tay phải, với ngón tay cái hướng theo trục z, các ngón tay còn lại xoắn theo chiều từ trục x dương sang trục y dương. Hệ trục tọa độ tuân theo quy tắc bàn tay trái được mô tả bằng bàn tay trái, nếu đặt bàn tay trái sao cho các ngón tay uốn cong theo chiều từ trục x dương tới trục y dương, thì ngón tay cái sẽ chỉ theo chiều trục z dương. Hình 5.2 Các hệ trục tọa độ Hệ trục tọa độ theo quy tắc bàn tay phải Hệ trục tọa độ theo quy tắc bàn tay trái Hệ tọa độ thuần nhất: Mỗi điểm (x,y,z) trong không gian Descartes được biểu diễn bởi một bộ bốn tọa độ trong không gian 4 chiều thu gọn (hx,hy,hz,h). Người ta thường chọn h=1. Các phép biến đổi tuyến tính là tổ hợp của các phép biến đổi sau : tỉ lệ, quay, biến dạng và đối xứng. Các phép biến đổi tuyến tính có các tính chất sau: 29
  37. - Gốc tọa độ là điểm bất động - Ảnh của đường thẳng là đường thẳng - Ảnh của các đường thẳng song song là các đường thẳng song song - Bảo toàn tỉ lệ khoảng cách - Tổ hợp các phép biến đổi có tính phân phối. 5.3.1 Phép biến đổi tỷ lệ Phép biến đổi tỷ lệ tạo thành bằng cách gán các giá trị cho đường chéo chính của ma trận biến hình tổng quát 4×4 . Một điểm P(x, y, z) được biến đổi tỷ lệ thành P(x’, y’, z’) bằng phép biến đổi sau: A 0 0 0 0 E 0 0 x' y' z' 1 x y z 1 (5-1) 0 0 1 0 0 0 0 1 Phép biến đổi được coi là phép tỷ lệ theo gốc tọa độ. Nếu các hệ số A, E khác nhau thì hình ảnh của đối tượng sẽ biến dạng. Ngược lại, thì kích thước đối tượng có thể thay đổi nhưng tỷ lệ với gốc tọa độ vẫn giữ nguyên. 5.3.2 Phép biến dạng Phép biến dạng ba chiều tạo ra sự biến dạng cho đối tượng bởi việc thay giá trị của một hoặc nhiều tọa độ bằng các hệ số tỷ lệ của cột thứ ba. Cách thực hiện trên là biến dạng theo mặt phẳng tạo ra bởi hai trục tọa độ được điều khiển bởi trục thứ ba. Các thành phần ngoài đường chéo chính của ma trận con 3×3 phía trên của ma trận biến hình tổng quát ảnh hưởng đến phép biến dạng. 1 Sxy Sxz 0 0 1 0 0 Ma trận biến dạng theo trục X: (5-2) 0 0 1 0 0 0 0 1 1 0 0 0 Syx 1 Syz 0 Ma trận biến dạng theo trục Y: (5-3) 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 Ma trận biến dạng theo trục Z: (5-4) Szx Szy 1 0 0 0 0 1 30
  38. 5.3.3 Phép tịnh tiến Ma trận biến đổi hình sẽ thay đổi điểm P(x, y, z) thành P(x’, y’, z’) bằng phép biến đổi sau: 1 0 0 0 0 1 0 0 x' y' z' 1 x y z 1 (5-5) 0 0 1 0 J K L 1 Các giá trị J, K, L mô tả sự tịnh tiến tương đối theo các hướng x, y, z. 5.3.4 Phép quay hình Phép quay trong không gian là quan trọng để tìm hiểu hình dạng của đối tượng hoặc kiểm tra quá trình thiết kế ở các góc độ khác nhau. So với phép quay hai chiều, phép quay ba chiều khó hơn vì phải sử dụng trục quay thay thế điểm quay. Các phép quay được phân tích dựa vào các phép quay quanh các trục chính, trong trường hợp này xem hệ trục tọa độ theo quy tắc bàn tay phải. 1 0 0 0 0 cosθ sinθ 0 Ma trận quay quanh trục X: [Tr]θ (5-6) X 0 sinθ cosθ 0 0 0 0 1 cosθ 0 sinθ 0 0 1 0 0 Ma trận quay quanh trục Y: [Tr]θ (5-7) Y sinθ 0 cosθ 0 0 0 0 1 cosθ sinθ 0 0 - sinθ cosθ 0 0 Ma trận quay quanh trục Z: [Tr]θ (5-8) Z 0 0 1 0 0 0 0 1 Đối với phép quay trong hệ trục tọa độ theo quy tắc bàn tay trái, chỉ cần thay đổi hệ số góc quay θ thành – θ là xong. 5.4 Bài tập áp dụng Bài 1 Các kiến thức mô tả trong chương xét trong hệ tọa độ Đề các bàn tay trái hay bàn tay phải. Gợi ý: quy tắc bàn tay phải. Bài 2 Xác định ma trận của phép đối xứng qua trục X, Y, Z. Gợi ý: phép đối xứng qua trục X, Y, Z : tọa độ tương ứng với trục nào thì lấy đảo dấu. 31
  39. Bài 3 Xác định điểm Q là ảnh của điểm P cho trước phép biến dạng theo trục tung, với các hệ số biến dạng là 2. Gợi ý: tọa độ điểm Q xác định từ phép nhân véc tơ tọa độ P với ma trận biến dạng. o Bài 4 Xác định ma trận của phép quay góc 90 quanh trục, đi qua 2 điểm Po(0, 0) P1 ( 10, -10) Gợi ý: Ma trận biến đổi là chuỗi các biến đổi: quay quanh X Mrot (X, α), quay quanh trục Y Mrot o (Y, - β) , quay quanh trục Z Mrot (Z, 90 ), quay quanh trục Y Mrot (Y, β), quay quanh X Mrot (X, -α) . 32
  40. CHƢƠNG VI QUAN SÁT 3 CHIỀU 6.1 Các phép chiếu Trong đồ họa hai chiều, các thao tác quan sát biến đổi các điểm hai chiều trong mặt phẳng tọa độ thực thành các điểm hai chiều trong mặt phẳng hệ tọa độ thiết bị. Sự định nghĩa đối tượng, bị cắt bởi một cửa sổ, được ánh xạ vào một vùng quan sát. Các hệ tọa độ thiết bị chuẩn hóa này sau đó được biến đổi sang các hệ tọa độ thiết bị, và đối tượng được hiển thị lên thiết bị kết xuất. Đối với đồ họa ba chiều, việc làm này phức tạp hơn một chút, vì bây giờ có vài chọn lựa để có thể quan sát ảnh như thế nào. Chúng ta có thể quan sát ảnh từ phía trước, từ phía trên, hoặc từ phía sau. Hoặc chúng ta có thể tạo ra quang cảnh về những gì chúng ta có thể thấy nếu chúng ta đang đứng ở trung tâm của một nhóm các đối tượng. Ngoài ra, sự mô tả các đối tượng ba chiều phải được chiếu lên bề mặt quan sát của thiết bị xuất. Trong chương này, trước hết chúng ta sẽ thảo luận các cơ chế của phép chiếu. Sau đó, các thao tác liên quan đến phép biến đổi cách quan sát, và đầy đủ các kỹ thuật quan sát ảnh ba chiều sẽ được phát triển. Có hai phương pháp cơ bản để chiếu các đối tượng ba chiều lên bề mặt quan sát hai chiều. Tất cả các điểm của đối tượng có thể được chiếu lên bề mặt theo các đường thẳng song song, hoặc các điểm có thể được chiếu theo các đường hội tụ về một điểm được gọi là tâm chiếu. Hai phương pháp này được gọi là phép chiếu song song và phép chiếu phối cảnh. Hình 6.1 Hai phương pháp chiếu một đoạn thẳng lên bề mặt của mặt phẳng chiếu Trong cả hai trường hợp, giao điểm của đường chiếu với bề mặt quan sát xác định các tọa điểm của điểm được chiếu lên mặt phẳng chiếu này. Hình 6.2 Một bề mặt quan sát được định nghĩa trong mặt z=0 của hệ tọa độ bàn tay trái. Chúng ta giả sử rằng mặt phẳng chiếu là mặt z = 0 của hệ tọa độ bàn tay trái. Phép chiếu song song bảo tồn mối quan hệ về chiều của các đối tượng, và đây là kỹ thuật được dùng trong việc phác thảo để tạo ra các bức vẽ tỷ lệ của các đối tượng ba chiều. Phương pháp này được dùng để thu các hình 33
  41. ảnh chính xác ở các phía khác nhau của một đối tượng. Tuy nhiên, phép chiếu song song không cho một hình ảnh thực tế của các đối tượng ba chiều. Ngược lại, phép chiếu phối cảnh tạo ra các hình ảnh thực nhưng không bảo tồn các chiều liên hệ. Các đường ở xa được chiếu sẽ nhỏ hơn các đường ở gần mặt phẳng chiếu, như trong hình Hình 6.3 Hai đoạn thẳng dài bằng nhau, trong phép chiếu phối cảnh, đoạn nào ở xa mặt phẳng chiếu hơn sẽ có kích thước nhỏ Hai đoạn thẳng dài bằng nhau, trong phép chiếu phối cảnh, đoạn nào ở xa mặt phẳng chiếu hơn sẽ có kích thước nhỏ. 6.1.1 Phép chiếu song song Các hình ảnh được hình thành bằng phép chiếu song song có thể được xác định dựa vào góc hợp bởi hướng của phép chiếu hợp với mặt phẳng chiếu. Khi hướng của phép chiếu vuông góc với mặt phẳng, ta có phép chiếu trực giao (hay phép chiếu vuông góc - orthographic projection). Một phép chiếu có thể không vuông góc với mặt phẳng chiếu được gọi là phép chiếu xiên. Hình 6.4 Phép chiếu cùng kích thước của một đối tượng lên bề mặt quan sát Các phép chiếu trực giao đa số được dùng để tạo ra quang cảnh nhìn từ phía trước, bên sườn, và trên đỉnh của đối tượng. Quang cảnh phía trước, bên sườn, và phía sau của đối tượng được gọi là “mặt chiếu”, và quang cảnh phía trên được gọi là “mặt phẳng” . Các bản vẽ trong kỹ thuật thường dùng các phép chiếu trực giao này, vì các chiều dài và góc miêu tả chính xác và có thể đo được từ bản vẽ. Chúng ta cũng có thể xây dựng các phép chiếu trực giao để có thể quan sát nhiều hơn một mặt của một đối tượng. Các quang cảnh như thế được gọi là các phép chiếu trực giao trục lượng học. Hầu hết phép chiếu trục lượng học được dùng là phép chiếu cùng kích thước. Một phép chiếu cùng kích thước được thực hiện bằng việc sắp xếp 34
  42. song song mặt phẳng chiếu mà nó cắt mỗi trục tọa độ ở nơi đối tượng được định nghĩa (được gọi là các trục chính) ở các khoảng cách như nhau từ ảnh gốc. Hình trình bày phép chiếu cùng kích thước. Có tám vị trí, một trong tám mặt, đều có kích thước bằng nhau. Tất cả ba trục chính được vẽ thu gọn bằng nhau trong phép chiếu cùng kích thước để kích thước liên hệ của các đối tượng được bảo tồn. Đây không là trường hợp phép chiếu trực giao trục lượng học tổng quát, khi mà các hệ số tỷ lệ theo ba trục chính có thể khác nhau. Hình 6.5 Ba phép chiếu trực giao của một đối tượng. Các phương trình biến đổi để thực hiện một phép chiếu song song trực giao thì dễ hiểu. Đối với điểm bất kỳ (x, y, z), điểm chiếu (xp, yp, xp) trên bề mặt chiếu được tính như sau: xp = x, yp = y, zp = 0 (6-1) Một phép chiếu xiên đạt được bằng việc chiếu các điểm theo các đường thẳng song song, các đường thẳng này không vuông góc với mặt phẳng chiếu. Hình 5.6 trình bày hình chiếu xiên của điểm (x, y, z) theo một đường thẳng chiếu đến vị trí (xp, yp). Các tọa độ chiếu trực giao trên 35
  43. mặt phẳng chiếu là (x, y). Đường thẳng của phép chiếu xiên tạo một góc α với đường thẳng trên mặt phẳng chiếu (đây là đường nối điểm (xp, yp) với điểm (x, y)). Đường này, có chiều dài L, hợp một góc φ với phương ngang trên mặt phẳng chiếu. Chúng ta có thể diễn tả các tọa độ chiếu qua các số hạng x, y, L, và φ: xp = x + L cosφ (6-2) yp = y + L sinφ Hình 6.6 Phép chiếu vuông góc của điểm (x, y, z) thành điểm (xp, yp) lên mặt phẳng chiếu Phương chiếu có thể định nghĩa bằng việc chọn các giá trị cho góc α và φ. Các chọn lựa thông thường cho góc φ là 30o và 45o, là các góc hiển thị một quang cảnh của mặt trước, bên sườn, và trên đỉnh (hoặc mặt trước, bên sườn, và dưới đáy) của một đối tượng. Chiều dài L là một hàm của tọa dộ z, và chúng ta có thể tính tham số này từ các thành phần liên quan. z 1 tanα , ở đây L1 là chiều dài của các đường chiếu từ (x, y) đến (xp, yp) khi z = 1. Từ L L1 phương trình , thu được L = z L1 và các phương trình của phép chiếu xiên 6.2 có thể được viết lại như sau xp = x + z(L1 cosφ) (6-3) yp = y + z(L1 sinφ) Ma trận biến đổi để tạo ra bất kỳ việc chiếu song song có thể được viết như sau: 1 0 0 0 0 1 0 0 [M] (6-4) P L cosφ L sinφ 0 0 1 1 0 0 0 1 o Một phép chiếu trực giao có thể đạt được khi L1 = 0 (xảy ra ở góc chiếu α=90 ).Các phép chiếu xiên được sinh ra với giá trị L1 khác không. Ma trận chiếu 5.4 có cấu trúc tương tự ma trận của phép làm biến dạng theo trục z. Thực tế, kết quả của ma trận chiếu này là làm biến dạng mặt phẳng của hằng z và chiếu chúng lên mặt phẳng quan sát. Các giá trị tọa độ x và y trong mỗi mặt của hằng z bị thay đổi bởi một hệ số tỷ lệ đến giá trị z của mặt phẳng để các góc, các khoảng cách, và các đường song song trong mặt phẳng được chiếu chính xác. 36
  44. 6.1.2 Phép chiếu phối cảnh Để đạt được phép chiếu phối cảnh của đối tượng ba chiều, chúng ta chiếu các điểm theo đường thẳng chiếu để các đường này gặp nhau ở tâm chiếu. Trong dưới đây, tâm chiếu trên trục z và có giá trị âm, cách một khoảng d phía sau mặt phẳng chiếu. Bất kỳ điểm nào cũng có thể được chọn làm tâm của phép chiếu, tuy nhiên việc chọn một điểm dọc theo trục z sẽ làm đơn giản việc tính toán trong các phương trình biến đổi. Hình 6.7 Phép chiếu phối cảnh của điểm P ở tọa độ (x, y, z) thành điểm (xp, yp, 0) trên mặt phẳng chiếu. Chúng ta có thể đạt được các phương trình biến đổi cho phép chiếu phối cảnh từ các phương trình tham số mô tả các đường chiếu từ điểm P đến tâm chiếu. Các tham số xây dựng các đường chiếu này là x’ = x – xu y’ = y – yu (6-5) z’ = z - (z + d)u Tham số u lấy giá trị từ 0 đến 1, và các tọa độ (x’, y’, z’) thể hiện cho bất kỳ điểm nào dọc theo đường thẳng chiếu. Khi u = 0, điểm P ở tọa độ (x, y, z). Ở đầu mút kia của đường thẳng u =1, và chúng ta có các tọa độ của tâm chiếu, (0, 0, d). Để thu được các tọa độ trên mặt phẳng chiếu, chúng ta đặt z’ = 0 và tìm ra tham số u: z u (6-6) z d Giá trị của tham số u tạo ra giao điểm của đường chiếu với mặt phẳng chiếu tại (x’, y’, 0). Thế phương trình 5.6 vào phương trình 5.5, ta thu được các phương trình biến đổi của phép chiếu phối cảnh. d 1 d 1 x' x x ; y' y y ; z' 0 (6-7) z d z/d 1 z d z/d 1 Dùng biểu diễn hệ tọa độ thuần nhất ba chiều, chúng ta có thể viết phép biến đổi phối cảnh theo hình thức ma trận: 37
  45. 1 0 0 0 0 1 0 0 x y z w  x y z 1 (6-8) h h h 0 0 0 1/d 0 0 0 1 z Trong biểu diễn trên, w 1, và các tọa độ chiếu trên mặt phẳng chiếu được tính từ các tọa độ d thuần nhất như sau: [x’ y’ z’ 1] = [xh/w yh/w zh/w 1] 6.2 Điểm tụ Khi các đối tượng ba chiều đựợc chiếu lên một mặt phẳng dùng các phương trình biến đổi phối cảnh, bất kỳ tập hợp các đường thẳng song song nào của đối tượng mà không song song với mặt phẳng chiếu được chiếu thành các đường hội tụ (đồng quy). Các đường thẳng song song với mặt phẳng khi chiếu sẽ tạo ra các đường song song. Điểm mà tại đó tập hợp các đường thẳng song song được chiếu xuất hiện hội tụ về đó được gọi là điểm tụ. Mỗi tập hợp các đường thẳng song song được chiếu như thế sẽ có một điểm tụ riêng . Hình 6.8 Các quang cảnh phối cảnh của một hình lập phương. Điểm tụ cho bất kỳ tập các đường thẳng, tức các đường song song với một trong các trục tọa độ thực được nói đến như một điểm tụ chính. Chúng ta quản lý số lượng các điểm tụ chính (một, hai, hoặc ba) với hướng của mặt phẳng chiếu, và các phép chiếu phối cảnh được phân loại dựa vào đó để có các phép chiếu: một-điểm, hai-điểm, hoặc ba-điểm. Số lượng các điểm tụ chính trong một phép chiếu được xác định bởi số lượng các trục của hệ tọa độ thực cắt mặt phẳng chiếu. Hình trên minh họa hình ảnh của các phép chiếu phối cảnh một-điểm và hai-điểm của hình lập phương. 38
  46. Trong hình 6.8(b), mặt phẳng chiếu có phương song song với mặt xy để chỉ có trục z bị cắt. Phương này tạo ra phép chiếu phối cảnh một-điểm với một điểm tụ trên trục z. Với quang cảnh trong hình 6.8(c), mặt phẳng chiếu cắt cả hai trục x và z nhưng không cắt trục y. Kết quả, phép chiếu phối cảnh hai-điểm này chứa cả hai điểm tụ: trên trục x và trên trục z. 6.3 Loại bỏ mặt khuất Một vấn đề cần được quan tâm đến trong việc tạo ra các hình ảnh thực là sự xác định và xóa bỏ các phần của đối tượng hình học mà ta không nhìn thấy được từ một vị trí quan sát. Có nhiều tiếp cận chúng ta cần để giải quyết vấn đề này, và cũng có nhiều thuật toán khác nhau đã và đang được phát triển để xóa bỏ các phần bị che khuất một cách hiệu quả cho những loại ứng dụng khác nhau. Có phương pháp tốn bộ nhớ, một số khác cần nhiều thời gian xử lý hay chỉ áp dụng được cho những kiểu đối tượng đặc biệt. Các thuật toán về đường khuất và mặt khuất dựa vào xử lý trực tiếp định nghĩa đối tượng hay xử lý hình chiếu của các đối tượng đó. Hai tiếp cận này được gọi là các phương pháp không gian đối tượng và các phương pháp không gian ảnh. Phương pháp không gian đối tượng xác định các thành phần của đối tượng được nhìn thấy bằng cách sử dụng các quan hệ hình học và không gian. Nó thực hiện với độ chính xác từ dữ liệu mô tả đối tượng. Trong thuật toán không gian ảnh, tính chất nhìn thấy được của một điểm được quyết định bởi điểm ở vị trí pixel trên mặt phẳng chiếu. Hầu hết các thuật toán khử mặt khuất dùng phương pháp không gian ảnh, tuy nhiên các phương pháp không gian đối tượng vẫn có thể được dùng một cách hiệu quả cho một số trường hợp. Các thuật toán khử đường khuất hầu hết dùng phương pháp không gian đối tượng, dù rằng nhiều thuật toán khử mặt khuất không gian ảnh có thể dễ dàng được chỉnh sửa cho việc khử đường khuất. Trong chương này, chúng ta khảo sát một vài trong số các phương pháp phổ biến để xóa bỏ các đường khuất và mặt khuất. 6.3.1 Phương pháp mặt sau Một phương pháp không gian đối tượng đơn giản là phương pháp mặt sau, dựa vào các phương trình mặt phẳng: Ax + By + Cz + D = 0 (6-9) Bất kỳ điểm (x’, y’, z’) trên hệ tọa độ bàn tay trái sẽ ở “phía trong” mặt này nếu nó thỏa bất phương trình: Ax’ + By’ + Cz’ + D < 0 (6-10) Nếu điểm (x’, y’, z’) là vị trí quan sát, khi đó bất kỳ mặt phẳng nào làm cho bất phương trình 6-10 đúng phải là một mặt ở đằng sau. Tức là, nó là mặt ta không thể nhìn thấy từ vị trí quan sát. Hình 6.9 Một mặt phẳng với tham số C < 0 trong hệ quan 39
  47. sát bàn tay phải được xác định như mặt ở đằng sau khi hướng quan sát cùng chiều với trục z âm. Chúng ta có thể thực hiện một cách kiểm tra mặt đằng sau đơn giản hơn bằng cách nhìn ở vector pháp tuyến của mặt có phương trình 7-1, vector này có tọa độ Descartes (A, B, C). Trong hệ tọa độ bàn tay phải với hướng quan sát cùng chiều với trục z âm (xem hình 6.9), vector có tham số C song song với hướng quan sát. Nếu C 0 khi hướng quan sát cùng hướng với trục z dương. Trong tất cả các thảo luận sau này trong chương, chúng ta giả sử rằng hệ quan sát bàn tay trái được dùng. Hình 6.10 Trong hệ quan sát bàn tay trái, khi hướng quan sát cùng chiều với trục zv dương, một mặt ở đằng sau là mặt với tham số C>0. Bằng việc kiểm tra tham số C ở mỗi mặt của đối tượng, ta có thể xác định được ngay tất cả các mặt ở đằng sau. Đối với một khối đa diện lồi đơn lẻ, như hình kim tự tháp trong hình 6.10, việc kiểm tra này xác định tất cả các mặt bị che khuất trên đối tượng, bởi vì mỗi mặt thì là hoàn toàn được nhìn thấy hoặc hoàn toàn bị che khuất. Đối với các đối tượng khác, các kiểm tra phức tạp hơn cần được thực hiện để xác định xem các mặt là bị che khuất hoàn toàn hay chỉ bị che khuất một phần. Hình 6.11 Ảnh một đối tượng với một mặt bị che khuất một phần Tương tự, chúng ta cần xác định xem các đối tượng là có một phần hay toàn bộ bị che khuất bởi các đối tượng khác. Một cách tổng quát, việc khử mặt khuất sẽ loại bỏ khoảng một nữa số mặt trong một ảnh khi thực hiện các phép kiểm tra tính nhìn thấy được sau này. 6.3.2 Phương pháp vùng đệm độ sâu Một tiếp cận không gian ảnh được dùng phổ biến để khử mặt khuất là phương pháp vùng đệm độ sâu. Một cách cơ bản, thuật toán này kiểm tra tính nhìn thấy được của các mặt mỗi lần một điểm. Với mỗi vị trí pixel (x,y) trên mặt phẳng quan sát, mặt nào có giá trị tọa độ z nhỏ nhất ở vị trí pixel đó thì nhìn thấy được. Hình 6.4 trình bày ba mặt có độ sâu khác nhau, với sự quan tâm đến vị trí (x, y) trong hệ quan sát bàn tay trái. Mặt S1 có giá trị z nhỏ nhất ở vị trí này vì vậy giá trị độ sáng ở (x, y) được lưu. 40
  48. Hai vùng đệm được cần để cài đặt phương pháp này. Một vùng đệm độ sâu được dùng để lưu trữ các giá trị z cho mỗi vị trí (x, y) của các mặt được so sánh. Vùng đệm thứ hai là vùng đệm làm tươi (hay còn gọi là vùng đệm khung), lưu giữ các giá trị độ sáng cho mỗi vị trí (x, y). Phương pháp này có thể được thực hiện hiệu quả trong các hệ tọa độ chuẩn, với các giá trị độ sâu thay đổi từ 0 đến 1. Giả sử rằng một không gian chiếu được ánh xạ vào một không gian quan sát hình hộp chuẩn, ánh xạ của mỗi mặt lên mặt phẳng quan sát là một phép chiếu trực giao. Độ sâu của các điểm trên bề mặt của một đa giác được tính từ phương trình mặt phẳng. Ban đầu, tất cả các vị trí trong vùng đệm độ sâu được đặt giá trị 1 (độ sâu lớn nhất), và vùng đệm làm tươi được khởi tạo giá trị của độ sáng nền. Mỗi mặt (đã được lập danh sách trong các bảng đa giác sau đó được xử lý. Mỗi lần một đường quét tính độ sâu, hoặc giá trị z, ở mỗi vị trí (x, y). Giá trị z vừa được tính xong sẽ được so sánh với các giá trị lưu trữ trước đó trong vùng đệm độ sâu ở vị trí đó. Nếu giá trị z vừa được tính xong nhỏ hơn các giá trị trước đó, giá trị z mới sẽ được lưu, và độ sáng của mặt ở vị trí đó cũng được cập nhật lại vào vị trí tương ứng trong vùng đệm làm tươi. Hình 6.12 Ở vị trí (x, y), mặt S1 có giá độ sâu nhỏ nhất và vì thế được nhìn thấy ở ví trí đó Chúng ta có thể tổng kết các bước của thuật toán vùng đệm độ sâu như sau: 1. Khởi tạo vùng đệm độ sâu và vùng đệm làm tươi để với tất cả các vị trí (x,y), depth(x, y) =1 và refresh(x, y) = background. 2. Đối với mỗi vị trí trên mỗi mặt, so sánh các giá trị độ sâu với các giá trị độ sâu được lưu trước đó trong vùng đệm độ sâu để xác định tính chất nhìn thấy được. a. Tính giá trị z cho mỗi vị trí (x, y) trên mặt. b. Nếu z < depth(x, y) thì đặt lại depth(x, y)= z và refresh(x, y) = i , với i là giá trị độ sáng trên mặt ở vị trí (x, y). Trong bước cuối cùng, nếu z không nhỏ hơn giá trị trong vùng đệm độ sâu ở vị trí đó, điểm không được nhìn thấy. Khi quá trình này được hoàn thành cho tất cả các mặt, vùng đệm độ sâu chứa các giá trị z của các mặt nhìn thấy được và vùng đệm làm tươi chỉ chứa các giá trị độ sáng của các mặt nhìn thấy được đó. Các giá trị độ sâu cho một vị trí (x, y) được tính từ phương trình của mỗi mặt: ( Ax By D) (6-11) z C Với mỗi đường quét bất kỳ (xem hình 6.5), các tọa độ x trên cùng đường quét sai khác nhau 1, và các giá trị y giữa hai đường quét cũng sai khác nhau 1. Nếu độ sâu của vị trí (x,y) được xác định là z, khi đó độ sâu z’ của vị trí kế tiếp (x+1, y) dọc theo theo đường quét có được từ phương trình 41
  49. 6.4 như sau: Với mỗi đường quét bất kỳ, các tọa độ x trên cùng đường quét sai khác nhau 1, và các giá trị y giữa hai đường quét cũng sai khác nhau 1. Nếu độ sâu của vị trí (x,y) được xác định là z, khi đó độ sâu z’ của vị trí kế tiếp (x+1, y) dọc theo theo đường quét có được như sau: hình 6.13 ( A(x 1) By D) A z' hoặc z' z (6-12) C C Tỷ số A/C không đổi với mỗi mặt, vì vậy giá trị độ sâu của điểm kế tiếp trên cùng đường quét có được từ giá trị trước đó với một phép trừ. Chúng ta thu được các giá trị độ sâu giữa các đường quét theo cách tương tự. Một lần nữa giả sử rằng vị trí (x, y) có độ sâu z. Khi đó ở vị trí (x, y-1) trên đường quét ngay bên dưới, giá trị độ sâu được tính từ phương trình mặt phẳng như sau: ( Ax B(y 1) D) B z' ' hoặc z' ' z (6-13) C C Độ sâu z được cộng thêm tỷ số B/C. Phương pháp vùng đệm độ sâu thì dễ dàng để cài đặt, và nó không cần sắp xếp các mặt trong ảnh. Nhưng nó cần đến một vùng đệm thứ hai đó là vùng đệm làm tươi. Một hệ thống với độ phân giải 1024 x 1024 có thể cần hơn một triệu vị trí trong vùng đệm độ sâu, với mỗi vị trí cần đủ bit để lưu giữ các tọa độ z tăng. Một cách để giảm bớt không gian lưu giữ cần thiết là tại mỗi thời điểm chỉ xử một phần của ảnh, dùng một vùng độ sâu nhỏ hơn. Sau mỗi phần ảnh được xử lý xong, vùng đệm được dùng lại cho phần kế tiếp. 6.3.3 Phương pháp phân chia vùng Kỹ thuật khử mặt khuất này thì hiệu quả cho phương pháp không gian ảnh, nhưng các phương pháp không gian đối tượng có thể được dùng để thực hiện việc sắp xếp các mặt theo độ sâu. Phương pháp phân chia vùng tận dụng các thuận lợi của các vùng cố kết trong ảnh bằng cách xác định các vùng quan sát này để tách chúng làm nhiều phần nhỏ, mỗi phần được xem như một mặt đơn lẻ. Chúng ta áp dụng phương pháp này bằng cách phân chia thành công toàn bộ vùng quan sát thành các hình chữ nhật càng lúc càng nhỏ cho đến khi mỗi vùng nhỏ là hình chiếu của một phần của một mặt đơn lẻ nhìn thấy được, hoặc cho đến khi không thể tiếp tục phân chia. Hình 6.14 Các phần chia được thực hiện thành công với phép chia 2. Để thực hiện phương pháp này, ta cần xây dựng các phép kiểm tra để xác định nhanh chóng vùng là một phần của một mặt đơn lẻ hoặc cho ta biết vùng thì quá phức tạp để phân tích bình thường. Bắt đầu với cái nhìn tổng thể, ta áp dụng các phép kiểm tra để xác định xem có nên phân chia toàn bộ vùng thành các hình chữ nhật nhỏ hơn không. Nếu các phép kiểm tra chỉ ra rằng mặt quan sát đủ phức tạp, ta phân chia nó. Kế tiếp, chúng ta áp dụng các phép kiểm tra đến mỗi vùng nhỏ hơn, chia nhỏ những vùng này nếu các phép kiểm tra xác định rằng tính nhìn thấy được của một mặt đơn là vẫn chưa chắc chắn. Chúng ta tiếp tục quá trình này đến khi các phần phân chia là dễ dàng được phân tích như là một mặt đơn lẻ hoặc đến 42
  50. khi chúng được thu giảm kích thước thành một pixel. Một cách để phân chia một vùng thành công là chia kích thước nó ra làm 2, như trong hình 6.6. Một vùng quan sát với độ phân giải 1024x1024 có thể được chia 10 lần trước khi một phần chia giảm thành 1 điểm. Các phép kiểm tra để xác định tính nhìn thấy được của một mặt đơn trong phạm vi vùng chỉ định được thực hiện bằng cách so sánh các mặt với biên của vùng. Có bốn khả năng có thể xảy ra khi xem xét mối quan hệ giữa một mặt với biên vùng chỉ định. Ta có thể mô tả đặc điểm của các quan hệ này theo các cách sau như hình dưới đây. Hình 6.15 Các quan hệ có thể xảy ra giữa các mặt đa giác và một vùng chữ nhật. Mặt bao quanh là mặt hoàn toàn bao quanh một vùng. Mặt nằm chồng là mặt có một phần nằm trong và một phần nằm ngoài vùng. Mặt bên trong là mặt hoàn toàn nằm bên trong vùng. Mặt bên ngoài là mặt hoàn toàn nằm bên ngoài vùng. Các phép kiểm tra để xác định tính nhìn thấy được của mặt trong phạm vị một vùng có thể được đề cập giới hạn trong bốn loại này. Không có sự phân chia nào thêm nữa cho một vùng nếu một trong các điều kiện sau là đúng: 1. Tất cả các mặt nằm bên ngoài vùng. 2. Chỉ một mặt bên trong, mặt nằm chồng hoặc mặt bao quanh ở trong vùng. 3. Một mặt bao quanh che khuất tất cả các mặt khác trong phạm vi các biên của vùng. Kiểm tra 1 có thể được thực hiện bằng cách kiểm tra các biên chữ nhật bao quanh các mặt với biên của vùng. Kiểm tra 2 cũng có thể dùng các biên chữ nhật trong mặt xy để xác định mặt nằm trong. Với những kiểu mặt khác, các biên chữ nhật có thể được dùng như một bước kiểm tra ban đầu. Nếu một biên chữ nhật cắt vùng theo cách nào đó, các kiểm tra tiếp theo mới được thực hiện để xác định xem mặt là: mặt bao quanh, mặt nằm chồng, hay mặt bên ngoài. Nếu được xác định là mặt bên trong, mặt nằm chồng, hay mặt bao quanh, các giá trị độ sáng của nó được chuyển đến vùng thích hợp trong vùng đệm khung. Hình 6.16 Một mặt bao quanh với độ sâu lớn nhất của zmax (xét trong vùng quan sát) che khuất tất cả các mặt mà độ 43
  51. sâu nhỏ nhất xmin của chúng lớn hơn zmax. Một phương pháp để thực hiện bước 3 là sắp xếp các mặt dựa theo độ sâu nhỏ nhất của chúng. Sau đó, với mỗi mặt bao quanh, ta đi tính giá trị z lớn nhất trong vùng được xem xét. Nếu giá trị lớn nhất z của một mặt nào (trong số các mặt mặt bao quanh) nhỏ hơn giá trị z nhỏ nhất của các mặt còn lại trong vùng, kiểm tra 3 thỏa mãn không. Một phương pháp khác để thực hiện kiểm tra 3 mà không cần đến sắp xếp độ sâu là dùng các phương trình mặt phẳng để tính các giá trị z ở bốn đỉnh của vùng cho tất cả các mặt bao quanh, mặt nằm chồng, hay mặt bên trong. Nếu các giá trị z của một trong số các mặt bao quanh mà nhỏ hơn các giá trị z của các mặt còn lại, kiểm tra 3 đúng. Sau đó vùng có thể được tô với các giá trị độ sáng của mặt bao quanh.Trong vài trường hợp, cả hai phương pháp cho kiểm tra 3 trên sẽ thất bại để xác định đúng một mặt bao quanh che khuất tất cả các mặt còn lại khác. Việc kiểm tra thêm nữa sẽ được thực hiện để xác định mặt đơn che phủ vùng, tuy nhiên, thuật toán sẽ nhanh hơn nếu ta phân chia vùng hơn là tiếp tục làm các kiểm tra phức tạp. Khi các mặt bên ngoài và mặt bao quanh vừa được xác định cho một vùng, chúng nó sẽ còn lại các mặt bên ngoài và bao quanh cho tất cả các phần phân chia của vùng. Hơn nữa, vài mặt bên trong và mặt nằm chồng có thể đang chờ để bị loại bỏ khi quá trình phân chia tiếp tục, để các vùng trở nên dễ dàng hơn cho phân tích. Trong trường hợp đã đi đến giới hạn, kích thước vùng chia chỉ còn là 1 pixel, ta đơn giản đi tính độ sâu của mỗi mặt có liên quan ở điểm đó và chuyển giá trị độ sáng của mặt gần nhất vào vùng đệm khung. Hình 6.17 Vùng A được phân chia thành A1 và A2 bằng cách dùng biên của mặt S trên mặt phẳng chiếu. Như một thay đổi lên quá trình phân chia cơ bản, ta có thể phân chia các vùng dọc theo biên của mặt thay vì chia chúng làm 2. Nếu các mặt vừa được sắp theo độ sâu nhỏ nhất, ta có thể dùng mặt có giá trị z nhỏ nhất để phân chia một vùng được cho. Hình 6.17 minh họa phương pháp này để phân chia các vùng. Hình chiếu của biên mặt S được dùng để phân chia vùng ban đầu thành các phần A1 và A2. Mặt S sau đó trở thành mặt bao quanh của A1 và các phép kiểm tra 2 và 3 có thể được áp dụng để xác định xem việc phân chia thêm nữa có cần thiết không. Trong trường hợp tổng quát, sự phân chia ít hơn được cần dùng tiếp cận này, tuy nhiên nhiều xử lý thêm nữa sẽ được cần để chia vùng và phân tích mối liên hệ giữa các mặt với các biên vùng chia. 6.4 Bài tập áp dụng Bài 1 Viết chương trình vẽ đường cong Bezier. Bài 2 Viết chương trình vẽ mặt lưới B – Spline. Bài 3 Viết chương trình vẽ phối cảnh hình khối cầu, lăng trụ . 44
  52. Gợi ý: Sử dụng thư viện đồ họa Direct X hoặc OpenGL. TÀI LIỆU THAM KHẢO - Đặng Văn Đức. Kỹ thuật đồ họa máy tính. Viện Công nghệ thông tin. 2002. - Donald Hearn, M. Pauline Baker, Computer Graphics, Prentice-Hall Inc., Englewood Cliffs, New Jersey, 1986. - F.S.Hill, Computer graphics, 1990 ĐỀ THI THAM KHẢO Các đề thi có thời gian làm bài 60 phút Đề số 1 Câu 1 Cho 3 điểm A, B, C có tọa độ lần lượt là A(0, 40); B(-37, 125); C(40, -81). Hãy tìm tọa độ mới của các điểm trên qua biến đổi: a. Phép biến đổi tỷ lệ với hệ số tỷ lệ theo trục hoành là 3, trục tung là 2. b. Phép quay góc 60o , ngược chiều kim đồng hồ quanh gốc tọa độ. Câu 2 Hãy tìm các hệ số p và tọa độ các điểm sẽ nảy sinh của đoạn thẳng được vẽ theo giải thuật bresenham, nếu biết đoạn thẳng đi qua hai điểm là A(5, 10) và B(15, 15). Đề số 2 Câu 1 Cho hệ 3 điểm A, B, C có tọa độ lần lượt là A(43, 0); B(25, -67); C(-40, -34). Hãy tìm tọa độ mới của các điểm trên qua biến đổi: a. Phép tịnh tiến với hệ số tịnh tiến theo trục hoành là 44, trục tung là -81. b. Phép đối xứng qua trục tung. c. Tìm ma trận biến đổi của 2 phép tịnh tiến và phép đối xứng trên. Câu 2 Hãy tìm các hệ số p và tọa độ các điểm sẽ nảy sinh của đoạn thẳng được vẽ theo giải thuật midpoint, nếu biết đoạn thẳng đi qua hai điểm là A(0, 13) và B(10, 7). Đề số 3 Câu 1 Cho 3 điểm A, B, C có tọa độ lần lượt là A(43, 0); B(25, -67); C(-40, -34). Hãy tìm tọa độ mới của các điểm trên qua biến đổi: a. Phép biến dạng với hệ số biến dạng theo trục hoành là 4, trục tung là 3. b. Phép quay góc 45o , ngược chiều kim đồng hồ quanh gốc tọa độ. Câu 2 Hãy tìm hệ số p và tọa độ của 10 điểm sẽ nảy sinh đầu tiên của cung 1/8 đường tròn được vẽ theo giải thuật midpoint, nếu biết đường tròn có tâm (10, -25) và bán kính 90. Đề số 4 Câu 1 Cho 3 điểm A, B, C có tọa độ lần lượt là A(0, 0); B(67, -46); C(-9, 22). Hãy tìm tọa độ mới của các điểm trên qua biến đổi: a. Phép đối xứng qua trục hoành. b. Phép biến đổi tỷ lệ với hệ số tỷ lệ theo trục hoành là 2, trục tung là 1. c. Tìm ma trận biến đổi của 2 phép đối xứng và phép biến đổi tỷ lệ trên. 45
  53. Câu 2 Hãy tìm hệ số p và tọa độ của 32 điểm sẽ nảy sinh đầu tiên của đường tròn được vẽ theo giải thuật midpoint, nếu biết đường tròn có tâm (-30, -12) và bán kính 60. Đề số 5 Câu 1 Cho 3 điểm A, B, C có tọa độ lần lượt là A(0, 1, 18); B(7, -16, 9); C(-9, 12, 4). Hãy tìm tọa độ mới của các điểm trên qua biến đổi: a. Phép biến dạng theo trục z, hệ số biến dạng tác động lên hoành độ là 3, lên tung độ là 2. b. Tìm ma trận biến đổi của phép đối xứng qua đường y = x. Câu 2 Cho cửa sổ giới hạn bởi điểm trên trái có tọa độ (10, 76) và điểm dưới phải có tọa độ (60, 24). Áp dụng giải thuật Cohen-Sutherland thực hiện cắt xén các đoạn thẳng sau với biên cửa sổ: √ Đoạn thẳng AB: A(4, 35); A(50, 80) √ Đoạn thẳng CD: C(47, 29); D(55, 3) √ Đoạn thẳng EF: E(-10, 29); F(0, 3) Đề số 6 Câu 1 Cho 3 điểm A, B, C có tọa độ lần lượt là A(1, -6, -18); B(16, 7, -9); C(0, 4, -3). Hãy tìm tọa độ mới của các điểm trên qua biến đổi: a. Phép biến đổi tỷ lệ, hệ số biến đổi theo trục x là 1, trục y là 3, trục z là 2. b. Tìm ma trận biến đổi của phép đối xứng qua đường y = -x. Câu 2 Cho cửa sổ giới hạn bởi điểm trên trái có tọa độ (4, 50) và điểm dưới phải có tọa độ (60, - 30). Áp dụng giải thuật Cohen-Sutherland thực hiện cắt xén các đoạn thẳng sau với biên cửa sổ: √ Đoạn thẳng AB: A(24, 0); B(40, 90) √ Đoạn thẳng CD: C(38, -35); D(55, 0) √ Đoạn thẳng EF: E(-10, 29); F(0, 3) Đề số 7 Câu 1 Cho 3 điểm A, B, C có tọa độ lần lượt là A(0, 1, 18); B(7, -16, 9); C(-9, 12, 4). Hãy tìm tọa độ mới của các điểm trên qua biến đổi: a. Phép tịnh tiến, hệ số tịnh tiến theo trục x là 10, trục y là -15, trục z là 30. b. Tìm ma trận biến đổi của phép đối xứng qua đường y = x. Câu 2 Cho cửa sổ ở hệ tọa độ thực giới hạn bởi điểm trên trái có tọa độ (10, 76) và điểm dưới phải có tọa độ (60, 24); cửa sổ quan sát giới hạn bởi điểm trên trái có tọa độ (-15, 15) và điểm dưới phải có tọa độ (-10, 24). Cho tam giác ABC xác định trong hệ tọa độ như sau: A(14, 35); B(50, 29); C(47, 39). Tìm tọa độ mới của tam giác trong cửa sổ quan sát. Đề số 8 Câu 1 Cho 3 điểm A, B, C có tọa độ lần lượt là A(-1, -6, 8); B(6, 0, -39); C(4, 0, -2). Hãy tìm tọa độ mới của các điểm trên qua biến đổi: a. Phép biến đổi tỷ lệ, hệ số biến đổi theo trục x là 2, trục y là 3, trục z là 1. b. Tìm ma trận biến đổi của phép đối xứng qua đường y = -x. 46
  54. y x[2 (x 1) 2b 2y 1] x i i Câu 2 Cho cửa sổ ở hệ tọa độ thực giới hạn bởi điểm trên trái có tọa độ (20, 80) và điểm dưới phải có tọa độ (50, 34); cửa sổ quan sát giới hạn bởi điểm trên trái có tọa độ (-15, 20) và điểm dưới phải có tọa độ (-12, 25). Cho tam giác ABC xác định trong hệ tọa độ như sau: A(14, 35); B(50, 29); C(47, 39). Tìm tọa độ mới của tam giác trong cửa sổ quan sát. 47