Elements used in the Balls and Things games for the RETRO.
Dependents: RETRO_BallsAndPaddle RETRO_BallAndHoles
Diff: Shapes.cpp
- Revision:
- 0:3d0db4e183ee
- Child:
- 3:441dc90d10ce
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Shapes.cpp Fri Feb 06 09:51:06 2015 +0000 @@ -0,0 +1,227 @@ +#include "mbed.h" +#include "Shapes.h" + + + +/////////////////// +// POINT +/////////////////// +Point::Point() +{ // constructor + x1=0; + y1=0; +} + +Point::Point(int x, int y) +{ // constructor + x1=x; + y1=y; +} + +int Point::getX() +{ + return x1; +} + +int Point::getY() +{ + return y1; +} + +void Point::set(int x, int y) +{ + x1=x; + y1=y; +} + + +/////////////////// +// RECTANGLE +/////////////////// + +Rectangle::Rectangle(int x,int y, int xx, int yy) +{ + x1 = x; + x2 = xx; + y1 = y; + y2 = yy; +} + +Rectangle::Rectangle(Point pt1, Point pt2) +{ + x1 = pt1.getX(); + x2 = pt2.getX(); + y1 = pt1.getY(); + y2 = pt2.getY(); +} + + +bool Rectangle::collides(Point pt) +{ + if(pt.getX() >= x1 && pt.getX() <= x2) { + if(pt.getY() >= y1 && pt.getY() <= y2) { + return true; + } + } + return false; +} + +/* +Rectangle Rectangle::intersection(Rectangle r) +{ // return the intersection of two rectangles or null + Rectangle rResult; + rResult=Rectangle() + if(this->x2 >= +} +*/ + +bool Rectangle::collides(Rectangle r) +{ // check if two rectangles collide + // method 1: check if corners of eithter rectangle collide + // method 2: compare sides + if(this->collides(r.get1()) || this->collides(r.get2())) return(true); + if(this->collides(r.get3()) || this->collides(r.get4())) return(true); + if(r.collides(this->get1()) || r.collides(this->get2())) return(true); + if(r.collides(this->get3()) || r.collides(this->get4())) return(true); + // TODO: check other corners + return(false); +} + + +Point Rectangle::get1() +{ + return(Point(x1, y1)); +} + +Point Rectangle::get2() +{ + return(Point(x2, y2)); +} + +Point Rectangle::get3() +{ + return(Point(x2, y1)); +} + +Point Rectangle::get4() +{ + return(Point(x1, y2)); +} + + + +int Rectangle::getX1() +{ + return x1; +} + +int Rectangle::getX2() +{ + return x2; +} + +int Rectangle::getY1() +{ + return y1; +} + +int Rectangle::getY2() +{ + return y2; +} + +int Rectangle::getCenterX() +{ + return x1 + (x2-x1)/2; +} + +int Rectangle::getCenterY() +{ + return y1 + (y2-y1)/2; +} + +Point Rectangle::getCenter() +{ + return(Point(x1 + (x2-x1)/2, y1 + (y2-y1)/2)); +} + +void Rectangle::set(Rectangle rNew) +{ + x1=rNew.getX1(); + y1=rNew.getY1(); + x2=rNew.getX2(); + y2=rNew.getY2(); +} + +void Rectangle::move(Vector v) +{ + x1+=rint(v.x); + y1+=rint(v.y); + x2+=rint(v.x); + y2+=rint(v.y); +} + + +/////////////////// +// CIRCLE +/////////////////// +Circle::Circle(int x,int y, int r) +{ + x1=x; + y1=y; + r1=r; +} + +Point Circle::getCenter() +{ + return(Point(x1, y1)); +} + +int Circle::getRadius() +{ + return(r1); +} + +int Circle::getX() +{ + return(x1); +} + +int Circle::getY() +{ + return(y1); +} + +void Circle::setX(int x) +{ + x1=x; +} + +void Circle::setY(int y) +{ + y1=y; +} + +void Circle::setXY(int x, int y) +{ + x1=x; + y1=y; +} + +void Circle::move(int x, int y) +{ + x1+=x; + y1+=y; +} + +void Circle::move(Vector v) +{ + x1+=rint(v.x); + y1+=rint(v.y); +} + + +Rectangle Circle::getBoundingRectangle() +{ + return(Rectangle(x1-r1, y1-r1, x1+r1, y1+r1)); +}