summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2004/i/nono/src/utils/hexa.cc11
-rw-r--r--2004/i/nono/src/utils/hexa.h3
-rw-r--r--2004/i/nono/src/utils/point.h44
3 files changed, 46 insertions, 12 deletions
diff --git a/2004/i/nono/src/utils/hexa.cc b/2004/i/nono/src/utils/hexa.cc
index 236342b..d5e4716 100644
--- a/2004/i/nono/src/utils/hexa.cc
+++ b/2004/i/nono/src/utils/hexa.cc
@@ -63,6 +63,17 @@ digit2hex (int d)
return digit2hexTbl_[d];
}
+/// Décode un mot non-signé (1 octets).
+unsigned int
+hexUnsignedChar2int (const char *s)
+{
+ int h1 = hex2digit (s[0]);
+ int h0 = hex2digit (s[1]);
+ if (h1 == hexInvalid || h0 == hexInvalid)
+ return hexInvalid;
+ return (unsigned char) (h1 << 4 | h0);
+}
+
/// Décode un mot signé (1 octets).
int
hexSignedChar2int (const char *s)
diff --git a/2004/i/nono/src/utils/hexa.h b/2004/i/nono/src/utils/hexa.h
index 348f90d..c2a0259 100644
--- a/2004/i/nono/src/utils/hexa.h
+++ b/2004/i/nono/src/utils/hexa.h
@@ -34,6 +34,9 @@ int hex2digit (char c);
/// Converti un chiffre (0-15) en hexa (0-9a-f).
char digit2hex (int d);
+/// Décode un mot non-signé (1 octets).
+unsigned int hexUnsignedChar2int (const char *s);
+
/// Décode un mot signé (1 octets).
int hexSignedChar2int (const char *s);
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.