/*] Copyright (c) 2009-2010, Charles McGarvey [************************** **] All rights reserved. * * vi:ts=4 sw=4 tw=75 * * Distributable under the terms and conditions of the 2-clause BSD license; * see the file COPYING for a complete text of the license. * **************************************************************************/ #ifndef _MOOF_RECTANGLE_HH_ #define _MOOF_RECTANGLE_HH_ #include namespace Mf { /** * Axis-aligned Bounding Box */ struct Rectangle { Vector2 min; Vector2 max; Rectangle() {} Rectangle(const Vector2& a, const Vector2& b) { init(a, b); } Rectangle(Scalar ax, Scalar ay, Scalar bx, Scalar by) { Vector2 a(ax, ay); Vector2 b(bx, by); init(a, b); } void init(const Vector2& a, const Vector2& b) { if (a[0] < b[0]) { min[0] = a[0]; max[0] = b[0]; } else { min[0] = b[0]; max[0] = a[0]; } if (a[1] < b[1]) { min[1] = a[1]; max[1] = b[1]; } else { min[1] = b[1]; max[1] = a[1]; } } Vector2 getCenter() const { return Vector2((min[0] + max[0]) / 2.0, (min[1] + max[1]) / 2.0); } void getCorners(Vector2 corners[4]) const; }; } // namespace Mf #endif // _MOOF_RECTANGLE_HH_