summaryrefslogtreecommitdiff
path: root/2005
diff options
context:
space:
mode:
Diffstat (limited to '2005')
-rw-r--r--2005/i/robert/src/geometry/vector.hh25
-rw-r--r--2005/i/robert/src/geometry/vector.tcc65
2 files changed, 63 insertions, 27 deletions
diff --git a/2005/i/robert/src/geometry/vector.hh b/2005/i/robert/src/geometry/vector.hh
index a54de2a..089656e 100644
--- a/2005/i/robert/src/geometry/vector.hh
+++ b/2005/i/robert/src/geometry/vector.hh
@@ -27,16 +27,18 @@
namespace geometry {
-/// Vecteur 2d en coordonées carthésiennes.
+/// Vecteur 2d en coordonnées carthésiennes.
template<typename T>
struct VectorT
{
+ /// Coordonnées.
T x, y;
+ /// Constructeur par defaut.
VectorT (void) { }
+ /// Constructeur.
VectorT (T x_, T y_) { x = x_; y = y_; }
- VectorT (T v) { x = v; y = v; }
- VectorT (const VectorT<T> &v) { x = v.x; y = v.y; }
- VectorT<T> &operator= (const VectorT<T> &v);
+ //@{
+ /// Opérations.
VectorT<T> &operator+= (const VectorT<T> &v);
VectorT<T> &operator-= (const VectorT<T> &v);
VectorT<T> &operator*= (T scalar);
@@ -44,13 +46,25 @@ struct VectorT
VectorT<T> operator+ (const VectorT<T> &v) const;
VectorT<T> operator- (const VectorT<T> &v) const;
VectorT<T> operator* (T scalar) const;
- T operator* (const VectorT<T> &v) const;
VectorT<T> operator/ (T scalar) const;
+ //@}
+ /// Produit scalaire.
+ T operator* (const VectorT<T> &v) const;
+ /// Calcule la norme.
+ T norm (void) const;
+ /// Normalise.
VectorT<T> &normalize (void);
+ /// Rotation de pi/2.
VectorT<T> &rotate (void);
+ /// Rotation.
VectorT<T> &rotate (T angle);
+ /// Distance à un autre point.
+ T distTo (const VectorT<T> &v) const;
+ /// Distance à un autre point au carré.
+ T sqDistTo (const VectorT<T> &v) const;
};
+/// Multiplication.
template<typename T>
VectorT<T>
operator* (T scalar, const VectorT<T> &v);
@@ -58,6 +72,7 @@ operator* (T scalar, const VectorT<T> &v);
template<typename T>
std::ostream &operator<< (std::ostream &os, const VectorT<T> &v);
+/// Vecteur de doubles.
typedef VectorT<double> Vector;
} // namespace geometry
diff --git a/2005/i/robert/src/geometry/vector.tcc b/2005/i/robert/src/geometry/vector.tcc
index ddcafd2..e9775c8 100644
--- a/2005/i/robert/src/geometry/vector.tcc
+++ b/2005/i/robert/src/geometry/vector.tcc
@@ -26,15 +26,6 @@ namespace geometry {
template<typename T>
VectorT<T> &
-VectorT<T>::operator= (const VectorT<T> &v)
-{
- x = v.x;
- y = v.y;
- return *this;
-}
-
-template<typename T>
-VectorT<T> &
VectorT<T>::operator+= (const VectorT<T> &v)
{
x += v.x;
@@ -89,49 +80,50 @@ VectorT<T>::operator- (const VectorT<T> &v) const
template<typename T>
VectorT<T>
-VectorT<T>::operator/ (T scalar) const
+VectorT<T>::operator* (T scalar) const
{
VectorT<T> r (*this);
- r /= scalar;
+ r *= scalar;
return r;
}
template<typename T>
VectorT<T>
-VectorT<T>::operator* (T scalar) const
+VectorT<T>::operator/ (T scalar) const
{
VectorT<T> r (*this);
- r *= scalar;
+ r /= scalar;
return r;
}
+/// Produit scalaire.
template<typename T>
-VectorT<T>
-operator* (T scalar, const VectorT<T> &v)
+T
+VectorT<T>::operator* (const VectorT<T> &v) const
{
- VectorT<T> r (v);
- r *= scalar;
- return r;
+ return x * v.x + y * v.y;
}
+/// Calcule la norme.
template<typename T>
T
-VectorT<T>::operator* (const VectorT<T> &v) const
+VectorT::norm (void)
{
- return x * v.x + y * v.y;
+ return sqrt (x * x + y * y);
}
+/// Normalise.
template<typename T>
VectorT<T> &
VectorT<T>::normalize (void)
{
- T norm = sqrt (x * x + y * y);
+ T norm = norm ();
x /= norm;
y /= norm;
return *this;
}
-/// Rotate by PI/2.
+/// Rotation de pi/2.
template<typename T>
VectorT<T> &
VectorT<T>::rotate (void)
@@ -142,6 +134,7 @@ VectorT<T>::rotate (void)
return *this;
}
+/// Rotation.
template<typename T>
VectorT<T> &
VectorT<T>::rotate (T angle)
@@ -153,6 +146,34 @@ VectorT<T>::rotate (T angle)
y = tx * s + y * c;
}
+/// Distance à un autre point.
+template<typename T>
+T
+VectorT::distTo (const VectorT<T> &v) const
+{
+ return sqrt (sqDistTo (v));
+}
+
+/// Distance à un autre point au carré.
+template<typename T>
+T
+VectorT::sqDistTo (const VectorT<T> &v) const
+{
+ double dx = x - v.x;
+ double dy = y - v.y;
+ return dx * dx + dy * dy;
+}
+
+/// Multiplication.
+template<typename T>
+VectorT<T>
+operator* (T scalar, const VectorT<T> &v)
+{
+ VectorT<T> r (v);
+ r *= scalar;
+ return r;
+}
+
template<typename T>
std::ostream &operator<< (std::ostream &os, const VectorT<T> &v)
{