[Super-tux-commit] supertux/lib/math aatriangle.h,NONE,1.1 rectangle.h,NONE,1.1
Brought to you by:
wkendrick
From: Matze B. <mat...@us...> - 2004-11-20 22:18:46
|
Update of /cvsroot/super-tux/supertux/lib/math In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8067/lib/math Added Files: aatriangle.h rectangle.h Log Message: forgot to add some files --- NEW FILE: rectangle.h --- #ifndef __RECTANGLE_H__ #define __RECTANGLE_H__ #include <assert.h> #include "vector.h" namespace SuperTux { /** This class represents a rectangle. * (Implementation Note) We're using upper left and lower right point instead of * upper left and width/height here, because that makes the collision dectection * a little bit efficienter. */ class Rectangle { public: Rectangle() { } Rectangle(const Vector& np1, const Vector& np2) : p1(np1), p2(np2) { } Rectangle(float x1, float y1, float x2, float y2) : p1(x1, y1), p2(x2, y2) { assert(p1.x <= p2.x && p1.y <= p2.y); } float get_width() const { return p2.x - p1.x; } float get_height() const { return p2.y - p1.y; } Vector get_middle() const { return Vector((p1.x+p2.x)/2, (p1.y+p2.y)/2); } void set_pos(const Vector& v) { move(v-p1); } void set_height(float height) { p2.y = p1.y + height; } void set_width(float width) { p2.x = p1.x + width; } void set_size(float width, float height) { set_width(width); set_height(height); } void move(const Vector& v) { p1 += v; p2 += v; } bool inside(const Vector& v) const { return v.x >= p1.x && v.y >= p1.y && v.x < p2.x && v.y < p2.y; } bool inside(const Rectangle& other) const { if(p1.x >= other.p2.x || other.p1.x >= p2.x) return false; if(p1.y >= other.p2.y || other.p1.y >= p2.y) return false; return true; } // leave these 2 public to safe the headaches of set/get functions for such // simple things :) /// upper left edge Vector p1; /// lower right edge Vector p2; }; } #endif --- NEW FILE: aatriangle.h --- #ifndef __AATRIANGLE_H__ #define __AATRIANGLE_H__ #include "rectangle.h" namespace SuperTux { /** * An axis aligned triangle (ie. a triangle where 2 sides are parallel to the x- * and y-axis. */ class AATriangle : public Rectangle { public: /** Directions: * * SOUTHEWEST NORTHEAST SOUTHEAST NORTHWEST * * or *---* or * or *---* * | \ \ | / | | / * | \ \ | / | | / * *---* * *---* * */ enum Direction { SOUTHWEST, NORTHEAST, SOUTHEAST, NORTHWEST }; AATriangle() : dir(SOUTHWEST) { } AATriangle(const Vector& v1, const Vector& v2, Direction newdir) : Rectangle(v1, v2), dir(newdir) { } Direction dir; }; } #endif |