5 KẾT QUẢ MÔ PHỎNG
2.23 Các điểm lân cận trái và lân cận phải của một điểm đang xét
Ý tưởng chính của giải thuật LSS để nhanh chóng tìm ra điểm dẫn đến hiện tượng
breaknhư sau. Khi tính khoảng cách Hausdorff trực tiếp từ tập hợp điểmA đến tập hợp điểm B. Nếu điểm ai tại vòng lặp ngoài tìm thấy điểm bj ở vòng lặp trong mà khoảng cách d(ai, bj) làm xảy ra break thì tới vòng lặp tiếp theo, điểm ai+1, lân cận của điểm ai, cũng sẽ có khả năng cao tìm thấy điểm làm cho thuật toánbreak ở lân cận của điểm bj. Như vậy với điểmai+1 ở vòng lặp ngoài, thuật toán tốt hơn nên bắt đầu tìm các điểm lân cận củabj thay vì bắt đầu từ điểm đầu tiên. Ngoài ra, nếu không xảy rabreak, điểm ai nhận điểm bj là điểm gần nhất của nó trong B thì nhiều khả năng điểm ai+1, lân cận của ai, cũng sẽ nhận một điểm lân cận của bj làm điểm gần nhất của nó trongB.
Tuy nhiên, để thực hiện được ý tưởng này, các điểm trong tập hợp điểm cần được sắp xếp theo thứ tự để có thể xác định lân cận của một điểm nào đó đang xét. LSS sử dụng mã Morton để sắp xếp thứ tự của các điểm trong tập hợp. Ví dụ về mã Morton cho tập hợp gồm 64 điểm trong không gian Oxy được mô tả tại hình 2.24. Các điểm sẽ lần lượt được sắp thứ tự từ 1 đến 64 theo chiều mũi tên. Bảng 2.1 minh họa cho việc dùng Morton code để sắp lại thứ tự cho 16 điểm đầu tiên trong hình 2.24.
Giải thuật LSS được mô tả trong thuật toán 11. Để lưu lại vị trí của vòng lặp trong trước đó xảy ra break, một biến preindex sẽ được sử dụng. Điểm tiếp theo ở vòng lặp ngoài sẽ bắt đầu vòng lặp trong tại vị trípreindex thay vì bắt đầu từ vị trí đầu tiên.
Trong thuật toán 11, có hai vòng lặp, gồm vòng lặp ngoài (Dòng 7 đến dòng 42) và vòng lặp trong (Dòng 11 đến dòng 36). Giải thuật LSS trong thuật toán 11 thực hiện việc tính khoảng cách Hausdorff trực tiếp như sau
Một cấu trúc Z-order được thực hiện cho cả hai tập hợp điểm A và B. Điều này giúp các điểm trong cả hai tập hợp điểm được sắp thứ tự tùy theo tọa độ của chúng.
Với điểm đầu tiên của vòng lặp ngoài, tất cả các điểm b ∈ Bz của vòng lặp trong đều phải được thực hiện. Vị trí của điểm b gần nhất tới điểm a đầu tiên sẽ được dùng làm vị trí bắt đầu cho vòng lặp tiếp theo (Dòng 21 hoặc dòng 33).
Algorithm 11: Giải thuật Local Start Search - LSS để tính khoảng cách Hausdorff trực tiếp
1: Inputs: Point set A and point setB
2: Outputs: Directed Hausdorff distancehAB
3: cmax= 0
4: preindex= 0
5: Create Z-order Az of point set A
6: Create Z-order Bz of point set B
7: for i= 1 :P do
8: cmin=∞
9: minplace= 1
10: for j = 1 :P do
11: while 1≤preindex−j ≤Q or 1≤preindex+j ≤n do
12: if 1≤preindex−j ≤Q then
13: distlef t=dist(Az(i), Bz(preindex−j))
14: if distlef t < cmax then
15: cmin = 0
16: preindex=preindex−j
17: break
18: end if
19: if distlef t < cmin then
20: cmin =distlef t
21: minplace=preindex−j
22: end if
23: end if
24: if 1≤preindex+j ≤Q then
25: distright=dist(Az(i), Bz(preindex+j))
26: if distright < cmax then
27: cmin = 0
28: preindex=preindex+j
29: break
30: end if
31: if distright < cmin then
32: cmin =distright 33: minplace=preindex+j 34: end if 35: end if 36: end while 37: end for
38: if cmax < cmin then
39: cmax=cmin
40: preindex=minplace
41: end if
42: end for