III. Xây dựng bộ công cụ hỗ trợ mô phỏng các giao thức định tuyến địa lý
3.4.2. Mô phỏng thuật toán xấp xỉ hố CorePolygonDetermination
Thuật toán xấp xỉ hố đƣợc mô phỏng bằng hàm CorePolygonDetermination, nhận đầu vào là một hố mạng và có đầu ra là một vector chứa thông tin 8 đỉnh đa giác xấp xỉ hổ cần tìm.
68
- Xác định đƣờng chéo dài nhất trong hố mạng đƣợc thực hiện với hàm
findLongestEdge, có đầu vào là một hố mạng và đầu ra là một cạnh đƣợc xác định bởi
2 nút thuộc biên hố
Hình 56: Xác định đường chéo dài nhất trong hố mạng
- Tại mỗi bên của đƣờng thằng HpHq xác định các đỉnh Hj Hk có khoảng cách đến HpHq lớn nhất đƣợc thực hiện bởi 2 hàm maxPointToLine và minPointToLine
69
- Việc dựng hình chữ nhật ngoại tiếp XYUV đƣợc thực hiện bằng cách xác định 2 đƣờng thằng song song với HpHq đi qua 2 điểm Hj, Hk và 2 đƣờng thằng vuông góc với HpHq đi qua 2 điểm Hp, Hq tìm đƣợc ở trên. Các hàm tƣơng ứng là
parallelLineThroughAPoint,perpendicularLineThroughAPoint.
Hình 58: Xác định các đường thẳng song song và vuông góc với HpHq
Giao của các đƣờng thẳng đó là các đỉnh của hình chữ nhật XYUV cần tìm. Việc tìm giao của các đƣờng thẳng đƣợc thực hiện bởi hàm lineIntersection
Hình 59: Xác định giao của các đường thẳng
- Dựng hình chữ nhật ngoại tiếp thứ 2 đƣợc thực hiện tƣơng tự, chỉ thay HpHq bằng một đƣờng thẳng HpHr đi qua Hp và tạo với HpHq 1 góc π/4. Đƣờng thẳng này đƣợc xác định bởi hàm PI_4ShiftLineThroughAPoint
70
Tƣơng tự nhƣ việc dựng hình chữ nhật XYUV, ta dựng hình chữ nhật X’Y’U’V’ từ đƣờng thẳng HpHr.
- 8 đỉnh của đa giác cần tìm đƣợc xác định bằng cách tìm giao điểm giữa các cạnh của 2 hình chữ nhật XYUV và X’Y’U’V’. Giao điểm giữa các cạnh của 2 hình chữ nhật đƣợc xác định bằng hàm LineSegmentIntersection
Hình 61: Xác định giao điểm của 2 hình chữ nhật XYUV và X’Y’U’V’