src/include/xy.h
changeset 539 fb261e3a9a0f
parent 538 d8863141824d
child 540 405ccc3105e1
     1.1 --- a/src/include/xy.h	Thu May 06 09:26:23 2004 +0000
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,227 +0,0 @@
     1.4 -// -*- c++ -*-
     1.5 -#ifndef HUGO_XY_H
     1.6 -#define HUGO_XY_H
     1.7 -
     1.8 -#include <iostream>
     1.9 -
    1.10 -///\ingroup misc
    1.11 -///\file
    1.12 -///\brief A simple two dimensional vector and a bounding box implementation 
    1.13 -///
    1.14 -/// The class \ref hugo::xy "xy" implements
    1.15 -///a two dimensional vector with the usual
    1.16 -/// operations.
    1.17 -///
    1.18 -/// The class \ref hugo::BoundingBox "BoundingBox" can be used to determine
    1.19 -/// the rectangular bounding box a set of \ref hugo::xy "xy"'s.
    1.20 -///
    1.21 -///\author Attila Bernath
    1.22 -
    1.23 -
    1.24 -namespace hugo {
    1.25 -
    1.26 -  /// \addtogroup misc
    1.27 -  /// @{
    1.28 -
    1.29 -  /// A two dimensional vector (plainvector) implementation
    1.30 -
    1.31 -  /// A two dimensional vector (plainvector) implementation
    1.32 -  ///with the usual vector
    1.33 -  /// operators.
    1.34 -  ///
    1.35 -  ///\author Attila Bernath
    1.36 -  template<typename T>
    1.37 -    class xy {
    1.38 -
    1.39 -    public:
    1.40 -
    1.41 -      T x,y;     
    1.42 -      
    1.43 -      ///Default constructor: both coordinates become 0
    1.44 -      xy() : x(0), y(0) {}
    1.45 -
    1.46 -      ///Constructing the instance from coordinates
    1.47 -      xy(T a, T b) : x(a), y(b) { }
    1.48 -
    1.49 -
    1.50 -      ///Gives back the square of the norm of the vector
    1.51 -      T normSquare(){
    1.52 -	return x*x+y*y;
    1.53 -      };
    1.54 -  
    1.55 -      ///Increments the left hand side by u
    1.56 -      xy<T>& operator +=(const xy<T>& u){
    1.57 -	x += u.x;
    1.58 -	y += u.y;
    1.59 -	return *this;
    1.60 -      };
    1.61 -  
    1.62 -      ///Decrements the left hand side by u
    1.63 -      xy<T>& operator -=(const xy<T>& u){
    1.64 -	x -= u.x;
    1.65 -	y -= u.y;
    1.66 -	return *this;
    1.67 -      };
    1.68 -
    1.69 -      ///Multiplying the left hand side with a scalar
    1.70 -      xy<T>& operator *=(const T &u){
    1.71 -	x *= u;
    1.72 -	y *= u;
    1.73 -	return *this;
    1.74 -      };
    1.75 -
    1.76 -      ///Dividing the left hand side by a scalar
    1.77 -      xy<T>& operator /=(const T &u){
    1.78 -	x /= u;
    1.79 -	y /= u;
    1.80 -	return *this;
    1.81 -      };
    1.82 -  
    1.83 -      ///Returns the scalar product of two vectors
    1.84 -      T operator *(const xy<T>& u){
    1.85 -	return x*u.x+y*u.y;
    1.86 -      };
    1.87 -  
    1.88 -      ///Returns the sum of two vectors
    1.89 -      xy<T> operator+(const xy<T> &u) const {
    1.90 -	xy<T> b=*this;
    1.91 -	return b+=u;
    1.92 -      };
    1.93 -
    1.94 -      ///Returns the difference of two vectors
    1.95 -      xy<T> operator-(const xy<T> &u) const {
    1.96 -	xy<T> b=*this;
    1.97 -	return b-=u;
    1.98 -      };
    1.99 -
   1.100 -      ///Returns a vector multiplied by a scalar
   1.101 -      xy<T> operator*(const T &u) const {
   1.102 -	xy<T> b=*this;
   1.103 -	return b*=u;
   1.104 -      };
   1.105 -
   1.106 -      ///Returns a vector divided by a scalar
   1.107 -      xy<T> operator/(const T &u) const {
   1.108 -	xy<T> b=*this;
   1.109 -	return b/=u;
   1.110 -      };
   1.111 -
   1.112 -      ///Testing equality
   1.113 -      bool operator==(const xy<T> &u){
   1.114 -	return (x==u.x) && (y==u.y);
   1.115 -      };
   1.116 -
   1.117 -      ///Testing inequality
   1.118 -      bool operator!=(xy u){
   1.119 -	return  (x!=u.x) || (y!=u.y);
   1.120 -      };
   1.121 -
   1.122 -    };
   1.123 -
   1.124 -  ///Reading a plainvector from a stream
   1.125 -  template<typename T>
   1.126 -  inline
   1.127 -  std::istream& operator>>(std::istream &is, xy<T> &z)
   1.128 -  {
   1.129 -
   1.130 -    is >> z.x >> z.y;
   1.131 -    return is;
   1.132 -  }
   1.133 -
   1.134 -  ///Outputting a plainvector to a stream
   1.135 -  template<typename T>
   1.136 -  inline
   1.137 -  std::ostream& operator<<(std::ostream &os, xy<T> z)
   1.138 -  {
   1.139 -    os << "(" << z.x << ", " << z.y << ")";
   1.140 -    return os;
   1.141 -  }
   1.142 -
   1.143 -
   1.144 -  /// A class to calculate or store the bounding box of plainvectors.
   1.145 -
   1.146 -  /// A class to calculate or store the bounding box of plainvectors.
   1.147 -  ///
   1.148 -  ///\author Attila Bernath
   1.149 -  template<typename T>
   1.150 -    class BoundingBox {
   1.151 -      xy<T> bottom_left, top_right;
   1.152 -      bool _empty;
   1.153 -    public:
   1.154 -      
   1.155 -      ///Default constructor: an empty bounding box
   1.156 -      BoundingBox() { _empty = true; }
   1.157 -
   1.158 -      ///Constructing the instance from one point
   1.159 -      BoundingBox(xy<T> a) { bottom_left=top_right=a; _empty = false; }
   1.160 -
   1.161 -      ///Is there any point added
   1.162 -      bool empty() const {
   1.163 -	return _empty;
   1.164 -      }
   1.165 -
   1.166 -      ///Gives back the bottom left corner (if the bounding box is empty, then the return value is not defined) 
   1.167 -      xy<T> bottomLeft() const {
   1.168 -	return bottom_left;
   1.169 -      };
   1.170 -
   1.171 -      ///Gives back the top right corner (if the bounding box is empty, then the return value is not defined) 
   1.172 -      xy<T> topRight() const {
   1.173 -	return top_right;
   1.174 -      };
   1.175 -
   1.176 -      ///Checks whether a point is inside a bounding box
   1.177 -      bool inside(const xy<T>& u){
   1.178 -	if (_empty)
   1.179 -	  return false;
   1.180 -	else{
   1.181 -	  return ((u.x-bottom_left.x)*(top_right.x-u.x) >= 0 &&
   1.182 -		  (u.y-bottom_left.y)*(top_right.y-u.y) >= 0 );
   1.183 -	}
   1.184 -      }
   1.185 -  
   1.186 -      ///Increments a bounding box with a point
   1.187 -      BoundingBox& operator +=(const xy<T>& u){
   1.188 -	if (_empty){
   1.189 -	  bottom_left=top_right=u;
   1.190 -	  _empty = false;
   1.191 -	}
   1.192 -	else{
   1.193 -	  if (bottom_left.x > u.x) bottom_left.x = u.x;
   1.194 -	  if (bottom_left.y > u.y) bottom_left.y = u.y;
   1.195 -	  if (top_right.x < u.x) top_right.x = u.x;
   1.196 -	  if (top_right.y < u.y) top_right.y = u.y;
   1.197 -	}
   1.198 -	return *this;
   1.199 -      };
   1.200 -  
   1.201 -      ///Sums a bounding box and a point
   1.202 -      BoundingBox operator +(const xy<T>& u){
   1.203 -	BoundingBox b = *this;
   1.204 -	return b += u;
   1.205 -      };
   1.206 -
   1.207 -      ///Increments a bounding box with an other bounding box
   1.208 -      BoundingBox& operator +=(const BoundingBox &u){
   1.209 -	if ( !u.empty() ){
   1.210 -	  *this += u.bottomLeft();
   1.211 -	  *this += u.topRight();
   1.212 -	}
   1.213 -	return *this;
   1.214 -      };
   1.215 -  
   1.216 -      ///Sums two bounding boxes
   1.217 -      BoundingBox operator +(const BoundingBox& u){
   1.218 -	BoundingBox b = *this;
   1.219 -	return b += u;
   1.220 -      };
   1.221 -
   1.222 -    };//class Boundingbox
   1.223 -
   1.224 -
   1.225 -  /// @}
   1.226 -
   1.227 -
   1.228 -} //namespace hugo
   1.229 -
   1.230 -#endif //HUGO_XY_H