#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& v1, const Vertex& v2) { this->v1 = v1; this->v2 = v2; } Rectangle(double x, double y, double width, double height) { v1.setLocation(x, y); v2.setLocation(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;} double getWidth() const {return v2.getX()-v1.getX();} void setWidth(double width) {v2.setX(v1.getX()+width);} double getHeight() const {return v2.getY()-v1.getY();} void setHeight(double height) {v2.setY(v1.getY()+height);} double 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_*/