Phần 1 của giáo trình Kỹ thuật đồ họa máy tính cung cấp cho học viên những nội dung về: giới thiệu thuật toán vẽ và tô các đường cơ bản; các thuật toán tô màu; phép biến đổi trong đồ họa hai chiều; windowing và clipping;... Mời các bạn cùng tham khảo!
BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP QUẢNG NINH GIÁO TRÌNH KỸ THUẬT ĐỒ HỌA MÁY TÍNH DÙNG CHO BẬC ĐẠI HỌC (LƯU HÀNH NỘI BỘ) QUẢNG NINH - 2013 Chương 1: Giới thiệu thuật tốn vẽ tơ đường Lời nói đầu Đồ họa máy tính đời kết hợp lĩnh vực thơng tin truyền hình Đầu tiên kỹ thuật đồ họa phát triển nhóm kỹ sư sử dụng máy tính lớn Trong giai đoạn đầu phát triển người ta phải tốn nhiều tiền cho việc trang bị thiết bị phần cứng Ngày nay, nhờ vào tiến vi xử lý, giá thành máy tính lúc phù hợp với túi tiền người sử dụng kỹ thuật ứng dụng đồ họa ngày cao nên có nhiều người quan tâm nghiên cứu đến lĩnh vực Chúng ta vẽ hình ảnh khơng ảnh tĩnh mà cịn biến đổi thành hình ảnh sinh động qua phép quay, tịnh tiến Do vậy, đồ họa máy tính trở thành lĩnh vực lý thú có nhiều ứng dụng thực tế Tuy nhiên, việc dạy học kỹ thuật đồ họa khơng đơn giản chủ đề có nhiều phức tạp Kỹ thuật đồ họa liên quan đến tin học tốn học hầu hết giải thuật vẽ, tơ phép biến hình xây dựng dựa tảng hình học khơng gian hai chiều ba chiều Hiện nay, Kỹ thuật đồ họa môn học giảng dạy cho sinh viên chuyên ngành Tin học với 45 tiết lý thuyết 15 tiết thực tập Nội dung giáo trình kỹ thuật đồ họa tập trung vào vấn đề sau : - Trình bày thuật tốn vẽ tơ đường đường thẳng, đa giác, đường tròn, ellipse đường conic Các thuật tốn giúp cho sinh viên tự thiết kế để vẽ tơ hình ( chương 2) - Nội dung thứ hai đề cập đến đồ họa hai chiều đồ họa ba chiều bao gồm phép biến đổi Affine, windowing clipping, quan sát ảnh ba chiều qua phép chiếu, khử mặt khuất đường khuất, thiết kế đường cong mặt cong (từ chương đến chương 7) Giáo trình kỹ thuật đồ họa sửa đổi cập nhật dựa kinh nghiệm giảng dạy qua xây dựng dựa tài liệu tham khảo : Donald Hearn, M Pauline Baker; Computer Graphics; Prentice-Hall, Inc., Englewood Cliffs, New Jersey , 1986 Sau cùng, hy vọng giáo trình đóng góp tích cực việc cải tiến hiểu biết sinh viên lĩnh vực đồ họa mong nhận góp ý đồng nghiệp sinh viên để công việc biên soạn ngày tốt Trang Chương 1: Giới thiệu thuật tốn vẽ tơ đường Mục lục Chương 1: GIỚI THIỆU THUẬT TOÁN VẼ VÀ TÔ CÁC ĐƯỜNG CƠ BẢN 1.1 Tổng quan 1.2 Hệ tọa độ giới thực, hệ tọa độ thiết bị hệ tọa độ chuẩn 1.3 Thuật toán vẽ đoạn thẳng 1.3.1 Thuật toán DDA (Digital DifferentialAnalyzer) 10 1.3.2 Thuật toán Bresenham 13 1.4 Thuật tốn vẽ đường trịn 17 1.4.1 Thuật toán đơn giản .17 1.4.2 Thuật toán MidPoint 18 1.4.3 Vẽ đường trịn thuật tốn Bresenham 21 1.4.4 Thuật toán vẽ Ellipse .22 1.4.5 Vẽ đường conics số đường cong khác 24 1.4.6 Vẽ đa giác 25 1.4.7 Tổng kết chương 28 1.4.8 Bài tập chương .28 Chương : CÁC THUẬT TỐN TƠ MÀU 31 2.1 Tổng quan .31 2.2 Các không gian màu .31 2.2.1 Không gian màu RGB (Red - Green - Blue) 31 2.2.2 Không gian màu CMY (Cyan - Magenta - Yellow) .32 2.2.3 Không gian màu HSV ( Hue - Saturation - Value ) 32 2.3 Các thuật tốn tơ màu .33 2.3.1 Tô đơn giản 33 2.3.2 Tô màu theo dòng quét (scan - line) 38 2.3.3 Phương pháp tô màu dựa theo đường biên 42 2.4 Tổng kết chương 45 2.5 Bài tập chương 46 Chương : PHÉP BIẾN ĐỔI TRONG ĐỒ HỌA HAI CHIỀU 47 U 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 Tổng quan .47 Phép tịnh tiến (translation) 47 Phép biến đổi tỷ lệ 48 Phép quay 49 Phép đối xứng 51 Phép biến dạng 51 Phép biến đổi Affine ngược ( The inverse of an Affine transformation) .52 Một số tính chất phép biến đổi affine 53 Hệ tọa độ .53 Kết hợp phép biến đổi (composing transformation) 54 Tổng kết chương 55 Bài tập chương 55 Chương 58 WINDOWING CLIPPING 58 4.1 4.2 Tổng quan .58 Các khái niệm Windowing .58 Trang Chương 1: Giới thiệu thuật tốn vẽ tơ đường 4.3 4.4 4.5 4.6 Các thuật toán Clipping 63 Phép biến đổi từ cửa sổ - đến – vùng quan sát .84 Tổng kết chương 86 Bài tập chương 86 Chương : ĐỒ HỌA BA CHIỀU 88 U 5.1 Tổng quan .88 5.2 Giới thiệu đồ họa chiều 88 5.3 Biểu diễn đối tượng chiều 90 5.4 Các phép biến đổi chiều .95 5.4.1 Hệ tọa độ bàn tay phải - bàn tay trái .95 5.4.2 Các phép biến đổi Affine sở .95 5.5 Tổng kết chương 97 Chương : QUAN SÁT ẢNH BA CHIỀU 98 U 6.1 Tổng quan .98 6.2 Các phép chiếu 98 6.2.1 Các phép chiếu song song .100 6.2.2 Các phép chiếu phối cảnh 105 6.3 Biến đổi hệ tọa độ quan sát (hệ quan sát) .107 6.3.1 Xác định mặt phẳng quan sát .108 6.3.2 Không gian quan sát 112 6.3.3 Clipping 115 6.4 Cài đặt thao tác quan sát (Implementation of Viewing Operations) 116 6.5 Cài đặt phần cứng 125 6.6 Lập trình xem ảnh ba chiều 126 6.7 Các mở rộng đến Đường ống quan sát (Viewing Pipeline) 130 6.8 Tổng kết chương 130 6.9 Bài tập chương 131 Chương 134 KHỬ CÁC MẶT KHUẤT VÀ ĐƯỜNG KHUẤT 134 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 Tổng quan .134 Khử mặt nằm sau (Back-Face Removal) .135 Phương pháp dùng vùng đệm độ sâu (Depth-Buffer Method) .138 Phương pháp đường quét (Scan-Line Method) 140 Phương pháp xếp theo độ sâu (Depth- Sorting Method) 143 Phương pháp phân chia vùng (Area- Subdivision Method) 147 Các phương pháp Octree (Octree Methods) 150 Loại bỏ đường bị che khuất 154 Tổng kết chương 156 Bài tập chương .157 Trang Chương 1: Giới thiệu thuật toán vẽ tô đường PHẦN TỔNG QUAN Mục đích u cầu Sau học xong mơn này, sinh viên cần đạt yêu cầu sau: - Hiểu đồ họa máy tính - Thiết kế cài đặt thuật toán vẽ đường đường thẳng, đường tròn, - Thiết kế cài đặt thuật tốn tơ hình - Sử dụng phép biến hình không gian chiều, chiều để làm thay đổi hình ảnh có sẳn - Có thể tạo cửa sổ để cắt - dán hình - Hiểu khái niệm tiếp cận để mô hình ảnh khơng gian chiều máy tính Đối tượng sử dụng Mơn kỹ thuật đồ họa giảng dạy cho sinh viên năm thứ tư khoa sau: - Chuyên ngành công nghệ thông tin - Chuyên ngành điện tử (viễn thông, tự động hóa, ) - Chun ngành sư phạm (Tốn tin, Lý tin ) Nội dung cốt lõi Giáo trình Kỹ thuật đồ họa bao gồm chương - Chương 1: Giới thiệu thuật tốn vẽ tơ đường - Chương 2: Các thuật tốn tơ màu - Chương 3: Phép biến đổi đồ họa chiều - Chương 4: Tạo cửa sổ cắt hình - Chương 5: Đồ họa chiều - Chương 6: Quan sát ảnh chiều - Chương 7: Khử mặt khuất đường khuất Kiến thức tiên - Kiến thức hình học khơng gian hình giải tích - Kiến thức lập trình bản, lập trình đồ họa - Kiến thức cấu trúc liệu, lập trình đệ qui Trang Chương 1: Giới thiệu thuật tốn vẽ tơ đường Danh mục tài liệu tham khảo - Donald Hearn, M Pauline Baker; Computer Graphics; Prentice-Hall, Inc., Englewood Cliffs, New Jersey , 1986 - F.S.Hill; Computer graphics ; 1990 - Vũ Mạnh Tường, Dương Anh Đức, Trần Đan Thư, Lý Quốc Ngọc Giáo trình Nhập mơn đồ họa & xử lý ảnh.1995 - VERA B.ANAND, người dịch TS Nguyễn Hữu Lộc Đồ họa máy tính Mơ hình hóa hình học Nhà xuất Thành Phố Hồ Chí Minh - 2000 - Foley, Van Darn, Feiner, Hughes, Phillips Introduction L'Infographie 1995 - Lê Tấn Hùng, Huỳnh Quyết Thắng Kỹ thuật đồ họa Nhà xuất khoa học kỹ thuật, Hà nội - 2000 Trang Chương 1: Giới thiệu thuật tốn vẽ tơ đường Chương 1: GIỚI THIỆU THUẬT TỐN VẼ VÀ TƠ CÁC ĐƯỜNG CƠ BẢN 1.1 Tổng quan • Mục tiêu chương Học xong chương này, sinh viên phải nắm bắt vấn đề sau: - Thế hệ đồ họa - Thiết kế cài đặt thủ tục vẽ tô đường đường thẳng, đường tròn, elip, đường cong khác • Kiến thức cần thiết Các kiến thức cần thiết để học chương bao gồm : - Các khái niệm toán học đường thẳng : đường thẳng : dạng tổng qt phương trình đường thẳng, hệ số góc, tung độ dốc - Hiểu rõ hình dáng đường thẳng phụ thuộc vào hệ số góc - Phương trình tổng qt đường trịn, ellippse ( khơng có tham số có tham số) - Kĩ thuật lập trình: thiết lập thủ tục, hàm (lưu ý truyền qui chiếu truyền giá trị) • Tài liệu tham khảo Donald Hearn, M Pauline Baker Computer Graphics Prentice-Hall, Inc., Englewood Cliffs, New Jersey , 1986 (chapters 3, 55-76) • Nội dung cốt lõi Thiết lập thủ tục vẽ : - Đường thẳng giải thuật DDA - Đường thẳng giải thuật Bresenham - Đường tròn giải thuật đối xứng - Đường tròn giải thuật Bresenham - Đường tròn giải thuật MidPoint - Ellippse - Đa giác Trang Chương 1: Giới thiệu thuật toán vẽ tô đường 1.2 Hệ tọa độ giới thực, hệ tọa độ thiết bị hệ tọa độ chuẩn Một hệ mềm đồ họa mô tả bao gồm miền sau : - Miền điều khiển : bao bọc toàn hệ thống - Miền thực : nằm miền điều khiển Khi số thâm nhập vào miền thực, chuyển thành số thực dấu phẩy động, có số rời khỏi miền chuyển thành số nguyên có dấu 16 bits - Miền hiển thị : nằm miền điều khiển phân biệt với miền thực Chỉ có số nguyên 16 bits nằm miền hiển thị Trong lĩnh vực kỹ thuật đồ họa, phải hiểu thực chất đồ họa làm để mơ tả biến đổi đối tượng giới thực máy tính Bởi vì, đối tượng giới thực mơ tả tọa độ thực Trong đó, hệ tọa độ thiết bị lại sử dụng hệ tọa độ nguyên để hiển thị hình ảnh Đây vấn đề cần giải Ngồi ra, cịn có khó khăn khác với thiết bị khác có định nghĩa khác Do đó, cần có phương pháp chuyển đổi tương ứng hệ tọa độ đối tượng phải định nghĩa thành phần đơn giản để mơ tả gần với hình ảnh thực bên ngồi Hai mơ hình ứng dụng đồ họa dựa mẫu số hóa dựa đặc trưng hình học Trong ứng dụng đồ họa dựa mẫu số hóa đối tượng đồ họa tạo lưới pixel rời rạc Các pixel đuợc tạo chương trình vẽ, máy quét, Các pixel mơ tả tọa độ xác định vị trí giá trị mẫu Thuận lợi ứng dụng dể dàng thay đổi ảnh cách thay đổi màu sắc hay vị trí pixel, di chuyển vùng ảnh từ nơi sang nơi khác Tuy nhiên, điều bất lợi xem xét đối tượng từ góc nhìn khác Ứng dụng đồ họa dựa đặc trưng hình học bao gồm đối tượng đồ họa sở đoạn thẳng, đa giác, Chúng lưu trữ mơ hình thuộc tính Ví dụ : đoạn thẳng mơ hình hai điểm đầu cuối, có thuộc tính màu sắc, độ dày Người sử dụng không thao tác trực tiếp pixel mà thao tác thành phần hình học đối tượng a Hệ tọa độ giới thực: Một hệ tọa độ thực thường dùng để mô tả đối tượng giới thực hệ tọa độ Descartes Với hệ tọa độ này, điểm P biểu diễn cặp tọa độ (xp,yp) với xp, yp ∈R (xem hình 1.1) Trang Chương 1: Giới thiệu thuật tốn vẽ tơ đường Y yp O P(xp,yp) X xp Hình 1.1 : Hệ tọa độ thực Ox : gọi trục hoành Oy : gọi 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) dùng cho thiết bị xuất cụ thể đó, ví dụ máy in, hình, Trong hệ tọa độ thiết bị điểm mô tả cặp tọa độ (x,y) Tuy nhiên, khác với hệ tọa độ thực x, y ∈ N Điều có nghĩa điểm hệ tọa độ thực định nghĩa liên tục, điểm hệ tọa độ thiết bị rời rạc Ngoài ra, tọa độ x, y hệ tọa độ thiết bị biểu diễn giới hạn N Ví dụ : Độ phân giải hình chế độ đồ họa 640x480 Khi đó, x∈(0,640) y∈(0,480) (xem hình 1.2) (0,0) (0, 480) (640,0) (640,480) Hình 1.2 : Hệ tọa độ hình Trang Chương 1: Giới thiệu thuật tốn vẽ tơ đường c Hệ tọa độ thiết bị chuẩn (Normalized device coordinates) Do cách định nghĩa hệ tọa độ thiết bị khác nên hình ảnh hiển thị thiết bị xác chưa hiển thị xác thíết bị khác Người ta xây dựng hệ tọa độ thiết bị chuẩn đại diện chung cho tất thiết bị để mơ tả hình ảnh mà khơng phụ thuộc vào thiết bị Trong hệ tọa độ chuẩn, tọa độ x, y gán giá trị đoạn từ [0,1] Như vậy, vùng không gian hệ tọa độ chuẩn hình vng đơn vị có góc trái (0, 0) góc phải (1, 1) Q trình mơ tả đối tượng thực sau (xem hình 1.3): Ảnh định nghĩa tọa độ giới thực hình Tọa độ chuẩn hóa Tọa độ thiết bị máy in thiết bị khác Hình 1.3 : Hệ tọa độ hình 1.3 Thuật tốn vẽ đoạn thẳng Xét đoạn thẳng có hệ số góc 0 u2 then result := false {huỷ bỏ đoạn cập nhật u1 thích hợp} else if r > u1 then u1 :=r end {if p < 0} else if p > then begin {đoạn từ bên bên biên} r := q / p; if r < u1 then result := false else if r < u2 then u2 := r end {if p > 0} else if q < then result := fasle; cliptest := result end; {cliptest} begin {clipper} u1 := 0; u2 := 1; Trang 73 Chương 4: Windowing Clipping dx := x2 – x1; if cliptest (-dx, x1 – xwmin, u1, u2) then if cliptest (dx, xwmax – x1, u1, u2) then begin dy := y2 - y1; if cliptest (-dy, y1 – ywmin, u1, u2) then if cliptest(dy, ywmax – y1, u1, u2) then begin {nếu u1 u2 nằm đoạn [0,1], dùng để tính điểm đầu mút mới} if u2 < then begin x2 := x1 + u2 * dx; y2 := y1 + u2 * dy end; {if u2 < 1} if u1 > then begin x1 := x1 + u1 * dx; y1 := y1 + u1 * dy end; {if u1 > 0} end {if cliptest} end {if cliptest} end; {clipper} Thuật toán clipping đường Liang Barsky giảm bớt tính tốn cần thiết để cắt đoạn Mỗi lần cập nhật u1 u2 cần phép chia, giao điểm với cửa sổ tính lần, mà giá trị u1 u2 vừa hoàn thành Trái lại, thuật toán Cohen Sutherland lặp lại việc tính giao điểm đoạn với biên cửa sổ, phép tính giao điểm cần hai phép chia nhân (xem hình 4-11) Hình 4-11 Cửa sổ bị quay bao quanh biên chữ nhật lớn (có cạnh song song với hệ trục tọa độ) Window Hình chữ nhật bao quanh Trang 74 Chương 4: Windowing Clipping Khi cửa sổ bị quay hay đa giác có hình dạng (được dùng làm cửa sổ vùng quan sát), thuật toán clipping thảo luận cần vài thay đổi Nó dùng để che chắn đoạn thẳng Một cửa sổ bị quay, đa giác khác, bị bao quanh hình chữ nhật lớn (hình chữ nhật có trục song song với trục tọa độ) (hình -11) Bất kỳ đoạn thẳng nằm bên ngồi hình chữ nhật bao quanh lớn (bounding rectangle) nằm bên ngồi cửa sổ (window) Các kiểm tra nằm không dễ dàng, giao điểm phải tính dùng phương trình đường thẳng biên cửa sổ đoạn thẳng bị cắt Clipping vùng (Area clipping) Làm đa giác dùng ứng dụng vẽ đường (line-drawing application) bị cắt cách xử lý đoạn thẳng thành phần thông qua thuật toán clipping đường thảo luận Một đa giác xử lý theo cách thu giảm loạt đoạn bị cắt (xem hình 4-12) Hình 4-12: Đa giác bị cắt thuật toán clipping đường Trước clipping Sau clipping Khi một biên đa giác định nghĩa vùng tơ, hình 4-13 Một version thay đổi thuật toán clipping đường cần đến Trong trường hợp này, nhiều vùng kép kín phải tạo để định nghĩa biên cho vùng tô (xem hình 4-13) Trang 75 Chương 4: Windowing Clipping Hình –13: Một vùng có hình dạng, trước sau clipping Trước clipping Sau clipping Một kỹ thuật cho việc clipping đa giác, phát triển Sutherland Hodgman, thực việc clipping cách so sánh đa giác với biên cửa sổ Kết trả thuật toán tập đỉnh định nghĩa vùng bị cắt (vùng tô với màu hay mẫu tô đó) Phương pháp thể hình 4-14 Các vùng đa giác định nghĩa việc xác định dãy có thứ tự đỉnh Để cắt đa giác, so sánh đỉnh với biên cửa sổ Các đỉnh nằm bên cạnh cửa sổ giữ lại cho việc clipping với biên cửa sổ (xem hình 4-15) Hình 4-14 Clipping vùng đa giác cách dùng biên cửa sổ Đa giác gốc Cắt bên trái •S Cắt bên phải I S• • •P P• Cắt bên Hình 4-15 clipping •S •P P• Lưu P (a) Cắt bên •I S• Lưu I (b) Không điểm lưu (c) Lưu I, P (d) Trang 76 Chương 4: Windowing Clipping Quá trình xử lí đỉnh dâ giác liên Hình 4-16 Clipping đa giác khỏi cạnh bên trái cửa sổ, bắt đầu với đỉnh Các số có phẩy dùng để đánh nhãn điểm lưu thuật toán clipping Window 2’ 1’ quan đến biên cửa sổ Từ đỉnh S, đỉnh xét (P) sinh điểm, không điểm nào, hai điểm lưu thuật tốn đỉnh bên ngồi cạnh cửa sổ bị vứt bỏ Nếu khởi hành từ điểm bên cạnh cửa sổ đến điểm bên ngoài, lưu lại giao điểm 3’ đoạn thẳng với biên cửa sổ Cả hai giao điểm đỉnh đa giác lưu lại từ cạnh cửa 5’ 4’ sổ vào bên Khả thứ tư xảy xử lí điểm (P) điểm trước (S) với biên cửa sổ minh họa hình 4-15 Một điểm bên biên cửa sổ lưu lại (trường hợp a), điểm bên ngồi khơng (trường hợp c) Nếu điểm P điểm trước S nằm phía đối diện qua biên (P trong, S ngược lại), giao điểm I tính lưu (trường hợp b d) Trong trường hợp d, điểm P nằm điểm trước S nằm ngồi, hai giao điểm I P lưu Khi tất đỉnh vừa xử lí với biên trái cửa sổ, tập điểm lưu tiếp tục bị cắt xem xét với biên cửa sổ Chúng ta minh họa phương pháp việc xử lí vùng hình 4-16 xem xét với biên bên trái cửa sổ Đỉnh xác định nằm bên biên Đi qua đến đỉnh 3, nằm bên trong, tính giao điểm lưu lại hai giao điểm đỉnh Đỉnh xác định nằm trong, chúng lưu lại Đỉnh thứ sáu đỉnh cuối nằm ngồi, tính lưu giao điểm Dùng năm điểm vừa lưu, lặp lại trình xem xét với biên cửa sổ Cài đặt thuật tốn vừa mơ tả địi hỏi phải dùng khơng gian lưu trữ ngồi để lưu điểm Điều tránh quản lý điểm (điểm sửa lưu nhanh qua để kiểm tra tiếp), với lệnh (instructions) để cắt khỏi biên cửa sổ Chúng ta lưu điểm (dù đỉnh nguyên thuỷ đa giác hay đỉnh có tính giao điểm) sau xử lí xem xét với tất biên Như thể có đường ống chứa Trang 77 Chương 4: Windowing Clipping chuỗi động tác clipping Một điểm nằm bên hay nằm biên cửa sổ giai đoạn qua để đến giai đoạn Thủ tục sau thể tiếp cận Một mảng s, lưu điểm vừa bị cắt cho với biên cửa sổ Quá trình qua đỉnh p vào q trình clip_this để xem xét việc cắt với cạnh cửa sổ Nếu đoạn thẳng định nghĩa điểm đầu mút p s[edge] cắt cạnh cửa sổ này, giao điểm xác định qua để đến giai đoạn Nếu p nằm bên cửa sổ, bị bỏ qua để đến giai đoạn clipping Bất kì điểm cịn giữ lại sau xem xét với tất cạnh cửa sổ sau gia nhập vào mảng kết kết xuất x_out y_out Mảng first_point lưu giữ cho cạnh cửa sổ điểm bị cắt cạnh Sau tất đỉnh đa giác vừa xem xét xong, trình kết thúc cắt đoạn (đoạn định nghĩa điểm đầu cuối (các điểm bị cắt khỏi mỗi cạnh)) type point = array [1 max_points] of real; procedure polygon_clip (n : integer; x, y : points; var m : integer; var x_out, y_out : points); const boundary_count = 4; type vertex = array [1 2] of real; boundary_range = boundary_count; var k : integer; p : vertex; s, first_point : array [1 boudary_count] of vertex; new_edge : array [1 boundary_count] of boolean; function inside (p : vertex; edge : boundary_range) : boolean; begin {trả true đỉnh p nằm cạnh edge cửa sổ} end; { inside} Trang 78 Chương 4: Windowing Clipping function cross (p, s : vertex; edge : integer) : boolean; begin {trả true cạnh đa giác ps cắt biên cửa sổ} end; {cross} procedure output_vertex (p : vertex); begin m := m +1; x_out[m] := p[1]; y_out[m] := p[2]; end; { output_vertex } procedure find_intersection (p, s : vertex; edge : boundary_range; var i; vertex); begin {trả tham số i giao điểm ps với biên edge cửa sổ } end; { intersection } procedure clip_this (p : vertex; edge : boundary_range); var i : vertex; begin{ clip_this } {lưu điểm cắt biên cửa sổ} if new_edge[edge] then begin first_point[edge] := p; new_edge[edge] := false end {new_edge} else {nếu ps cắt biên cửa sổ, tìm giao điểm, cắt giao điểm khỏi cạnh cửa sổ} if cross (p, s[edge], edge) then begin find_intersection (p, s[edge], edge , i); if edge < boundary_count then clip_this (i, edge +1) else output_vertex (i) Trang 79 Chương 4: Windowing Clipping end; {nếu ps cắt cạnh} {cập nhật đỉnh lưu} s[edge] := p; {nếu p nằm bên cạnh cửa sổ này, cắt khỏi cạnh cửa sổ} if inside (p, edge) then if edge < boundary_count then clip_this (p, edge +1) else output_vertex (p) end; {clip_this} procedure clip_closer; {đóng q trình Đối với cạnh cửa sổ, cắt đường (đang nối với đỉnh lưu sau điểm first_point bị xử lý khỏi cạnh)} var i : vertex; edge : integer; begin for edge := to boundary_count if cross (s[edge], first_point[edge], edge) then begin find_intersection (s[edge], first_point[edge], edge, i); if edge < boundary_count then clip_this (i, edge +1) else output_vertex (i) end {nếu s first_point cắt cạnh} end; {clip_closer} begin {polygon_clip} m :=0; {số đỉnh kết xuất} for k := to boundary_count new_edge[k] := true; for k:= to n begin {đặt đỉnh vào đường ống (pipeline)} p[1] := x[k]; p[2] := y[k]; clip_this (p, 1) {cắt khỏi cạnh cửa sổ} end; {for k} Trang 80 Chương 4: Windowing Clipping clip_closer {đóng đa giác} end; { polygon_clip } Khi đa giác lõm bị cắt cửa sổ hình chữ nhật, vùng bị cắt sau hình thành hai đa giác riêng biệt thật Vì thuật toán cắt vùng tạo danh sách đỉnh, vùng riêng biệt nối lại đoạn thẳng nối Một ví dụ hiệu ứng thể hình 4-17 Sự xem xét đặt biệt thực trường hợp để gỡ bỏ đoạn nối dư thừa, thuật toán clipping tổng quát phát triển (xem hình 4-17) Hình 4-17: Clipping đa giác lõm hình (a) cửa sổ tạo hai vùng nối hình (b) Window (a) (b) Dù giới hạn việc thảo luận cửa sổ chữ nhật có cạnh song song với trục x trục y., cài đặt thuật tốn với cửa sổ có hình đa giác Chúng ta cần lưu trữ thông tin biên cửa sổ, cần thay đổi thủ tục inside find_intersection để quản lý thuộc tính biên tuỳ ý Một tiếp cận khác để clipping vùng đa giác dùng phương pháp phương trình tham số Các cửa sổ hình dạng tuỳ ý sau xử lí cách dùng phương trình tham số đường thẳng để mô tả hai: biên cửa sổ biên vùng bị cắt Các vùng bị clipping hình dạng khác đa giác cần thực nhiều cơng việc chút, biên vùng không định nghĩa phương trình Trang 81 Chương 4: Windowing Clipping đường thẳng Ví dụ, hình 4-18, phương trình đường trịn cần để tìm hai giao điểm biên cửa sổ Hình 4-18: Clipping vùng có hình dạng trịn Trước clipping Clipping văn (Text Clipping) Có vài kỹ thuật dùng để clipping văn gói đồ họa Việc chọn lựa phương pháp cụ thể để cài đặt phụ thuộc vào phương pháp dùng để sinh kí tự mức độ tinh vi đòi hỏi người dùng việc xử lí văn (xem hình 4-19) Hình 4-19 Clipping văn dùng biên chữ nhật Bất kỳ hình chữ nhật mà nằm đè lên biên cửa sổ bị vứt bỏ hoàn toàn Trước clipping Sau clipping Phương pháp đơn giản để xử lí chuỗi kí tự có liên quan đến biên cửa sổ dùng chiến lượt “clipping tất văn khơng clipping cả” (all-or-none text-clipping), trình bày hình 6-19 Nếu tất chuỗi kí tự nằm bên cửa sổ, giữ lại Ngược lại, chuỗi vứt bỏ Thủ tục cài đặt việc xem xét hình chữ nhật bao quanh mẫu văn Các vị trí biên hình chữ nhật sau so sánh với biên cửa sổ, chuỗi bị huỷ bỏ có nằm đè Phương pháp cho ta clipping nhanh Một chọn lựa để loại bỏ tồn chuỗi kí tự nằm đè lên biên cửa sổ dùng chiến lược “clipping kí tự tồn khơng” (all-or-none characterclipping) Ở vứt bỏ kí tự khơng hồn tồn nằm cửa Trang 82 Chương 4: Windowing Clipping sổ ( xem hình 4-20) Trong trường hợp này, giới hạn biên kí tự đơn lẻ so sánh với cửa sổ Bất kì kí tự nằm đè lên nằm bên biên cửa sổ bị cắt bỏ Hình 4-20 Các chuỗi kí tự hồn tồn bị cắt kí tự hồn nằm bên cửa sổ giữ lại Trước clipping Sau clipping Phương pháp sau cho việc quản lí việc cắt văn cắt kí tự riêng lẻ Bây xem kí tự tương tự đoạn thẳng Nếu kí tự riêng lẻ nằm đè lên biên cửa sổ, cắt bỏ phần nằm cửa sổ (xem hình 4-21) Các kí tự hình thành với đoạn thẳng xử lí theo cách này, cách dùng thuật tốn clipping đường Việc xử lí kí tự hình thành đồ bit cần clipping pixel đơn lẻ cách so sánh vị trí liên hệ mẫu lưới (patern grid) với biên cửa sổ Hình 4-21 Clipping kí tự đơn lẻ Trước clipping Sau clipping Tẩy xố (banking) Thay lưu giữ lại thơng tin vùng định nghĩa,, vùng cửa sổ dùng để xóa bỏ thứ bên biên Những nằm bên ngồi giữ lại Việc xố bỏ tất màu kết xuất vùng định có ý nghĩa thuận lợi cho việc nạp chồng hình ảnh khác Các kỹ thuật thường dùng để thiết kế trang trình bày (layout) quảng cáo ứng dụng xuất (publishing) cho việc thêm nhãn mẫu thiết hình ảnh Kỹ Trang 83 Chương 4: Windowing Clipping thuật dùng để nối kết biểu đồ, đồ, giản đồ Hình 4-22 minh họa vài ứng dụng tẩy xóa Khi hai hiển thị che phủ lên dùng đến phương pháp tẩy xóa, nghĩ đến cận cảnh (ảnh gần-foreground) lại xem ảnh (background) Một cửa sổ xóa, bao quanh vùng hiển thị cận ảnh, đặt lên ảnh nền, phần hình ảnh nằm vùng cửa sổ bị xóa Hai hiển thị nối kết lại, với thông tin cận ảnh đặt vào vùng cửa sổ bị xóa Hình 4-22 Các ví dụ tẩy xóa: (a) Một vùng cung cấp để dán nhãn; (b) Một vùng dùng để xóa phần hiển thị trước để tạo vùng trống cho nạp chồng ảnh lên (a) (b) 4.4 Phép biến đổi từ cửa sổ - đến – vùng quan sát Khi tất điểm, đoạn thẳng, văn vừa bị cắt, chúng á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 thực để vị trí tọa độ liên hệ giữ lại Trong hình 4-23, điểm vị trí (xw, yw) cửa sổ ánh xạ vị trí (xv, yv) vùng quan sát Để trì đặt liên hệ tương tự vùng quan sát cửa sổ, cần: xw − xwmin xv − xvmin = xwmax − xwmin xv max − xv (4-10) yw − ywmin yv − yv = ywmax − ywmin yvmax − yvmin (4-11) Ta viết lại phương trình (4-10) (4-11) phép tính biến đổi rõ ràng cho tọa độ xv yv: xv max − xv xv = ( xw − xwmin ) + xv (4-12) xwmax − xwmin yv max − yvmin yv = ( yw − ywmin ) + yv ywmax − ywmin Trang 84 Chương 4: Windowing Clipping Các phép tính biến đổi từ cửa sổ - đến - vùng quan sát viết chặt chẽ sau: xv = sx(xw - xwmin) + xvmin (4-13) yv = sy(yw - ywmin) + yvmin Phép biến đổi bao gồm hai phép biến đổi tỉ lệ tịnh tiến Các hệ số tỉ lệ sx sy phụ thuộc vào kích thước liên hệ cửa sổ vùng quan sát Các hệ số tỉ lệ phải đối tượng muốn bảo tồn cân đối (đồng dạng) chúng ánh xạ đến vùng quan sát Khi cửa sổ vùng quan sát có kích thước (sx = sy = 1), khơng có thay đổi kích thước đối tượng biến đổi Giá trị xvmin yvmin cho biết hệ số tịnh tiến để di chuyển đối tượng vào vùng quan sát Các chuỗi kí tự quản lí theo hai cách chúng ánh xạ đến vùng quan sát Việc ánh xạ đơn giản bảo tồn kích thước kí tự, chí vùng quan sát mở rộng hay thu nhỏ lại so với cửa sổ Phương pháp dùng đến văn tạo với font chuẩn – bị thay đổi Trong hệ thống mà có cho phép thay đổi kích thước kí tự chuẩn, định nghĩa chuỗi đặt cửa sổ tương tự từ gốc Đối với kí tự hình thành đoạn thẳng, việc ánh xạ đến vùng quan sát thực dãy phép biến đổi đường (xem hình 4-23) y y ywmax (xw, yw) • yvmax (xv, yv) • ywmin yvmin xwmin xwmax x xvmin xvmax x Hình 4-23: Một điểm vị trí (xw, yw) cửa sổ ánh xạ đến điểm (xv, yv) vùng quan sát Việc ánh xạ thực cho tỷ lệ tương quan hai vùng tương tự Trang 85 Chương 4: Windowing Clipping 4.5 Tổng kết chương - Cần nắm vững khái niệm Window, cách mã vùng theo giải thuật CohenSutherland Phân biệt điểm thuộc không thuộc window - Lưu ý cách sử dụng phương trình tham số đường thẳng giải thuật Liang-Barsky - Có thể hiệu chỉnh thuật toán xén đoạn thẳng để xén đa giác cách xem đa giác tập đoạn thẳng liên tiếp nối với Tuy nhiên, kết xén tập đoạn thẳng rời - Lưu ý điều mong muốn kết sau xén đa giác phải đa giác để chuyển thành vùng tô 4.6 Bài tập chương Viết chương trình tạo cửa sổ hình chữ nhật có tọa độ điểm bên trái điểm bên phải (Xmin, Ymin) (Xmax, Ymax) Tiếp tục 1, xét điểm P(x,y) có nằm bên cửa sổ khơng ? Biết P(x,y) nằm bên cửa sổ P thoả hệ bất phương trình sau : Xmin ≤ x ≤ Xmax Ymin ≤ y ≤ Ymax Tiếp tục tập 2, xét toán xén đoạn thẳng cho điểm P1(x1, y1), P2(x2, y2) Tiếp tục tập 3, sử dụng thuật toán Cohen - Sutherland (phân chia mã vùng) xét toán xén đoạn thẳng cho điểm P1(x1, y1), P2(x2, y2), P3(x3, y3), P4(x4, y4), P5(x5, y5), P6(x6, y6), P7(x7, y7), P8(x8, y8) vào cửa sổ chữ nhật xem hình vẽ (a) (b)) Thảo luận kỹ nhân tố đằng sau kiểm tra phương khác để tính tham số giao u1 u2 thuật toán clipping đường LiangBarsky Trang 86 Chương 4: Windowing Clipping So sánh số lượng phép tính tốn học thực thuật toán clipping đường Cohen-Sutherland Liang-Barsky vài hướng đoạn thẳng khác liên quan đến cửa sổ clipping Cài đặt thuật toán thuật toán clipping đường Liang-Barsky lên hệ thống bạn Hãy nghĩ thuật toán để thực việc clipping đường cách dùng phương pháp phân chia điểm Sự cài đặt phần mềm thuật toán có thuận lợi hai thuật tốn clipping đường thảo luận chương không? Cài đặt thuật toán cắt đoạn thẳng cách dùng cửa sổ bị quay, định nghĩa giá trị tọa độ nhỏ lớn bị quay góc hình 6-5 10 Thay đổi thuật toán clipping đa giác để cắt vùng đa giác lõm cách hợp lý (Một phương pháp để thực điều chia đa giác lõm làm đa giác lồi.) 11 Sửa lại cho hợp lí thuật tốn clipping đường Liang-Barsky để clipping đa giác 12 Viết thủ tục để cắt ellipse cách dùng cửa sổ chữ nhật 13 Giả sử kí tự định nghĩa lưới điểm (pixel grid), phát triển thuật toán clipping văn để cắt kí tự đơn lẻ theo chiến lược “tất - 14 không” Hãy phát triển thuật tốn clipping văn để cắt kí tự đơn lẻ, giả sử kí tự định nghĩa lưới điểm (pixel grid) 15 Viết thủ tục thực xóa phần hình ảnh định nghĩa, dùng kích thước cửa sổ xóa xác định 16 Viết thủ tục để cài đặt lệnh cứa sổ vùng quan sát Tức là, thủ tục có chứa tham số hệ tọa độ lệnh để thực biến đổi sang vùng quan sát cho cảnh cụ thể: clipping hệ tọa độ giới thực, chuyển đổi sang hệ tọa độ chuẩn hóa, sau biến đổi đến hệ tọa độ thiết bị Trang 87 ... yi +1 = yi - Mặt khác : Pi +1 - Pi = F(xi +1 +1, yi +1 - 1/ 2) - F(xi + 1, yi - 1/ 2) = [(xi +1 +1) 2 + (yi +1 - 1/ 2)2 - R2 ] - [(xi +1) 2 + (yi - 1/ 2)2 - R2 ] = 2xi + + ((yi +1) 2 + (yi)2 ) - (yi +1 - yi)... tức yi +1= yi - Nếu d1-d2 ≥0 : chọn điểm P2, tức yi +1= yi +1 Xét Pi = Δx (d1 - d2) Ta có : d1 - d2 = yi +1 - 2yi - = 2m(xi +1) + 2b - 2yi - Pi = Δx (d1 - d2) = Δx[2m(xi +1) + 2b - 2yi - 1] ⇒ = Δx[2... d2 = y2 - (yi - 1) 2 = (R 2- (xi + 1) 2 ) - (yi - 1) 2 Pi = d1 - d2 Tính Pi +1 - Pi ⇒ Pi +1 = Pi + 4xi + + 2((yi +1) 2 - (yi)2 ) - 2(yi +1 - yi) - Nếu Pi < : chọn yi +1 = yi Khi Pi +1 = Pi + 4xi +6 - Nếu