Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 19 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
19
Dung lượng
129,5 KB
Nội dung
13.11.2004 1 Hình Hoïc Tính Toaùn 13.11.2004 Chương 35: Hình học tính toán 2 35.2 Xác đònh có cặp đoạn thẳng nào cắt nhau không Bài toán: Cho tập các đoạn thẳng trong mặt phẳng. Xác đònh có cặp đoạn thẳng nào cắt nhau hay không. ª Để đơn giản, giả sử: – Không có đoạn thẳng nào là thẳng đứng – Không có ba đoạn thẳng nào cắt nhau tại một điểm chung. 13.11.2004 Chương 35: Hình học tính toán 3 Giải thuật thô sơ ª Giải thuật thô sơ: Kiểm tra xem mỗi cặp đoạn thẳng có cắt nhau hay không. Thời gian chạy là Θ(n 2 ), với n là số các đoạn thẳng. 13.11.2004 Chương 35: Hình học tính toán 4 Kỹ thuật quét ª Giải thuật hữu hiệu dùng kỷ thuật quét (sweeping): Dùng một đưòng thẳng thẳng đứng quét từ trái sang phải và xem xét các thay đổi của phần giao của đường thẳng quét với các đoạn thẳng. – Đường thẳng quét (sweep line) ° Đường thẳng quét thẳng đứng, vò trí hiện thời là toạ độ x x 13.11.2004 Chương 35: Hình học tính toán 5 Thứ tự các đoạn thẳng ° Đònh nghóa một thứ tự hoàn toàn trên các đoạn thẳng cắt bởi đường thẳng quét. – Hai đoạn thẳng s 1 và s 2 không cắt nhau là có thể so sánh được tại x nếu đường thẳng quét tại vò trí x cắt cả hai đoạn thẳng đó. – Nếu s 1 và s 2 là có thể so sánh được tại x và giao điểm của s 1 với đường thẳng quét ở cao hơn giao điểm của s 2 với cùng đường thẳng quét đó, thì ta nói s 1 ở trên s 2 , ký hiệu s 1 > x s 2 . s 2 s 1 13.11.2004 Chương 35: Hình học tính toán 6 a b c d e g h f i r t u v z w (a) (b) a > r c a > t b b > t c a > t c b > u c Đoạn thẳng d không so sánh được với các đoạn thẳng khác trong hình (a). e > v f nhưng f > w e Mọi đường thẳng quét mà đi qua vùng xám đều có các đoạn thẳng e và f ở liên tiếp nhau trong quan hệ thứ tự của nó Thứ tự các đoạn thẳng (tiếp) 13.11.2004 Chương 35: Hình học tính toán 7 Các cấu trúc dữ liệu trong kỹ thuật quét – Đường thẳng quét ° Khi di chuyển đường thẳng quét, giải thuật trữ và duy trì các thông tin sau – Tình trạng của đường thẳng quét (sweep-line status): cho biết thứ tự giữa các đối tượng (đoạn thẳng) bò cắt bởi đường thẳng quét với nhau – Lòch của các biến cố (event-point schedule): dãy các tọa độ x, sắp từ trái sang phải, xác đònh các vò trí dừng của đường thẳng quét. 13.11.2004 Chương 35: Hình học tính toán 8 Các thao tác lên sweep-line status ª Chi tiết giải thuật hữu hiệu dùng kỷ thuật quét – Đường thẳng quét ° Khi di chuyển đường thẳng quét, giải thuật trữ và duy trì các thông tin sau – Tình trạng của đường thẳng quét (sweep-line status): Các thao tác lên T: ° INSERT(T, s): chèn đoạn thẳng s vào T ° DELETE(T, s): xoá đoạn thẳng s khỏi T ° ABOVE(T, s): trả về đoạn thẳng ở ngay trên s trong T ° BELOW(T, s): trả về đoạn thẳng ở ngay dưới s trong T. 13.11.2004 Chương 35: Hình học tính toán 9 Event-point schedule – Lòch của các biến cố (event-point schedule): dãy các tọa độ x, sắp từ trái sang phải, xác đònh các vò trí dừng của đường thẳng quét. ° Mỗi điểm đầu mút của các đoạn thẳng (của tập input S) là một điểm biến cố (event point), là điểm mà thứ tự T thay đổi. ° Lòch của các biến cố là tónh và được xây dựng bằng cách sắp xếp các điểm đầu mút của các đoạn thẳng theo thứ tự từ trái qua phải. 13.11.2004 Chương 35: Hình học tính toán 10 Xác đònh có cặp đoạn thẳng nào cắt nhau không ANY-SEGMENTS-INTERSECT(S) 1 T ← ∅ 2 Sắp các điểm đầu mút của các đoạn thẳng trong S theo thứ tự từ trái sang phải, breaking ties 3 for mổi điểm p trong danh sách sắp xếp của các điểm đầu mút 4 do if p là điểm đầu mút bên trái của đoạn thẳng s 5 then INSERT(T, s) 6 if (ABOVE(T, s) tồn tại và cắt s) hay (BELOW(T, s) tồn tại và cắt s) 7 then return TRUE 8 if p là điểm đầu mút bên phải của đoạn thẳng s 9 then if cả hai ABOVE(T, s) và BELOW(T, s) đều tồn tại và ABOVE(T, s) cắt BELOW(T, s) 10 then return TRUE 11 DELETE(T, s) 12 return FALSE [...]... tới) 25.9.2004 Chương 11 : Giao 11 Xác đònh hai đoạn thẳng có cắt nhau không (tiếp) (tiếp) 7 8 9 10 11 12 13 14 15 25.9.2004 elseif d1 = 0 and ON-SEGMENT(p3, p4, p1) then return TRUE elseif d2 = 0 and ON-SEGMENT(p3, p4, p2) then return TRUE elseif d3 = 0 and ON-SEGMENT(p1, p2, p3) then return TRUE elseif d4 = 0 and ON-SEGMENT(p1, p2, p4) then return TRUE else return FALSE Chương 11 : Giao 12 Xác đònh hai... (tiếp) – Thủ tục để kiểm tra hai đoạn thẳng p1p2 và p3p4 có cắt nhau không (mã giả) Thủ tục trả về TRUE nếu hai đoạn thẳng cắt nhau và trả về FALSE nếu chúng không cắt nhau SEGMENTS-INTERSECT(p1, p2, p3, p4) 1 2 3 4 5 6 d1 ← DIRECTION(p3, p4, p1) d2 ← DIRECTION(p3, p4, p2) d3 ← DIRECTION(p1, p2, p3) d4 ← DIRECTION(p1, p2, p4) if ((d1 > 0 and d2 < 0) or (d1 < 0 and d2 > 0)) and ((d3 > 0 and d4 < 0) or... Output: TRUE nếu pk nằm trên đoạn pi pj FALSE nếu pk nằm ngoài đoạn pi pj DIRECTION(pi , pj , pk ) 1 return (pk − pi ) × (pj − pi ) ON-SEGMENT(pi , pj , pk ) 1 2 3 if min(xi , xj ) ≤ xk ≤ max(xi , xj ) and min(yi , yj ) ≤ yk ≤ max(yi , yj ) then return TRUE else return FALSE 25.9.2004 Chương 11 : Giao 13 . 13 .11 . 2004 1 Hình Hoïc Tính Toaùn 13 .11 . 2004 Chương 35: Hình học tính toán 2 35.2 Xác đònh có cặp đoạn thẳng nào cắt nhau không Bài toán: Cho tập các đoạn thẳng. z q q q p z q p z q z p q z 13 .11 . 2004 Chương 35: Hình học tính toán 16 Tính đúng đắn (tiếp) Trường hợp 2: các đoạn thẳng a và b đang trong T, và một đoạn thẳng ở giữa chúng được xóa. Các dòng 8 -11 tìm thấy. sắp xếp các điểm đầu mút ở dòng 2 của ANY-SEGMENTS-INTERSECT 13 .11 . 2004 Chương 35: Hình học tính toán 13 Tính đúng đắn ª Theorem 35 .1 (Tính đúng đắn) Giải thuật ANY-SEGMENTS-INTERSECT chạy trên