# Changeset 15:062f361aa520 in lemon

Ignore:
Timestamp:
01/03/08 01:08:23 (13 years ago)
Branch:
default
Phase:
public
Message:

Improved and fixed dim2.h.
Improved and fixed documentation.
Bug fix in BoundingBox?<>::operator&.
Removed \author tags.

File:
1 edited

Unmodified
Removed
• ## lemon/dim2.h

 r8 /// the rectangular bounding box of a set of /// \ref lemon::dim2::Point "dim2::Point"'s. /// ///\author Attila Bernath namespace lemon { typedef T Value; ///First co-ordinate ///First coordinate T x; ///Second co-ordinate ///Second coordinate T y; ///The dimension of the vector. ///This class give back always 2. /// ///The dimension of the vector. ///This function always returns 2. int size() const { return 2; } } ///Return the neg of the vectors ///Return the negative of the vector Point operator-() const { Point b=*this; }; ///Return an Point ///Return an Point ///Return a Point ///Return a Point. ///\relates Point template ///Return a vector multiplied by a scalar ///Return a vector multiplied by a scalar ///Return a vector multiplied by a scalar. ///\relates Point template Point operator*(const T &u,const Point &x) { ///Read a plainvector from a stream ///Read a plainvector from a stream ///Read a plainvector from a stream. ///\relates Point /// ///Write a plainvector to a stream ///Write a plainvector to a stream ///Write a plainvector to a stream. ///\relates Point /// ///Rotate by 90 degrees ///Returns its parameter rotated by 90 degrees in positive direction. ///Returns the parameter rotated by 90 degrees in positive direction. ///\relates Point /// ///Rotate by 180 degrees ///Returns its parameter rotated by 180 degrees. ///Returns the parameter rotated by 180 degrees. ///\relates Point /// ///Rotate by 270 degrees ///Returns its parameter rotated by 90 degrees in negative direction. ///Returns the parameter rotated by 90 degrees in negative direction. ///\relates Point /// /// A class to calculate or store the bounding box of plainvectors. /// ///\author Attila Bernath template class BoundingBox { ///Construct an instance from two points ///Construct an instance from two points ///\warning The coordinates of the bottom-left corner must be no more ///than those of the top-right one ///Construct an instance from two points. ///\param a The bottom left corner. ///\param b The top right corner. ///\warning The coordinates of the bottom left corner must be no more ///than those of the top right one. BoundingBox(Point a,Point b) { ///Construct an instance from four numbers ///Construct an instance from four numbers ///\warning The coordinates of the bottom-left corner must be no more ///than those of the top-right one ///Construct an instance from four numbers. ///\param l The left side of the box. ///\param b The bottom of the box. ///\param r The right side of the box. ///\param t The top of the box. ///\warning The left side must be no more than the right side and ///bottom must be no more than the top. BoundingBox(T l,T b,T r,T t) { } ///Were any points added? ///Return \c true if the bounding box is empty. ///Return \c true if the bounding box is empty (i.e. return \c false ///if at least one point was added to the box or the coordinates of ///the box were set). ///The coordinates of an empty bounding box are not defined. bool empty() const { return _empty; ///Set the bottom left corner. ///It should only bee used for non-empty box. ///It should only be used for non-empty box. void bottomLeft(Point p) { bottom_left = p; ///Set the top right corner. ///It should only bee used for non-empty box. ///It should only be used for non-empty box. void topRight(Point p) { top_right = p; ///Set the bottom right corner. ///It should only bee used for non-empty box. ///It should only be used for non-empty box. void bottomRight(Point p) { top_right.x = p.x; ///Set the top left corner. ///It should only bee used for non-empty box. ///It should only be used for non-empty box. void topLeft(Point p) { top_right.y = p.y; ///Set the bottom of the box. ///It should only bee used for non-empty box. ///It should only be used for non-empty box. void bottom(T t) { bottom_left.y = t; ///Set the top of the box. ///It should only bee used for non-empty box. ///It should only be used for non-empty box. void top(T t) { top_right.y = t; ///Set the left side of the box. ///It should only bee used for non-empty box ///It should only be used for non-empty box. void left(T t) { bottom_left.x = t; ///Set the right side of the box. ///It should only bee used for non-empty box ///It should only be used for non-empty box. void right(T t) { top_right.x = t; ///Checks whether a point is inside a bounding box bool inside(const Point& u){ bool inside(const Point& u) const { if (_empty) return false; ///Increments a bounding box with a point ///Increments a bounding box with a point. /// BoundingBox& add(const Point& u){ if (_empty){ } ///Increments a bounding to contain another bounding box ///Increments a bounding box to contain another bounding box ///Increments a bounding box to contain another bounding box. /// BoundingBox& add(const BoundingBox &u){ if ( !u.empty() ){ ///Intersection of two bounding boxes BoundingBox operator &(const BoundingBox& u){ ///Intersection of two bounding boxes. /// BoundingBox operator&(const BoundingBox& u) const { BoundingBox b; b.bottom_left.x=std::max(this->bottom_left.x,u.bottom_left.x); b.bottom_left.y=std::max(this->bottom_left.y,u.bottom_left.y); b.top_right.x=std::min(this->top_right.x,u.top_right.x); b.top_right.y=std::min(this->top_right.y,u.top_right.y); b._empty = this->_empty || u._empty || b.bottom_left.x>top_right.x && b.bottom_left.y>top_right.y; if (this->_empty || u._empty) { b._empty = true; } else { b.bottom_left.x = std::max(this->bottom_left.x,u.bottom_left.x); b.bottom_left.y = std::max(this->bottom_left.y,u.bottom_left.y); b.top_right.x = std::min(this->top_right.x,u.top_right.x); b.top_right.y = std::min(this->top_right.y,u.top_right.y); b._empty = b.bottom_left.x > b.top_right.x || b.bottom_left.y > b.top_right.y; } return b; } ///Map of x-coordinates of a dim2::Point<>-map ///\ingroup maps ///Map of x-coordinates of a dim2::Point<>-map ///Map of x-coordinates of a \ref Point "Point"-map ///\ingroup maps ///Map of x-coordinates of a \ref Point "Point"-map. /// template ///Returns a \ref ConstXMap class ///This function just returns an \ref ConstXMap class. ///This function just returns a \ref ConstXMap class. /// ///\ingroup maps } ///Map of y-coordinates of a dim2::Point<>-map ///Map of y-coordinates of a \ref Point "Point"-map ///\ingroup maps ///Map of y-coordinates of a dim2::Point<>-map ///Map of y-coordinates of a \ref Point "Point"-map. /// template }; ///Returns an \ref YMap class ///This function just returns an \ref YMap class. ///Returns a \ref YMap class ///This function just returns a \ref YMap class. /// ///\ingroup maps ///Returns a \ref ConstYMap class ///This function just returns an \ref ConstYMap class. ///This function just returns a \ref ConstYMap class. /// ///\ingroup maps ///\brief Map of the \ref Point::normSquare() "normSquare()" ///of an \ref Point "Point"-map ///of a \ref Point "Point"-map /// ///Map of the \ref Point::normSquare() "normSquare()" ///of an \ref Point "Point"-map ///of a \ref Point "Point"-map. ///\ingroup maps /// ///Returns a \ref NormSquareMap class ///This function just returns an \ref NormSquareMap class. ///This function just returns a \ref NormSquareMap class. /// ///\ingroup maps
Note: See TracChangeset for help on using the changeset viewer.