diff options
author | ExMix <rahuba.youri@mapswithme.com> | 2015-06-25 22:04:16 +0300 |
---|---|---|
committer | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2015-11-30 16:09:26 +0300 |
commit | 796636938fa15eca7ae691533fb382b42f5adbcd (patch) | |
tree | 6281153cfd24c961442232b98a183ccab8927468 /geometry/spline.cpp | |
parent | b2fac0a1faa0755c1dd7c663f4add7607efdd85c (diff) |
[drape] line simplification.
Diffstat (limited to 'geometry/spline.cpp')
-rw-r--r-- | geometry/spline.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/geometry/spline.cpp b/geometry/spline.cpp index 418bea301e..ed4617b381 100644 --- a/geometry/spline.cpp +++ b/geometry/spline.cpp @@ -44,6 +44,38 @@ void Spline::AddPoint(PointD const & pt) } } +void Spline::ReplacePoint(PointD const & pt) +{ + ASSERT(m_position.size() > 1, ()); + ASSERT(!m_length.empty(), ()); + ASSERT(!m_direction.empty(), ()); + m_position.pop_back(); + m_length.pop_back(); + m_direction.pop_back(); + AddPoint(pt); +} + +bool Spline::IsPrelonging(PointD const & pt) +{ + if (m_position.size() < 2) + return false; + + PointD dir = pt - m_position.back(); + if (dir.IsAlmostZero()) + return true; + + dir = dir.Normalize(); + PointD prevDir = m_direction.back().Normalize(); + + double const MAX_ANGLE_THRESHOLD = 0.98; + return fabs(DotProduct(prevDir, dir)) > MAX_ANGLE_THRESHOLD; +} + +size_t Spline::GetSize() const +{ + return m_position.size(); +} + bool Spline::IsEmpty() const { return m_position.empty(); |