Changeset 1426:91eb70983697 in lemon-0.x for src/lemon/xy.h
- Timestamp:
- 05/18/05 11:39:06 (18 years ago)
- Branch:
- default
- Phase:
- public
- Convert:
- svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1897
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/lemon/xy.h
r1420 r1426 30 30 /// 31 31 /// The class \ref lemon::BoundingBox "BoundingBox" can be used to determine 32 /// the rectangular bounding box a set of \ref lemon::xy "xy"'s.32 /// the rectangular bounding box of a set of \ref lemon::xy "xy"'s. 33 33 /// 34 34 ///\author Attila Bernath … … 68 68 ///Gives back the square of the norm of the vector 69 69 T normSquare() const { 70 70 return x*x+y*y; 71 71 } 72 72 73 73 ///Increments the left hand side by u 74 74 xy<T>& operator +=(const xy<T>& u) { 75 76 77 75 x += u.x; 76 y += u.y; 77 return *this; 78 78 } 79 79 80 80 ///Decrements the left hand side by u 81 81 xy<T>& operator -=(const xy<T>& u) { 82 83 84 82 x -= u.x; 83 y -= u.y; 84 return *this; 85 85 } 86 86 87 87 ///Multiplying the left hand side with a scalar 88 88 xy<T>& operator *=(const T &u) { 89 90 91 89 x *= u; 90 y *= u; 91 return *this; 92 92 } 93 93 94 94 ///Dividing the left hand side by a scalar 95 95 xy<T>& operator /=(const T &u) { 96 97 98 96 x /= u; 97 y /= u; 98 return *this; 99 99 } 100 100 101 101 ///Returns the scalar product of two vectors 102 102 T operator *(const xy<T>& u) const { 103 103 return x*u.x+y*u.y; 104 104 } 105 105 106 106 ///Returns the sum of two vectors 107 107 xy<T> operator+(const xy<T> &u) const { 108 109 108 xy<T> b=*this; 109 return b+=u; 110 110 } 111 111 112 112 ///Returns the neg of the vectors 113 113 xy<T> operator-() const { 114 115 116 114 xy<T> b=*this; 115 b.x=-b.x; b.y=-b.y; 116 return b; 117 117 } 118 118 119 119 ///Returns the difference of two vectors 120 120 xy<T> operator-(const xy<T> &u) const { 121 122 121 xy<T> b=*this; 122 return b-=u; 123 123 } 124 124 125 125 ///Returns a vector multiplied by a scalar 126 126 xy<T> operator*(const T &u) const { 127 128 127 xy<T> b=*this; 128 return b*=u; 129 129 } 130 130 131 131 ///Returns a vector divided by a scalar 132 132 xy<T> operator/(const T &u) const { 133 134 133 xy<T> b=*this; 134 return b/=u; 135 135 } 136 136 137 137 ///Testing equality 138 138 bool operator==(const xy<T> &u) const { 139 139 return (x==u.x) && (y==u.y); 140 140 } 141 141 142 142 ///Testing inequality 143 143 bool operator!=(xy u) const { 144 144 return (x!=u.x) || (y!=u.y); 145 145 } 146 146 … … 230 230 public: 231 231 232 ///Default constructor: an empty bounding box232 ///Default constructor: creates an empty bounding box 233 233 BoundingBox() { _empty = true; } 234 234 … … 236 236 BoundingBox(xy<T> a) { bottom_left=top_right=a; _empty = false; } 237 237 238 /// Is there any point added238 ///Were any points added? 239 239 bool empty() const { 240 240 return _empty; 241 241 } 242 242 243 243 ///Makes the BoundingBox empty 244 244 void clear() { 245 245 _empty=1; 246 246 } 247 247 248 248 ///Gives back the bottom left corner (if the bounding box is empty, then the return value is not defined) 249 249 xy<T> bottomLeft() const { 250 250 return bottom_left; 251 251 } 252 252 253 253 ///Gives back the top right corner (if the bounding box is empty, then the return value is not defined) 254 254 xy<T> topRight() const { 255 255 return top_right; 256 256 } 257 257 258 258 ///Gives back the bottom right corner (if the bounding box is empty, then the return value is not defined) 259 259 xy<T> bottomRight() const { 260 260 return xy<T>(top_right.x,bottom_left.y); 261 261 } 262 262 263 263 ///Gives back the top left corner (if the bounding box is empty, then the return value is not defined) 264 264 xy<T> topLeft() const { 265 265 return xy<T>(bottom_left.x,top_right.y); 266 266 } 267 267 268 268 ///Gives back the bottom of the box (if the bounding box is empty, then the return value is not defined) 269 269 T bottom() const { 270 270 return bottom_left.y; 271 271 } 272 272 273 273 ///Gives back the top of the box (if the bounding box is empty, then the return value is not defined) 274 274 T top() const { 275 275 return top_right.y; 276 276 } 277 277 278 278 ///Gives back the left side of the box (if the bounding box is empty, then the return value is not defined) 279 279 T left() const { 280 280 return bottom_left.x; 281 281 } 282 282 283 283 ///Gives back the right side of the box (if the bounding box is empty, then the return value is not defined) 284 284 T right() const { 285 285 return top_right.x; 286 286 } 287 287 288 288 ///Gives back the height of the box (if the bounding box is empty, then the return value is not defined) 289 289 T height() const { 290 290 return top_right.y-bottom_left.y; 291 291 } 292 292 293 293 ///Gives back the width of the box (if the bounding box is empty, then the return value is not defined) 294 294 T width() const { 295 295 return top_right.x-bottom_left.x; 296 296 } 297 297 298 298 ///Checks whether a point is inside a bounding box 299 299 bool inside(const xy<T>& u){ 300 301 302 303 304 305 300 if (_empty) 301 return false; 302 else{ 303 return ((u.x-bottom_left.x)*(top_right.x-u.x) >= 0 && 304 (u.y-bottom_left.y)*(top_right.y-u.y) >= 0 ); 305 } 306 306 } 307 307 308 308 ///Increments a bounding box with a point 309 309 BoundingBox& operator +=(const xy<T>& u){ 310 311 312 313 314 315 316 317 318 319 320 310 if (_empty){ 311 bottom_left=top_right=u; 312 _empty = false; 313 } 314 else{ 315 if (bottom_left.x > u.x) bottom_left.x = u.x; 316 if (bottom_left.y > u.y) bottom_left.y = u.y; 317 if (top_right.x < u.x) top_right.x = u.x; 318 if (top_right.y < u.y) top_right.y = u.y; 319 } 320 return *this; 321 321 } 322 322 323 323 ///Sums a bounding box and a point 324 324 BoundingBox operator +(const xy<T>& u){ 325 326 325 BoundingBox b = *this; 326 return b += u; 327 327 } 328 328 329 329 ///Increments a bounding box with an other bounding box 330 330 BoundingBox& operator +=(const BoundingBox &u){ 331 332 333 334 335 331 if ( !u.empty() ){ 332 *this += u.bottomLeft(); 333 *this += u.topRight(); 334 } 335 return *this; 336 336 } 337 337 338 338 ///Sums two bounding boxes 339 339 BoundingBox operator +(const BoundingBox& u){ 340 341 340 BoundingBox b = *this; 341 return b += u; 342 342 } 343 343
Note: See TracChangeset
for help on using the changeset viewer.