From d3bee7c08af11c3045a7430156b67a06e4bd9816 Mon Sep 17 00:00:00 2001 From: Kirill Zhdanovich Date: Fri, 6 Sep 2013 13:13:31 +0300 Subject: [PATCH] [track] shortest distance to point with tests --- map/map_tests/map_tests.pro | 1 + map/map_tests/tracks_tests.cpp | 0 map/track.cpp | 14 ++++++++++++++ map/track.hpp | 3 +++ 4 files changed, 18 insertions(+) create mode 100644 map/map_tests/tracks_tests.cpp diff --git a/map/map_tests/map_tests.pro b/map/map_tests/map_tests.pro index 6118879ee3..51bc66b631 100644 --- a/map/map_tests/map_tests.pro +++ b/map/map_tests/map_tests.pro @@ -33,3 +33,4 @@ SOURCES += \ mwm_url_tests.cpp \ feature_processor_test.cpp \ ge0_parser_tests.cpp \ + tracks_tests.cpp \ diff --git a/map/map_tests/tracks_tests.cpp b/map/map_tests/tracks_tests.cpp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/map/track.cpp b/map/track.cpp index 449130e9b5..5920daa64f 100644 --- a/map/track.cpp +++ b/map/track.cpp @@ -2,8 +2,10 @@ #include "../graphics/screen.hpp" #include "../graphics/pen.hpp" #include "../graphics/depth_constants.hpp" +#include "../geometry/distance.hpp" #include "drawer.hpp" #include "../base/timer.hpp" +#include "../base/logging.hpp" Track::~Track() { @@ -94,3 +96,15 @@ bool Track::IsViewportChanged(ScreenBase const & sb) m2::RectD Track::GetLimitRect() const { return m_polyline.GetLimitRect(); } size_t Track::Size() const { return m_polyline.m_points.size(); } + +double Track::GetShortestSquareDistance(m2::PointD const & point) +{ + double res = numeric_limits::max(); + m2::DistanceToLineSquare d; + for (size_t i = 0; i + 1 < m_polyline.m_points.size(); ++i) + { + d.SetBounds(m_polyline.m_points[i], m_polyline.m_points[i + 1]); + res = min(res, d(point)); + } + return res; +} diff --git a/map/track.hpp b/map/track.hpp index 73f7ea4b06..dba27e524b 100644 --- a/map/track.hpp +++ b/map/track.hpp @@ -1,6 +1,7 @@ #pragma once #include "../geometry/polyline2d.hpp" +#include "../geometry/point2d.hpp" #include "../graphics/color.hpp" #include "../graphics/display_list.hpp" #include "../graphics/screen.hpp" @@ -50,6 +51,8 @@ public: double GetLength() const { return m_polyline.GetLength(); } PolylineD const & GetPolyline() const { return m_polyline; } + + double GetShortestSquareDistance(m2::PointD const & point); //@} private: