#ifndef _RECTANGLE_HPP_
#define _RECTANGLE_HPP_
/*****************************************************************************/
#include "point.hpp"
/*****************************************************************************/
class Rectangle
{
public:
Rectangle(Point TopLeft, Point BottomRight);
Rectangle(Point TopLeft, double Width, double Height);
double getPerimeter();
double getArea();
bool contains(Point _p);
bool contains(Point _p1, Point _p2);
bool intersects(const Rectangle & _r);
bool covers(const Rectangle & _r);
private:
Point TopLeft, TopRight, BottomLeft, BottomRight;
double Width, Height;
};
inline Point getTopLeft() const
{
return TopLeft;
}
inline Point getTopRight() const
{
return TopRight;
}
inline Point getBottomLeft() const
{
return BottomLeft;
}
inline Point getBottomRight() const
{
return BottomRight;
}
inline double getWidth() const
{
return Width;
}
inline double getHeight() const
{
return Height;
}
// ... TODO
/*------------------------------------------------------------------*/
bool operator == (Rectangle const& _p) const;
bool operator != (Rectangle const& _p) const;
/*****************************************************************************/
#endif // _RECTANGLE_HPP_
I2lmbmRlZiBfUkVDVEFOR0xFX0hQUF8KI2RlZmluZSBfUkVDVEFOR0xFX0hQUF8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpbmNsdWRlICJwb2ludC5ocHAiCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KY2xhc3MgUmVjdGFuZ2xlCnsKcHVibGljOgoJUmVjdGFuZ2xlKFBvaW50IFRvcExlZnQsIFBvaW50IEJvdHRvbVJpZ2h0KTsKCVJlY3RhbmdsZShQb2ludCBUb3BMZWZ0LCBkb3VibGUgV2lkdGgsIGRvdWJsZSBIZWlnaHQpOwoJZG91YmxlIGdldFBlcmltZXRlcigpOwoJZG91YmxlIGdldEFyZWEoKTsKCWJvb2wgY29udGFpbnMoUG9pbnQgX3ApOwoJYm9vbCBjb250YWlucyhQb2ludCBfcDEsIFBvaW50IF9wMik7Cglib29sIGludGVyc2VjdHMoY29uc3QgUmVjdGFuZ2xlICYgX3IpOwoJYm9vbCBjb3ZlcnMoY29uc3QgUmVjdGFuZ2xlICYgX3IpOwpwcml2YXRlOgoJUG9pbnQgVG9wTGVmdCwgVG9wUmlnaHQsIEJvdHRvbUxlZnQsIEJvdHRvbVJpZ2h0OwoJZG91YmxlIFdpZHRoLCBIZWlnaHQ7Cn07CglpbmxpbmUgUG9pbnQgZ2V0VG9wTGVmdCgpIGNvbnN0Cgl7CgkJcmV0dXJuIFRvcExlZnQ7Cgl9CglpbmxpbmUgUG9pbnQgZ2V0VG9wUmlnaHQoKSBjb25zdAoJewoJCXJldHVybiBUb3BSaWdodDsKCX0KCWlubGluZSBQb2ludCBnZXRCb3R0b21MZWZ0KCkgY29uc3QKCXsKCQlyZXR1cm4gQm90dG9tTGVmdDsKCX0KCWlubGluZSBQb2ludCBnZXRCb3R0b21SaWdodCgpIGNvbnN0Cgl7CgkJcmV0dXJuIEJvdHRvbVJpZ2h0OwoJfQoJaW5saW5lIGRvdWJsZSBnZXRXaWR0aCgpIGNvbnN0Cgl7CgkJcmV0dXJuIFdpZHRoOwoJfQoJaW5saW5lIGRvdWJsZSBnZXRIZWlnaHQoKSBjb25zdAoJewoJCXJldHVybiBIZWlnaHQ7Cgl9CgkKCS8vIC4uLiBUT0RPIAoKCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCWJvb2wgb3BlcmF0b3IgPT0gKFJlY3RhbmdsZSBjb25zdCYgX3ApIGNvbnN0OwoJYm9vbCBvcGVyYXRvciAhPSAoUmVjdGFuZ2xlIGNvbnN0JiBfcCkgY29uc3Q7IAovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojZW5kaWYgLy8gIF9SRUNUQU5HTEVfSFBQXw==