Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvng <viktor.govako@gmail.com>2012-06-19 04:51:53 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:39:57 +0300
commit390428f5c6c0bcab541a688d5bca314197b12fd2 (patch)
tree51a92c6ec3ec2e7cb6f1fabac9aa34f42beb726c /geometry
parent06bf51c0b95530c1d3c88dc108e101a62a91c61d (diff)
- Code style changes.
- Remove Rect<T>::operator< (???). - Add IsEqual for rects with epsilon.
Diffstat (limited to 'geometry')
-rw-r--r--geometry/angles.hpp14
-rw-r--r--geometry/any_rect2d.hpp21
-rw-r--r--geometry/rect2d.hpp16
3 files changed, 35 insertions, 16 deletions
diff --git a/geometry/angles.hpp b/geometry/angles.hpp
index d56677a418..39285b7d27 100644
--- a/geometry/angles.hpp
+++ b/geometry/angles.hpp
@@ -1,27 +1,25 @@
#pragma once
-#include <cmath>
#include "point2d.hpp"
#include "../base/matrix.hpp"
+#include "../std/cmath.hpp"
+
namespace ang
{
template <typename T>
struct Angle
{
- private:
T m_val;
T m_sin;
T m_cos;
+
public:
- Angle() : m_val(0), m_sin(0), m_cos(1)
- {}
- Angle(T const & val) : m_val(val), m_sin(::sin(val)), m_cos(::cos(val))
- {}
- Angle(T const & sin, T const & cos) : m_val(::atan2(sin, cos)), m_sin(sin), m_cos(cos)
- {}
+ Angle() : m_val(0), m_sin(0), m_cos(1) {}
+ Angle(T const & val) : m_val(val), m_sin(::sin(val)), m_cos(::cos(val)) {}
+ Angle(T const & sin, T const & cos) : m_val(::atan2(sin, cos)), m_sin(sin), m_cos(cos) {}
T const & val() const
{
diff --git a/geometry/any_rect2d.hpp b/geometry/any_rect2d.hpp
index 842e62b959..61e073445b 100644
--- a/geometry/any_rect2d.hpp
+++ b/geometry/any_rect2d.hpp
@@ -13,8 +13,6 @@ namespace m2
template <typename T>
class AnyRect
{
- private:
-
ang::Angle<T> m_angle;
Point<T> m_i;
Point<T> m_j;
@@ -36,15 +34,22 @@ namespace m2
}
public:
-
- AnyRect() : m_i(1, 0), m_j(0, 1), m_zero(0, 0), m_rect(){}
+ AnyRect() : m_i(1, 0), m_j(0, 1), m_zero(0, 0), m_rect() {}
/// creating from regular rect
explicit AnyRect(Rect<T> const & r)
- : m_angle(0), m_i(m_angle.cos(), m_angle.sin()), m_j(-m_angle.sin(), m_angle.cos()),
- m_zero(r == Rect<T>() ? Point<T>(0, 0) : Point<T>(r.minX(), r.minY())),
- m_rect(r == Rect<T>() ? Rect<T>() : Rect<T>(0, 0, r.SizeX(), r.SizeY()))
- {
+ : m_angle(0), m_i(m_angle.cos(), m_angle.sin()), m_j(-m_angle.sin(), m_angle.cos())
+ {
+ if (r.IsValid())
+ {
+ m_zero = Point<T>(r.minX(), r.minY());
+ m_rect = Rect<T>(0, 0, r.SizeX(), r.SizeY());
+ }
+ else
+ {
+ m_zero = Point<T>(0, 0);
+ m_rect = r;
+ }
}
AnyRect(Point<T> const & zero, ang::Angle<T> const & angle, Rect<T> const & r)
diff --git a/geometry/rect2d.hpp b/geometry/rect2d.hpp
index 6f843f985e..6154eec94a 100644
--- a/geometry/rect2d.hpp
+++ b/geometry/rect2d.hpp
@@ -232,6 +232,7 @@ namespace m2
return true;
}
+ /*
bool operator < (m2::Rect<T> const & r) const
{
if (m_minX != r.m_minX)
@@ -245,6 +246,7 @@ namespace m2
return false;
}
+ */
bool operator == (m2::Rect<T> const & r) const
{
@@ -258,6 +260,20 @@ namespace m2
};
template <typename T>
+ inline bool IsEqual(Rect<T> const & r1, Rect<T> const & r2, double epsX, double epsY)
+ {
+ Rect<T> r = r1;
+ r.Inflate(epsX, epsY);
+ if (!r.IsRectInside(r2)) return false;
+
+ r = r2;
+ r.Inflate(epsX, epsY);
+ if (!r.IsRectInside(r1)) return false;
+
+ return true;
+ }
+
+ template <typename T>
inline m2::Rect<T> const Add(m2::Rect<T> const & r, m2::Point<T> const & p)
{
return m2::Rect<T>(