#ifndef RECTANGLE_H_ #define RECTANGLE_H_ #include "Vertex.h" #include "Line.h" #include #define EDGE_NONE 0 #define EDGE_LEFT (1<<0) #define EDGE_RIGHT (1<<1) #define EDGE_TOP (1<<2) #define EDGE_BOTTOM (1<<3) #define EDGE_ALL (EDGE_LEFT|EDGE_RIGHT|EDGE_TOP|EDGE_BOTTOM) class Rectangle { private: Vertex v1, v2; public: Rectangle() {} Rectangle(const Vertex& vertex1, const Vertex& vertex2) : v1(vertex1), v2(vertex2) {} Rectangle(float x, float y, float width, float height) : v1(x, y), v2(x+width, y+height) {} Vertex &getVertex1() {return v1;} const Vertex &getVertex1() const {return v1;} void setVertex1(const Vertex &v) {v1 = v;} Vertex &getVertex2() {return v2;} const Vertex &getVertex2() const {return v2;} void setVertex2(const Vertex &v) {v2 = v;} float getWidth() const {return v2.getX()-v1.getX();} void setWidth(float width) {v2.setX(v1.getX()+width);} float getHeight() const {return v2.getY()-v1.getY();} void setHeight(float height) {v2.setY(v1.getY()+height);} float area() const {return getWidth()*getHeight();} bool contains(const Vertex &v) const; int edges(const Vertex &v) const; int intersects(const Line &l, Vertex *v, int edge = EDGE_NONE) const; int intersects(const Line &l, Vertex *v1, Vertex *v2, int edge = EDGE_NONE) const; }; #endif /*RECTANGLE_H_*/