From 73301302d22cca6d64c4e778b5bb2681eca13c0c Mon Sep 17 00:00:00 2001 From: schodet Date: Sun, 9 May 2004 17:55:28 +0000 Subject: Point: operator- Hexa: unsigned char. --- 2004/i/nono/src/utils/hexa.cc | 11 +++++++++++ 2004/i/nono/src/utils/hexa.h | 3 +++ 2004/i/nono/src/utils/point.h | 44 +++++++++++++++++++++++++++++++------------ 3 files changed, 46 insertions(+), 12 deletions(-) (limited to '2004') 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 +#include /// 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. -- cgit v1.2.3