# Changeset 2562:27c54b7f4f1d in lemon-0.x

Ignore:
Timestamp:
02/05/08 12:23:23 (12 years ago)
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@3443
Message:

Improvements and fixes in dim2.h.

• Several doc improvements.
• Fix BoundingBox::operator& implementation.
File:
1 edited

Unmodified
Added
Removed
• ## lemon/dim2.h

 r2553 /// A simple two dimensional vector (plainvector) implementation ///with the usual vector /// operators. /// /// with the usual vector operations. template class Point { 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. ///This function always returns 2. /// int size() const { return 2; } } ///Increment the left hand side by u ///Increment the left hand side by \c u Point& operator +=(const Point& u) { x += u.x; } ///Decrement the left hand side by u ///Decrement the left hand side by \c u Point& operator -=(const Point& u) { x -= u.x; } ///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 ///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; } ///Give back the bottom left corner ///Give back the bottom left corner. ///Give back the bottom left corner of the box ///Give back the bottom left corner of the box. ///If the bounding box is empty, then the return value is not defined. Point bottomLeft() const { } ///Set the bottom left corner ///Set the bottom left corner. ///It should only bee used for non-empty box. ///Set the bottom left corner of the box ///Set the bottom left corner of the box. ///It should only be used for non-empty box. void bottomLeft(Point p) { bottom_left = p; } ///Give back the top right corner ///Give back the top right corner. ///Give back the top right corner of the box ///Give back the top right corner of the box. ///If the bounding box is empty, then the return value is not defined. Point topRight() const { } ///Set the top right corner ///Set the top right corner. ///It should only bee used for non-empty box. ///Set the top right corner of the box ///Set the top right corner of the box. ///It should only be used for non-empty box. void topRight(Point p) { top_right = p; } ///Give back the bottom right corner ///Give back the bottom right corner. ///Give back the bottom right corner of the box ///Give back the bottom right corner of the box. ///If the bounding box is empty, then the return value is not defined. Point bottomRight() const { } ///Set the bottom right corner ///Set the bottom right corner. ///It should only bee used for non-empty box. ///Set the bottom right corner of the box ///Set the bottom right corner of the box. ///It should only be used for non-empty box. void bottomRight(Point p) { top_right.x = p.x; } ///Give back the top left corner ///Give back the top left corner. ///Give back the top left corner of the box ///Give back the top left corner of the box. ///If the bounding box is empty, then the return value is not defined. Point topLeft() const { } ///Set the top left corner ///Set the top left corner. ///It should only bee used for non-empty box. ///Set the top left corner of the box ///Set the top left corner of the 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 /// ///Map of the \ref Point::normSquare() "normSquare()" ///of an \ref Point "Point"-map ///\ingroup maps ///\brief Map of the \ref Point::normSquare() "normSquare()" ///of a \ref Point "Point"-map /// ///Map of the \ref Point::normSquare() "normSquare()" ///of a \ref Point "Point"-map. ///\ingroup maps /// template ///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.