Luận văn: Một số tính chất của môđun đồng điều địa phương, HAY
Line segment intersection introduction
1. Line Segment Intersection
TRÌNH BÀY:
KIM Đ Ì NH S Ơ N , LÊ K H ẮC T U Ấ N
KHOA H Ọ C MÁY T ÍNH , V I Ệ N CÔNG N G H Ệ T HÔNG T IN VÀ T R U Y Ề N T HÔNG , Đ H B Á C H KHOA HÀ N Ộ I
2. Nội dung trình bày
Giới thiệu
Đặt vấn đề
Bài toán Line Segment Intersection
Giải thuật Plane Sweep
Đánh giá thuật toán
Kết luận
Tuan LK - Son KD LINE SEGMENT INTERSECTION 2
3. Giới thiệu
Bản đồ quan trọng với các chuyến di chuyển, du lịch
Các loại bản đồ: bản đồ chứa thông tin các tuyến đường, bản đồ
chứa thông tin các thành phố, bản đồ chứa thông tin các con sông,….
Tuan LK - Son KD LINE SEGMENT INTERSECTION 3
4. Map layers
Trong hệ thống thông
tin địa lý (GIS), dữ liệu
được lưu trữ dưới dạng
các lớp riêng biệt
4
Cities, rivers, railroads, and their
overlay in western Canada
Map layers
Tuan LK - Son KD LINE SEGMENT INTERSECTION
5. Đặt vấn đề
Map overlay: là tổ hợp 2 hoặc nhiều hơn 2 các Map layer với
nhau
Ta cần giải quyết các vấn đề như:
Tổng chiều dài các con đường cắt qua cánh rừng là bao nhiêu?
Tổng diện tích cánh đồng lúa trong phạm vi 1Km từ khúc sông là
bao nhiêu?
Để giải các bài toán về Map overlay, cần xét đến bài toán giao
cắt mà (ít nhất) từ 2 tập các đoạn thẳng (ranh giới các khu vực)
Tuan LK - Son KD LINE SEGMENT INTERSECTION 5
6. Giới thiệu
Đường đi (trong road map), khúc sông (trong river map), …
được mô tả bởi một chuỗi các đoạn thẳng
Các đường cong được xấp xỉ bởi các phân đoạn nhỏ
Khi số hóa dữ liệu, các vị trí được đánh dấu bằng từng điểm
Sai số khi xây dựng các đối tượng
Xuất hiện các yêu cầu cần xử lý từ phương diện hình học đối
với các đoạn thẳng
LINE Tuan LK - Son KD SEGMENT INTERSECTION 6
7. Bài toán Line Segment Intersection
Input:
• Một tập S bao gồm n đoạn thẳng
Output:
• Đưa ra tất cả các giao điểm của các cặp
đoạn thẳng trong tập S
Tuan LK - Son KD LINE SEGMENT INTERSECTION 7
8. Độ phức tạp thuật toán
Xét đơn thuần tìm giao điểm từng cặp cạnh 푂(푛2)
⟹Thời gian tính toán của một thuật toán tổng quát Ω(푛2)
Trong bài toán mô hình thực tế, số giao điểm bé hơn rất nhiều so
với 푛2.
Thuật toán thời gian chạy không phụ thuộc vào số lượng đoạn
thẳng đầu vào mà phụ thuộc số lượng điểm giao
Output-sensitive algorithm
Intersection-sensitive
LINE Tuan LK - Son KD SEGMENT INTERSECTION 8
9. Plane Sweep Algorithm
Xét trong hệ tọa độ Descartes:
푃 푠푖 : hình chiếu của 푠푖 trên trục y (hoặc trục x)
Điều kiện cần 푠푖 giao với 푠푗, 푃 푠푖 chứa điểm chung 푃 푠푗
Cần kiểm tra các đoạn có hình chiểu đè lên nhau
Plane Sweet Algorithm: (Giải thuật đường truy quét)
Sử dụng một đường thẳng 푙 song song với trục x : sweep line
Giá trị khởi tạo đường thẳng 푙 nằm phía trên tất cả các đoạn thẳng
Di chuyển theo giảm dần theo giá trị của y
Biểu diễn các điểm cắt theo chiều 푂푥 từ trái sang phải
Hai đoạn được xét láng giềng khi điểm cắt với (푙) là liên tiếp
푃 푠1 , 푃 푠2 , 푃 푠4 , 푃 푠6 , 푃 푠5 , 푃 푠6 ,
LINE Tuan LK - Son KD SEGMENT INTERSECTION 9
10. Plane Sweep Algorithm
Status:
Tập các đoạn giao cắt với đường sweepline
Trạng thái được cập nhật khi sweet line đi
qua cac evenpoint nhưng không liên tục
Event points: Tập hợp các điểm làm thay đổi
trạng thái của sweet line
Tuan LK - Son KD LINE SEGMENT INTERSECTION 10
11. Plane Sweep Algorithm
Sweep line
Xóa
Cập nhật
Cập nhật
Tuan LK - Son KD LINE SEGMENT INTERSECTION 11
12. Bổ đề 1
Cho hai đoạn thẳng 푠푖 và 푠푗 không song song với trục
푂푥, hai đoạn thẳng này cắt nhau tại một điểm 풑.
Không tồn tại một đoạn thẳng thứ ba nào đi qua điểm
풑. Khi đó tồn tại một đường sweetline nằm phía trên
điểm 풑 sẽ giao hai đường 푠푖 và 푠푗 là láng giềng để kiểm
tra điểm cắt.
Tuan LK - Son KD LINE SEGMENT INTERSECTION 12
13. Các điểm Event Point
Event point
Đầu mút bắt đầu đoạn
thẳng
Event point
Điểm giao được xác định
Event point
Đầu mút kết thúc đoạn
thẳng
Tuan LK - Son KD LINE SEGMENT INTERSECTION 13
14. Plane Sweep Algorithm
Các trường hợp không xét tới (suy biến)
Tuan LK - Son KD LINE SEGMENT INTERSECTION 14
15. Plane Sweep Algorithm
Ví dụ: theo thứ tự từ trái sang phải,
푠푘 , 푠푙 giao nhau, khi đường truy
quét qua điểm giao, cần kiểm tra
cặp (푠푗 , 푠푙 ) và (푠푘 , 푠푚) có giao nhau
hay không?
푠푗 푠푘 푠푙 푠푚 ℓ
ℓ
Tuan LK - Son KD LINE SEGMENT INTERSECTION 15
24. Plane Sweep Algorithm
푠1
푠4
푠3 푠2
푠5
푠7
푠6
푠8
report intersection
(푠3; 푠4);
swap 푠3 and 푠4
Tuan LK - Son KD LINE SEGMENT INTERSECTION 24
25. Tổ chức lưu trữ Event Point
Cấu trúc dữ liệu
event queue (풬): lưu trữ các sự kiện
Operation: removes, next event, returns, insertions
Nếu 2 điểm sự kiện cùng tọa độ y, khi đó trả về tọa độ x nhỏ hơn (đảm bảo việc sắp xếp theo
thứ tự từ trái qua phải)
Lưu ý: 2 điểm sự kiện có thể trùng nhau, do đó trong phép insertion phải khả năng kiểm tra
trước các sự kiện đã tồn tại trong 풬 hay chưa?
Tuan LK - Son KD LINE SEGMENT INTERSECTION 25
26. Tổ chức lưu trữ Event Point
Cấu trúc dữ liệu (tiếp)
Ký hiệu ≺ là phép so sánh trong thứ tự sắp xếp từ trái sang phải
풑, 풒 là 2 điểm sự kiện, khi đó: 풑 ≺ 풒 ⟺ 풑풚 > 풒풚 hoặc 풑풚 =
풒풚, 풑풙 < 풒풙
Lưu trữ các đoạn thẳng trong một cây tìm kiếm nhị phân cân
bằng, sắp xếp theo ≺
Với mỗi 푝 ∈ 풬, lưu trữ các đoạn bắt đầu từ 푝 (các đoạn có điểm
mút nằm trên 푝)
Opetation: insert, delete, swap
Thời gian tính: 푂(log 푚)
Tuan LK - Son KD LINE SEGMENT INTERSECTION 26
27. Cấu trúc Status
Xác định bằng tập 풯, được dùng để truy cập vào lân cận của một đoạn
푠 nào đó, mà ta có thể kiểm tra phép giao với 푠.
Các đoạn cắt đường truy quét được sắp xếp ở lá của cây nhị phân tìm
kiếm cân bằng 풯.
풯 cây nhị phân cân bằng
Xét theo thứ tự thăm cây nhị phân: trái - giữa - phải : tương ứng với thứ tự
giao điểm của đường quét với các đoạn thẳng
Xác định đoạn láng giềng bên trái, láng giềng bên phải
Chi phí thời gian cho cập nhât, tìm kiếm cần 푂(log 푛)
Tuan LK - Son KD LINE SEGMENT INTERSECTION 27
28. Algorithm Find Intersections
Algorithm FINDINTERSECTIONS(S)
Input. S là tập các đoạn thẳng trong mặt phẳng.
Output. Tập các giao điểm giữa các đoạn thẳng thuộc S, with for each
intersection point the segments that contain it.
1. Khởi tạo hàng đợi 풬 = ∅ . Tiếp theo, insert vào các đầu mút đoạn thẳng
(đầu mút trên và dưới) khi đầu mút trên đã được chèn vào, thông tin đoạn
thẳng tương ứng sẽ được lưu trữ bằng 2 đầu mút này.
2. Khởi tạo cấu trúc status 풯 là ∅.
3. while 풬 ≠ ∅
4. do Xác định điểm sự kiện tiếp theo, đính vào 풬 and xóa.
5. HANDLEEVENTPOINT(푝)
Tuan LK - Son KD LINE SEGMENT INTERSECTION 28
29. Hanle Event Point
Nếu event là upper endpoint event, và 푠 là đoạn thẳng
bắt đầu tại 푝:
1. Tìm kiếm theo 푝 ∈ 풯, và insert 푠
2. Nếu 푠 giao với láng giềng trái của nó trong 풯, khi đó
xác định giao điểm này và insert vào 풬
3. Nếu 푠 giao với láng giềng phải trong 풯, khi đó xác
định giao điểm này và insert vào 풬
Tuan LK - Son KD LINE SEGMENT INTERSECTION 29
30. Hanle Event Point
Nếu event là lower endpoint event, và 푠 là đoạn thẳng ket
thúc tại 푝:
1. Tìm kiếm theo 푝 trong 풯, và xóa bỏ 푠
2. Gọi 푠푙 và 푠푟 theo thứ tự là láng giềng trái và phải của
푠 trong 풯. Nếu chúng giao nhau dưới đường truy
quét, khi đó thêm điểm giao này vào 풬
Tuan LK - Son KD LINE SEGMENT INTERSECTION 30
31. Hanle Event Point
Nếu event là intersection point event, và 푠 và 푠′ là 2 đoạn
thẳng giao nhau tại 푝:
1. Hoán đổi thứ tự 푠 và 푠′ trong 풯
2. Nếu 푠′ và láng giềng trái mới của nó trong 풯 giao nhau
dưới đường truy quét, khi đó chèn điểm giao này vào 풬
3. Nếu 푠 và láng giềng trái mới của nó trong 풯 giao nhau
dưới đường truy quét, khi đó chèn điểm giao này vào 풬
4. Đưa ra giao điểm
Tuan LK - Son KD LINE SEGMENT INTERSECTION 31
32. Algorithm Find New Event
FINDNEWEVENT(푠푙 , 푠푟 , 푝)
1. if 푠푙 và 푠푟 giao nhau dưới đường truy quét (푙), hoặc nằm trên (푙) và nằm bên phải điểm sự
kiện hiện tại tại 푝, và điểm giao này chưa xuất hiện trong 풬 như là một điểm sự kiện
2. then chèn điểm giao này vào 풬
Tuan LK - Son KD LINE SEGMENT INTERSECTION 32
33. Bổ đề về giải thuật tìm các giao cắt
Bổ đề 1: Thuật toán FINDINTERSECTIONS tính được chính xác tất cả các giao điểm và các đoạn
thẳng giao
Bổ đề 2: Thời gian chạy của thuật toán FINDINTERSECTIONS cho tập S với n đoạn thẳng trong
mặt phẳng là O(n log n + I log n), trong đó I là số các giao điểm của các đoạn thẳng thuộc S.
Định lý: Gọi 푆 là tập bao gồm 푛 đoạn thẳng trong mặt phẳng. Tất cả các giao điểm của các đoạn
thẳng thuộc 푆 cũng thuộc 푆, có thể đưa ra với thời gian chạy là 푂(푛 푙표푔 푛 + 퐼 푙표푔 푛), và không
gian 푂 푛 , trong đó 퐼 là số các giao điểm của các đoạn thẳng thuộc 푆.
Tuan LK - Son KD LINE SEGMENT INTERSECTION 33
34. Câu hỏi
Tuan LK - Son KD LINE SEGMENT INTERSECTION 34
35. Xin cảm ơn!
Tuan LK - Son KD LINE SEGMENT INTERSECTION 35
Notes de l'éditeur
Layers
Overlay: che phủ -> tính trong suốt
Thematic Map Overlay
Intersection points
Layers
Overlay: che phủ -> tính trong suốt
- Thematic Map Overlay: Map overlay is the combination of two (or more) map layers
Intersection points
- Roads in a road map and rivers in a river map are represented by
chains of segments.
the intersection point could happen to coincide with an endpoint of a segment of a chain
Thực tế khi số hóa dữ liệu bản đồ, các vị trí sẽ được đánh dấu bằng từng điểm, với sai số cho phép, khi dựng lại các đối tượng (roads, rivers, …) sẽ nối các điểm này lại
Để đơn giản, gộp tất cả các đoạn thẳng thành một tập, từ đó xác định các điểm giao. Bài toán thực tế: từ các điểm giao này, xác định lại tập các chuỗi đoạn thẳng ban đầu -> chỉ cần kiểm tra các điểm nối có thuộc cùng một tập hay không
Yêu cầu một thuật toán không chỉ phụ thuộc vào n—số lượng các đoạn đầu vào mà còn dựa vào số điểm giao nhau
Có nghĩa cho các loại bản đồ khác nhau
Output-sensitive algorithm: http://en.wikipedia.org/wiki/Output-sensitive_algorithm
Output-sensitive algorithm: the running time of the algorithm is sensitive to the size of the output.
Intersection-sensitive,since the number of intersections is what determines the size of the output
Giới thiệu các điểm eventpoint: vì đường thẳng l di chuyển xuống sẽ cập nhật không liên tục
Các event point có thể là các đầu mút của đoạn thẳng hoặc là các điểm giao được phát hiện
Nói thểm về hai đoạn láng giềng trong slide
Có 3 loại event point: đi
Phụ thuộc chứng minh bổ đề
Do chỉ xét các cặp đỉnh láng giềng nằm giảm chi phí tính toán.
Tạm quên đi các trường hợp đặc biệt khác
Xét các cặp đỉnh láng giềng dùng để xét
Trường hợp 1: thêm 1 đoạn thẳng xét vào: kiểm tra để xác định láng giềng và tìm kiểm điểm cắt mới dùng để cập nhật vào các điểm event point.
Trường hợp 2: event point là điểm giao đã được xác định. Trong trường hợp này có thể thay đổi các cặp láng giềng. Có thể xác định mới các điểm cắt làm event point. Trong hình ví dụ là (j,k) và (l,m) để xác định thêm các điểm cắt.Hay nói cách khác là đặt tên lại các cặp láng giềng
Trường hợp 3: event point là điểm kêt thúc của đoạn thẳng. Xóa 2 cặp điểm láng giềng và thay vào đó là điểm láng giềng mới.
Bỏ qua một số th ngoại lệ: giả thiết không đoạn nào ngang nhau (song song+trùng nhau), không có 3 đoạn nào đồng quy trở lên
For example, if segments 𝑠 𝑖 and 𝑠 𝑘 are adjacent on the sweep line, anda new upper endpoint of a segment 𝑠 𝑗 appears in between, then we have to test 𝑠 𝑗 for intersection with 𝑠 𝑖 and 𝑠 𝑘 .
Khi event point là điểm giao, hai đoạn giao nhau thay đổi thứ tự của chúng
Ví dụ, theo thứ tự từ trái sang phải, 𝑠 𝑘 , 𝑠 𝑙 giao nhau, khi đường truy quét qua điểm giao, cần kiểm tra cặp ( 𝑠 𝑗 , 𝑠 𝑙 ) và ( 𝑠 𝑘 , 𝑠 𝑚 ) có giao nhau hay không?
implement the event queue:
if 𝑝 and 𝑞 are two event points then we have 𝑝 ≺ 𝑞 if and only if 𝑝 𝑦 > 𝑞 𝑦 holds or 𝑝 𝑦 = 𝑞 𝑦 and 𝑝 𝑥 < 𝑞 𝑥 holds.
Both operations—fetching the next event and inserting an event—take O(logm) time, where m is the number of events
insert a new line segment (whose left endpoint coincides with x).
delete an existing line segment (whose right endpoint coincides with x).
swap two adjacent entries (whose intersection point coincides with x).
- Là cấu trúc động, vì as segments start or stop to intersect the sweep line, they must be inserted into or deleted from the structure.
HANDLEEVENTPOINT(𝑝): Xử lý điểm sự kiện
Can it be that new horizontal neighbors already intersected above the sweep line?
Can it be that we insert a newly detected intersection point event, but it already occurs in Q?
HANDLEEVENTPOINT(𝑝): Xử lý điểm sự kiện
Can it be that new horizontal neighbors already intersected above the sweep line?
Can it be that we insert a newly detected intersection point event, but it already occurs in Q?