Line Clipping in 2D - Xén đường thẳng trong 2D

23 240 0
Line Clipping in 2D - Xén đường thẳng trong 2D

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Line Clipping in 2D Xén đường thẳng 2D Giới thiệu Thao tác loại bỏ phần hình ảnh nằm vùng cho trước gọi xén hình Chúng ta xén hình trước vẽ hay tính toán: không cần thiết tính toán cho vùng nằm Mô hình toán xén đường thẳng • Clipping Window - cửa sổ xén: định nghĩa điểm – Phía bên trái: (xmin, ymin) – Phía bên phải: (xmax, ymax)  xmin ≤ x ≤ xmax Điểm P(x,y) thuộc Clipping Window :   ymin ≤ y ≤ ymax (xmax, ymax) (xmin, ymin) Mô hình toán xén đường thẳng (cont.) • Đường thẳng bị xén P1P2 có tọa độ P1(x1,y1) P2(x2,y2) P1 P2 Yêu cầu toán xén đường thẳng Loại bỏ phần đường thẳng nằm cửa sổ xén Các nhận xét Các đoạn thẳng có điểm hoàn toàn nằm cửa sổ đoạn thẳng nằm cửa sổ nên không cần xén Các nhận xét (cont.) Các đoạn thẳng có điểm nằm phía cửa sổ xén đoạn thẳng nằm cửa sổ bị xén TOP LEFT RIGHT BOTTOM Các nhận xét (cont.) Với đoạn thẳng cắt biên cửa sổ xén, phải tìm giao điểm đoạn thẳng với biên cửa sổ để chọn phần nằm bên cửa sổ Thuận toán Cohen – Sutherland AREA CODE – Mã vùng Kéo dài biên cửa sổ, ta chia mặt phẳng thành chín vùng gồm cửa sổ xén tám vùng xung quanh top-left top top-right left inside right bottom-left bottom bottom-right Thuận toán Cohen – Sutherland AREA CODE – Mã vùng (cont.) • • • Một số nguyên gồm bit nhị phân gọi mã vùng gán cho vùng để mô tả vị trí vùng so với cửa sổ Các vùng nằm biên trái (LEFT) cửa sổ xén có bit Các vùng lại có bit Tương tự cho bit từ đến 4: bit 2: RIGHT; bit 3: TOP; bit 4: BOTTOM 0101 0100 TOP 0110 LEFT 0001 1001 0000 1000 0010 1010 RIGHT BOTTOM B T R L 10 Thuận toán Cohen – Sutherland Mã vùng điểm LEFT RIGHT TOP BOTTOM 0 int Encode(Point p) { int code = 0; if (p.x < xmin) if (p.x > xmax) if (p.y > ymax) if (p.y < ymin) return code; } 0 0 0 0 0000 0110 0010 P(x,y) =1 =2 =4 0010 0000 OR 0100 0010 =8 code |= LEFT; code |= RIGHT; code |= TOP; code |= BOTTOM; Các giá trị bit mã vùng tính cách so sánh giá trị tọa độ điểm P(x,y) với biên cửa sổ Ví dụ, bit đặt x < xmin, bit đặt x >= xmin 11 Thuật toán Tính mã vùng tương ứng cho điểm đầu cuối đoạn thẳng P1 P2 đoạn thẳng cần xén c1 c2 Dựa vào giá trị c1 c2, ta có trường hợp sau: Các đoạn thẳng nằm hoàn toàn bên cửa sổ có c1 == c2 == 0000, đoạn thẳng sau xén nên thuật toán dừng 0000 0000 12 Thuật toán (cont.) Các đoạn thẳng nằm biên cửa sổ có đặc điểm sau : tồn bit thứ k (k=1, ,4) cho c1 c2 có giá trị bit thứ k Ví dụ, k = đoạn thẳng nằm biên trái cửa sổ Đoạn thẳng bị loại bỏ sau xén, thuật toán dừng Khi cài đặt, cần sử dụng phép toán AND bit c1 c2 Nếu kết khác 0, đoạn thẳng nằm biên cửa sổ 0101 0101 AND 0001 -0001 ≠0 0110 0110 AND 1010 -0010 ≠0 0001 1010 13 Thuật toán (cont.) Nếu c1 c2 không thuộc hai trường hợp trên, chắn đoạn thẳng cắt biên cửa sổ Chúng ta xác định giao điểm Trong trường hợp này, có đầu đoạn thẳng nằm cửa sổ, không tính tổng quát giả sử P1 Giả sử P’1 giao điểm đoạn thẳng với biên cửa sổ Lúc này, đoạn thẳng ban đầu xén thành P’1P2 Bây giờ, xem P’1P2 đoạn thẳng áp dụng thao tác xén trường hợp để xén đoạn thẳng đoạn thẳng xén nằm hoàn toàn bên cửa sổ hay nằm biên cửa sổ P2 P1 P’1 14 Lưu đồ Begin c1=Encode(P1) c2=Encode(P2) P2 P1 P’1 c1==0 && c2==0 Yes (c1&c2)!=0 Yes Gọi P’1 giao điểm P1P2 biên cửa sổ P1 = P’1 End 15 Xác định giao điểm đoạn thẳng cửa sổ xén Bằng cách xét mã vùng c1 P1 , ta xác định đoạn thẳng cắt biên tiến hành xác định giao điểm P’1 đoạn thẳng với biên P’1 P2 0001 P1 0001 AND 0001 -0001 ≠0 P2 P1 0110 AND 0010 -0010 ≠0 P’1 LEFT 0110 RIGHT 16 Xác định giao điểm đoạn thẳng cửa sổ xén (cont.) Giao điểm đoạn thẳng với biên trái (c1 & LEFT != 0): • m = (P2.y – P1.y) / (P2.x – P1.x) • P’1.y = P1.y + m (xmin – P1.x) • P’1.x = xmin P2 P1 P’1 xmin LEFT 17 Xác định giao điểm đoạn thẳng cửa sổ xén (cont.) Giao điểm đoạn thẳng với biên phải (c1 & RIGHT != 0): • m = (P2.y – P1.y) / (P2.x – P1.x) • P’1.y = P1.y + m (xmax – P1.x) • P’1.x = xmax P’1 P1 P2 xmax RIGHT 18 Xác định giao điểm đoạn thẳng cửa sổ xén (cont.) Giao điểm đoạn thẳng với biên (c1 & TOP != 0): • m = (P2.x – P1.x) / (P2.y – P1.y) • P’1.x = P1.x + m (ymax – P1.y) • P’1.y = ymax P1 P’1 ymax P2 TOP 19 Xác định giao điểm đoạn thẳng cửa sổ xén (cont.) Giao điểm đoạn thẳng với biên (c1 & BOTTOM != 0): • m = (P2.x – P1.x) / (P2.y – P1.y) • P’1.x = P1.x + m (ymin – P1.y) • P’1.y = ymin P2 P’1 ymin P1 BOTTOM 20 Xác định giao điểm với biên cửa sổ c1==0 Yes SwapPoint(P1, P2) SwapInt(c1, c2) (c1&LEFT)!=0 Yes P’1.y = P1.y + m (xmin – P1.x) P’1.x = xmin (c1&RIGHT)!=0 Yes P’1.y = P1.y + m (xmax – P1.x) P’1.x = xmax (c1&TOP)!=0 Yes P’1.x = P1.x + m (ymax – P1.y) P’1.y = ymax (c1&BOTTOM)!=0 Yes P’1.x = P1.x + m (ymin – P1.y) P’1.y = ymin Kết thúc xác định giao điểm 21 Ví dụ 1001 1000 1010 0001 0000 0010 0101 0100 0110 22 Câu hỏi & Bài tập • • Khi tính giá trị m, đường thẳng nằm ngang hay thẳng đứng, có bị tràn số (/ cho 0) hay không? Cài đặt hàm CohenSutherland để xén đường thẳng: int CohenSutherland(Point &P1, Point &P2); – – – – • P1P2 đoạn thẳng cần xén return 0: đoạn thẳng bị xén return 1: đoạn thẳng xén; P1 P2 điểm sau xén xmin, xmax, ymin, ymax số xác định cửa sổ xén Viết chương trình demo cho thuật toán Cohen-Sutherland: Vẽ cửa sổ xén dựa giá trị xmin, xmax, ymin, ymax Gán giá trị cho điểm P1 P2 Vẽ đoạn P1P2 với màu RED Chạy thuật toán CohenSutherland cho điểm P1, P2 Nếu thuật toán thành công (return 1) vẽ đoạn P1P2 với màu BLUE • Tham khảo thuật toán xén đường thẳng Liang-Barsky 23

Ngày đăng: 27/08/2017, 00:07

Từ khóa liên quan

Mục lục

  • Line Clipping in 2D Xén đường thẳng trong 2D

  • Giới thiệu

  • Mô hình bài toán xén đường thẳng

  • Mô hình bài toán xén đường thẳng (cont.)

  • Yêu cầu của bài toán xén đường thẳng

  • Các nhận xét

  • Các nhận xét (cont.)

  • Slide 8

  • Thuận toán Cohen – Sutherland

  • Thuận toán Cohen – Sutherland AREA CODE – Mã vùng (cont.)

  • Thuận toán Cohen – Sutherland Mã vùng của điểm

  • Thuật toán

  • Thuật toán (cont.)

  • Slide 14

  • Lưu đồ

  • Xác định giao điểm của đoạn thẳng và cửa sổ xén

  • Xác định giao điểm của đoạn thẳng và cửa sổ xén (cont.)

  • Slide 18

  • Slide 19

  • Slide 20

Tài liệu cùng người dùng

Tài liệu liên quan