summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/utils/point.h
diff options
context:
space:
mode:
Diffstat (limited to '2004/i/nono/src/utils/point.h')
-rw-r--r--2004/i/nono/src/utils/point.h44
1 files changed, 32 insertions, 12 deletions
diff --git a/2004/i/nono/src/utils/point.h b/2004/i/nono/src/utils/point.h
index b16d9e6..28c1512 100644
--- a/2004/i/nono/src/utils/point.h
+++ b/2004/i/nono/src/utils/point.h
@@ -26,6 +26,7 @@
// }}}
#include <iostream>
+#include <cmath>
/// Structure repésentant un point.
struct Point
@@ -39,6 +40,7 @@ struct Point
/// Opérations.
Point &operator+= (const Point &rhs);
Point operator+ (const Point &rhs) const;
+ Point operator- (void) const;
Point &operator-= (const Point &rhs);
Point operator- (const Point &rhs) const;
Point &operator*= (const Point &rhs);
@@ -46,6 +48,10 @@ struct Point
Point &operator*= (double rhs);
Point operator* (double rhs) const;
//@}
+ /// Retourne la distance au carré à un autre point.
+ double sqDistTo (const Point &rhs) const;
+ /// Retourne la distance à un autre point.
+ double distTo (const Point &rhs) const;
};
/// Sort sur un ostream.
@@ -66,9 +72,13 @@ Point::operator+= (const Point &rhs)
inline Point
Point::operator+ (const Point &rhs) const
{
- Point p (*this);
- p += rhs;
- return p;
+ return Point (*this) += rhs;
+}
+
+inline Point
+Point::operator- (void) const
+{
+ return Point (-x, -y);
}
inline Point &
@@ -82,9 +92,7 @@ Point::operator-= (const Point &rhs)
inline Point
Point::operator- (const Point &rhs) const
{
- Point p (*this);
- p -= rhs;
- return p;
+ return Point (*this) -= rhs;
}
inline Point &
@@ -98,9 +106,7 @@ Point::operator*= (const Point &rhs)
inline Point
Point::operator* (const Point &rhs) const
{
- Point p (*this);
- p *= rhs;
- return p;
+ return Point (*this) *= rhs;
}
inline Point &
@@ -114,9 +120,23 @@ Point::operator*= (double rhs)
inline Point
Point::operator* (double rhs) const
{
- Point p (*this);
- p *= rhs;
- return p;
+ return Point (*this) *= rhs;
+}
+
+/// Retourne la distance au carré à un autre point.
+inline double
+Point::sqDistTo (const Point &rhs) const
+{
+ double dx = rhs.x - x;
+ double dy = rhs.y - y;
+ return dx * dx + dy * dy;
+}
+
+/// Retourne la distance à un autre point.
+inline double
+Point::distTo (const Point &rhs) const
+{
+ return sqrt (sqDistTo (rhs));
}
/// Sort sur un ostream.