6. Ý nghĩ kho họ ề ti
2.4.2. Phép giao (Intersect)
Phép gi o hoạt ộng nhƣ to n tử An . Tạo r một vùng ao ph m i ằng h xếp hồng h i t p ữ liệu ầu v o. Kết quả ầu r o gồm phần ữ liệu thuộ v o ả h i t p ữ liệu ầu vào
Hình 2.14 - Phép giao trong Overlay 2.4.3. Phép đ ng nhất (Indentity)
Tạo r một vùng o ph m i ằng h xếp hồng h i t p ữ liệu ầu v o. Kết quả ầu r o gồm to n ộ phần ữ liệu l p ầu ti n v hỉ những phần n o l p th h i ƣợ hồng khít.
44
2.5. Một số thuật toán cơ bản xếp chồng bản đồ
2.5.1. Thuật toán giao hai đoạn thẳng (Bentley – Ottmann)
Thu t to n Bentley – Ottm nn (BO) l một thu t to n quét òng ể liệt k tất ả oạn thẳng gi o nh u trong mặt phẳng ƣợ ph t triển n ầu ởi Jon Bentley n Thom s Ottm nn (1979) ể kiểm tr ó h y kh ng oạn thẳng gi o nh u, v i ầu v o l n oạn thẳng v k iểm ắt nh u. Mặ ù kh ng phải l thu t to n tốt nhất nhƣng nó ƣợ l họn ể th h nh ởi s ơn giản v hiếm ít ộ nh . BO ó ộ ph tạp là O(n+k)logn.
Giả thiết ầu v o thu t to n BO:
- Kh ng ó oạn thẳng n o thẳng ng.
- C iểm mút oạn thẳng n y kh ng nằm tr n oạn khác.
- Điểm gi o nh u hỉ l iểm gi o 2 oạn thẳng.
- Kh ng ó qu h i iểm mút v iểm ắt nh u ó ùng ộ ộ x.
2.5.1.1. Ý tưởng của thuật toán
Ý tƣởng hính thu t to n BO l sử ụng tiếp n quét òng, trong ó một òng thẳng ng L huyển ộng từ tr i s ng phải trong mặt phẳng, những oạn gi o nh u sẽ ƣợ lƣu lại tr n ƣờng m nó i huyển.
Hình 2.16 - Minh hoạ thuật toán quét dòng
Khi L quét qu một iểm uối một oạn thẳng s, gi o iểm L v s sẽ ƣợ th m v o hoặ gỡ r từ một t p ó th t iểm gi o nh u. S kiện n y ễ ng ƣợ o n nhƣ iểm ầu mút oạn thẳng ( ã iết từ ầu v o thu t to n). S kiện òn lại xảy r khi L quét qu hỗ ắt
45
nh u 2 oạn thẳng s v t, s kiện n y ũng ƣợ o n trƣ từ th tế, ng y từ khi xảy r s kiện n y, iểm gi o nh u L v i s v t ƣợ ặt liền kề trong t p iểm gi o nh u ó th t .
Thu t to n BO sử ụng ấu trú ữ liệu iểu iễn t p iểm gi o nh u thẳng ng òng quét v i oạn thẳng ầu v o, v t p hợp s kiện ó tiềm n ng trong tƣơng l i h nh th nh ởi ặp liền kề iểm gi o nh u. Nó xử lý s kiện lần lƣợt p nh t ấu trú ữ liệu ể iểu iễn t p iểm gi o nh u m i.
2.5.1.2. Cấu trúc dữ liệu
Để lƣu trữ hiệu quả gi o iểm ƣờng quét L v i oạn ƣờng vào và một huỗi các s kiện trong tƣơng lai thu t toán BO lƣu trữ ấu trúc ữ liệu là:
Một y t m kiếm nhị ph n h t p oạn thẳng qu L, theo th t trụ Y iểm m oạn thẳng qu L. Những iểm ắt kh ng ƣợ ại iện một h rõ r ng trong y nhị ph n t m kiếm. Thu t to n BO sẽ hèn th m một oạn m i s v o ấu trú ữ liệu khi òng quét L i qu iểm uối P oạn n y, vị trí hính x s trong y t m kiếm ó thể x ịnh ởi t m kiếm nhị ph n, mỗi ƣ kiểm tr p l tr n h y ƣ i oạn kh m L i qu . Do ó việ hèn sẽ ƣợ th hiện trong thời gi n log rits. Thu t to n BO sẽ xo oạn từ y nhị ph n v sử ụng t m kiếm nhị ph n ể x ịnh oạn ng y ở ƣ i hoặ tr n oạn kh , th o t n y ó thể ƣợ th hiện ởi y t ấu trú m kh ng qu n t m ến h nh họ ơ ản oạn thẳng.
Hình 2.17 - Cấu trúc cây nhị phân dòng
Th t sắp xếp: r v s l 2 oạn thẳng th r < s nếu v hỉ nếu
- rx1 < sx1 hoặ
46
Một h ng ợi ƣu ti n ể uy tr một huỗi s kiện ó tiềm n ng trong tƣơng l i thu t to n BO. Mỗi s kiện ƣợ li n kết v i một iểm p trong mặt phẳng,, iểm ầu uối, iểm ắt. S kiện n y xảy r khi òng L ắt qu p. Do ó s kiện ó thể ƣợ nh số ƣu ti n theo trụ x iểm li n kết s kiện. Trong thu t to n BO s kiện tƣơng l i tiềm n ng o gồm ầu mút oạn thẳng m hƣ ƣợ quét qu v iểm gi o nh u ph n oạn ƣờng m ở ng y n ƣ i hoặ n tr n oạn khác.
Thu t to n kh ng ần phải lƣu trữ một h rõ r ng ại iện òng quét L hoặ vị trí nó trong mặt phẳng. Th y v o ó, vị trí L ƣợ thể hiện gi n tiếp: ó là ƣờng thẳng ng qua iểm gắn v i s kiện gần y nhất là xử lý.
2.5.1.3. Chi tiết thuật toán
Thu t to n BO th hiện qu những ƣ s u y:
1. Khởi tạo một h ng ợi ƣu ti n Q s kiện ó tiềm n ng trong tƣơng l i, mỗi li n kiết v i một iểm trong mặt ph ng ƣu ti n theo trụ x. B n ầu, Q h nh s h iểm ầu mút oạn thẳng.
2. Khởi tạo một t m kiếm nhị ph n T ph n oạn thẳng qu L quét ƣờng, theo th t tr n trụ y iểm gi o nh u. B n ầu, T rỗng.
3. Trong khi Q l kh ng rỗng, t m v loại ỏ s kiện từ Q li n kết v i một iểm p ó toạ ộ x thấp nhất. X ịnh loại s kiện n y l s kiện g v qu tr nh ó theo trƣờng hợp s u y:
* Nếu p l iểm uối n tr i oạn s, hèn s v o T. T m oạn r v t ở n ƣ i h y tr n s trong T (nếu ó) nếu húng gi o nh u ởi một iểm tiềm n ng trong h ng ợi s kiện th loại ỏ nó. Nếu s gi o r hoặ t th th m iểm ắt n y v o h ng ợi.
* Nếu p l iểm uối n phải một oạn s, loại ỏ s từ T. T m oạn r v t ng y v ƣ i s trong T (trƣ khi loại ỏ s) . Nếu r v t gi o nh u th th m iểm n y v o trong nh s h h ng ợi.
* Nếu p l iểm gi o nh u s v t (v i s ở ƣ i t theo hƣ ng từ tr i qu ) , ho n ổi vị trí s v t trong T. T m oạn r v u (nếu ó) n ƣ i
47
v tr n s t tƣơng ng. Huỷ ỏ iểm ắt rs v tu từ h ng ợi s kiện, v , nếu r ắt t h y s ắt u, th m iểm n y v o h ng ợi s kiện.
2.5.1.4. Phân tích thuật toán
Thu t to n xử lý s kiện mỗi iểm mút oạn hoặ iểm gi o nhau ƣợ sắp xếp theo th t toạ ộ theo trụ x. Khi một s kiện th i ƣợ xử lý, s kiện tiếp theo ( nếu nó l iểm ắt) phải l một iểm gi o nh u 2 oạn thẳng liền kề iểu iễn trong T, ởi v thu t to n lƣu trữ tất ả iểm gi o nh u oạn thẳng nhƣ l s kiện tiềm n ng trong tƣơng l i, v o v y s kiện tiếp theo lu n lu n ó mặt trong h ng ợi s kiện. Kết quả l t m ƣợ hính x iểm ắt oạn thẳng.
Thu t to n BO xử lý huỗi 2n+k s kiện, trong ó n l số oạn thẳng v k l số iểm ắt, mỗi s kiện ƣợ xử lý ởi một số ố ịnh phép toán trong y t m kiếm nhị ph n v h ng ợi s kiện, v ởi v nó hỉ h iểm mút v iểm ắt giữ 2 oạn liền kề n n h ng ơi s kiện h kh ng qu 3n s kiện. Do ó tất ả th o t mất thời gi n l O (logn) v tổng thời gi n thu t to n là O((n+k)logn).
Nếu iểm ắt t m thấy ởi thu t to n kh ng ần phải lƣu trữ một khi t m thấy th kh ng gi n lƣu trữ thu t to n l O(n).
2.5.1.5. Kết luận
Kỹ thu t xếp hồng ản ồ l kỹ thu t rất khó trong qu tr nh ph n tí h th ng tin, òi hỏi phải ó những giải ph p tối ƣu về thời gian và không gian lƣu trữ. Trong phần tr n họ vi n ã tr nh y thu t to n quét òng ể x ịnh s gi o nh u h i oạn thẳng. Tuy thu t to n ơn giản nhƣng nó ƣợ sử ụng nhiều trong qu tr nh th h nh v ơn giản v hiếm ít ộ nh .
2.5.2. Thuật toán giao của hai đa giác
Đã ó nhiều thu t to n t m gi o h i gi ƣợ ng ố. Phần l n thu t to n n y xuất ph t từ t m gi o h i gi lồi. Do v y, nếu vùng nghi n u l gi ất kỳ th húng phải ƣợ t h r th nh gi lồi trƣ khi th hiện thu t to n. Trong lu n v n họ vi n trí h n thu t to n t m tr tiếp gi o h i gi , ó thể p ụng trong hệ GIS vé tơ.
48
Phát biểu bài toán: Hãy t m phần gi o h i gi phẳng kh ng t
ắt A v B. Cho iết A=a1a2... an và B=b1b2 ... bm. 2.5.2.1. Chi tiết thuật toán
Dễ thấy rằng: phần gi o A v B ó thể l t p rỗng h y l t p gi kh ng gi o nh u. Để ơn giản t gọi phần gi o A v B l t p gi gi o, v gọi một ạnh l ạnh t p gi gi o v i ý nghĩ nó l ạnh một gi trong t p gi giao.
V i P l một gi th t gọi I(P) v O(P) lần lƣợt l miền trong v miền ngo i P.
Tƣ tƣởng thu t to n l t m tất ả ạnh t p gi gi o, nếu t p ạnh n y kh rỗng th ằng h ghép húng lại sẽ ƣợ t p gi là giao A v B.
Thu t to n o gồm h i ƣ hính nhƣ s u:
Bước 1: Trường hợp hai đa giác không có cặp cạnh nào song song và giao nhau
V i mỗi ạnh v= iai+1 ∈ (i=1,2,..,n), t t m mọi gi o iểm v v i tất ả ạnh u= kbk+1 ∈ B (k=1,2,..,m), trong ó n+1 và bm+1 tƣơng ng ƣợ gán là a1 và b1.
Đặt Xv= {x| x l gi o iểm ạnh v v i ạnh u ∈ B}∈{ai,ai+1} (nếu trong Xv ó nhiều iểm trùng nh u th hỉ giữ lại một iểm trong số iểm trùng nh u ó).
Sắp xếp iểm trong Xv theo hiều t ng ần về khoảng h từ mỗi iểm ến i, t ƣợ Xv ={x1=ai,x2,..,xlv-1,xlv=ai+1}, v i |Xv|=lv. Khi ó, cạnh xixi+1
(i=1,2,..,lv-1) là m t cạnh của tập đa giác giao nếu trung đi m của nó thu c I(B).
Xử lý tƣơng t ho ạnh gi B.
Bước 2: Trường hợp hai đa giác có cặp cạnh song song và giao nhau
Trƣ hết, t hèn th m những iểm m i v o gi ể nếu ó trƣờng hợp tồn tại ặp ạnh song song v gi o nh u th tạo r ặp ạnh trùng nh u.
Giả sử ạnh iai+1 v ạnh kbk+1 song song v gi o nh u (nhƣng kh ng trùng nh u). T xử lý nhƣ s u:
49
- Nếu i ∈ bkbk+1(ai nằm trong oạn kbk+1), thì chèn ai v o giữ k và bk+1, t l oi kai và aibk+1 l h i ạnh m i gi B.
- Xử lý tƣơng t ho ỉnh: i+1, bk và bk+1.
S u ó, xét mỗi ặp ạnh trùng nh u v= iai+1∈A và u=bkbk+1∈ B (giả sử i∈bk và ai+1∈bk+1), th hiện th o t t m gi o iểm v sắp xếp nhƣ ƣ 1 ở tr n v i h i ạnh ai+1ai+2 và bk+1bk+2 ta ƣợ hai t p hợp:
Xv={x1=ai+1,x2,..,xlv-1,xlv=ai+2}, Yu={y1=bk+1,y2,..,ylu-1,ylu=bk+2}.
Để kiểm tr xem ạnh iai+1 (hoặ kbk+1) ó l một ạnh t p gi gi o h y kh ng, t v o tính hất sau:
Gọi N và M lần lư t là trung đi m các cạnh x1x2 và y1y2. Khi đó, cạnh aiai+1 (hoặc bkbk+1) là m t cạnh của tập đa giác giao nếu m t trong hai điều kiện sau thoả mãn:
1. N ∈ I(B) và M ∈O(A). 2. N ∈ O(B) và M ∈ I(A). Chứng minh:
Để h ng minh tính hất tr n t sử ụng h i kết quả s u:
1. Nếu i theo hiều thu n ( hiều ngƣợ v i hiều kim ồng hồ) theo ạnh gi P th I(P) v O(P) tƣơng ng nằm về phí n tr i v phí n phải ọ theo hƣ ng i.
2. Nếu iết trƣ một iểm MI(P) (O(P)), th I(P) (O(P)) sẽ nằm ùng phí so v i M v O(P) (I(P)) sẽ nằm kh phí so v i M, theo một hƣ ng i tr n một ạnh n o ó thuộ gi P.
Xét về vị trí tƣơng ối M v i gi A v N v i gi B t thấy hỉ ó ốn trƣờng hợp sau:
1. N ∈ I(B) và M ∈ O(A). 2. N ∈ O(B) và M ∈ I(A). 3. N∈ I(B) và M ∈ I(A) 4. N∈ O(B) và M ∈ O(A) Xét trƣờng hợp 1:
* Vì N ∈ I (B) → hiều thu n gi B l hiều i từ k ến k+1 (1) ai
bk
ai+ bk+
50
* Vì M ∈ O (A) → hiều thu n gi A l hiều i từ i ến i+1 (2) Từ (1), (2) v giả thiết iai+1 bkbk+1 → một gi l gi o A v B nh n iai+1 l ạnh v i hiều thu n l hiều từ i t i i+1.
Ch ng minh tƣơng t ho trƣờng hợp 2, t thu ƣợ kết quả: một gi l gi o A v B nh n aiai+1 l ạnh v i hiều thu n l hiều từ i+1 t i i.
Tóm lại, trong ả h i trƣờng hợp th aiai+1 l một ạnh t p gi gi o. Bằng h h ng minh tƣơng t ho h i trƣờng hợp òn lại (trƣờng hợp 3 v 4 t ều thu ƣợ kết quả: iai+1 không phải l ạnh t p gi gi o)
Các thuật toán liên quan
Thu t toán trình bày trên ó sử ụng hai thu t to n kh ể cài ặt, ó là kiểm tr iểm trong giác và tìm giao h i oạn thẳng. Để kiểm tr một iểm có nằm trong giác hay không ta có thể sử ụng thu t toán sau:
Đầu v o: Cho trƣ gi P v iểm p Đầu r : p nằm trong h y ngo i P.
begin if (p nằm tr n ạnh P), p trong P else ếm=0 l= ti song song trụ X vẽ từ p for (i=1 to n) begin
if (nếu ạnh (i) ắt l) and not ạnh (i) kh ng trùng v i l) then begin
if (một ầu uối ạnh (i) nằm phí tr n ti l)
ếm= ếm+1 end end for if ( ếm l lẻ), p nằm trong P end if end
Để t m gi o h i oạn thẳng t sử ụng thu t to n iểu iễn oạn thẳng ằng phƣơng tr nh th m số nhƣ sau:
Phƣơng tr nh oạn thẳng l ạnh gi ƣợ x ịnh từ h i toạ ộ ỉnh li n tiếp. Giả sử t ó th m số t th y ổi từ 0 ến 1 ho phần oạn thẳng AB giữ h i ỉnh gi v ó gi trị 0 tại một ầu, gi trị 1 tại ầu uối ki . V y v i 0 t 1, ta có:
51
x = xA + t (xB – xA) y = yA + t (yB – yA) (1)
Tƣơng t , ạnh CD gi th h i sẽ ƣợ iểu iễn ởi th m số s
v phƣơng tr nh s u: x = xC + s (xD – xC) y = yC + s (yD – yC) (2) Từ ng th s u y t tính ƣợ gi trị t và s: t = s = (3) trong ó, nếu 0 t 1 và 0 s 1 th h i oạn thẳng ắt nh u tại một iểm v gi o iểm n y ƣợ tính từ (1) v (2).
2.5.2.2. Phân tích và cài đặt thuật toán
Phần n y tr nh y tóm tắt ƣ hính i ặt h n ng xếp hồng h ề ản ồ trong hệ thống GIS vé tơ. Giả sử t phải th hiện tính to n phần ph vùng ị lý ƣợ iểu iễn ởi gi P trong h ề T1 v i vùng h ề T2.
Bước 1. X ịnh xem gi P h ề T1 gi o v i gi n o
h ề T2 . Một ản ồ h ề h v số gi (thí ụ ản ồ h nh hính Việt n m hi ến ấp xã ó ến 10511 xã), gi iểu iễn xã lại ó v số ạnh. Để t ng tố ộ xử lý m y tính t sẽ kh ng so s nh gi P T1 v i mọi gi T2. Cấu trú CSDL ị lý thƣờng lƣu trữ hữ nh t o gi . Trƣ khi kiểm tr h i gi ó gi o nh u h y kh ng th ần kiểm tr hữ nh t o húng ó gi o nh u h y kh ng v h i gi gi o nh u hỉ khi h i hữ nh t o húng gi o nh u. Giải ph p n y l m giảm ng kể số lần tính to n. Việ x ịnh hính x h i gi P, Q ó gi o nh u h y kh ng ƣợ th hiện theo thu t to n s u:
Đầu v o: Đ gi P, Q
Đầu r : P v Q ó gi o nh u?
Begin
52 begin p = iểm ất kỳ n o tr n i n P if (p nằm trong Q) P Q Else Begin q = iểm ất kỳ tr n i n Q If (q nằm trong Q) Q P else
P và Q không giao nhau
End End.
Độ ph tạp thu t to n t m gi o ạnh h i gi sẽ l O (nlogn).
Bước 2. Ph n l p ỉnh gi P v Q. Mỗi ỉnh gi ƣợ g n
ởi gi trị I (trong), O (ngo i) h y B ( i n) so v i gi ki . C gi trị n y ƣợ th hiện nhờ thu t to n iểm trong gi tr nh y tr n. C gi trị