Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of el17dg by
Diff: game/geometry.h
- Revision:
- 31:becb8f6bf7b7
- Parent:
- 30:d454d0cb72bc
--- a/game/geometry.h Tue Apr 16 21:16:33 2019 +0000
+++ b/game/geometry.h Tue Apr 23 18:18:57 2019 +0000
@@ -3,63 +3,78 @@
#include <math.h>
-////////////////////////////////////////////////////////////////////////
/**
- * A structure to represent the positions of a sprite on the screen.
+ * @struct Point
+ * @brief Position or vector on the screen. Supports basic vector arithmetics.
*/
struct Point {
/*@{*/
int x; /**< the x position */
int y; /**< the y position */
+ /** Default constructor */
Point() : x(0), y(0) {}
+ /** Constructor with x and y parameters */
Point(int _x, int _y) : x(_x), y(_y) {}
+ /**
+ * @brief Vector addition.
+ */
Point operator+ (const Point& rhs) const {
Point result(x + rhs.x, y + rhs.y);
return result;
}
+
+ /**
+ * @brief Vector substraction.
+ */
Point operator- (const Point& rhs) const {
Point result(x - rhs.x, y - rhs.y);
return result;
}
+
+ /**
+ * @brief Length of vector squared.
+ */
int lengthSquared() {
return x * x + y * y;
}
};
-/** CicleBounds Class
- * @brief A library for appointing the sprites' bounds.
+
+/**
+ * CicleBounds Class
+ * @brief Class to define object's bounds as a circle with center(e.g. offset).
* @author Dmitrijs Griskovs
* @date 15/04/2019
*/
class CircleBounds {
public:
-///////////////////////////////////////////////////////////////////////////////////////
- /** Constructor */
+ /** Default constructor */
CircleBounds() {};
+ /** Constructor with center and radius parameters */
CircleBounds(Point _center, float _radius): center(_center), radius(_radius) {};
Point center;
float radius;
-
-/** @brief a function that determines whether the two sprites have collided.
- * @details the function takes in the position and the bounds (center and radius)
- * two sprites (x and y positions and the circle area of a sprite) then performs the
- * pythagoras calaculation and returns a bool statment if there is an overlap
- * in the circle area of two sprites.
- *
- * @param pos_a positon of x and y of first sprite. (const Point&).
- * @param bounds_a center point and radius of the first sprite. (const CircleBounds&).
- * @param pos_b positon of x and y of second sprite. (const Point&).
- * @param bounds_b center point and radius of the second sprite. (const CircleBounds&).
- * @return difference.lengthSquared() if the areas of two sprites overlap, it will return true.
- */
+
+ /**
+ * @brief Determines whether the two circles collide.
+ * @details the function takes in position and circle bounds (center and radius)
+ * of two objects and returns wether they collide.
+ *
+ * @param pos_a positon of x and y of the first object. (const Point&).
+ * @param bounds_a center point and radius of the first object. (const CircleBounds&).
+ * @param pos_b positon of x and y of the second object. (const Point&).
+ * @param bounds_b center point and radius of the second object. (const CircleBounds&).
+ * @return true if the two circles overlap.
+ */
inline bool circleCollideTwoObjects(
- const Point& pos_a, const CircleBounds& bounds_a,
- const Point& pos_b, const CircleBounds& bounds_b) {
- Point center_a = pos_a + bounds_a.center;
- Point center_b = pos_b + bounds_b.center;
- Point difference = center_a - center_b;
- return difference.lengthSquared() <= pow(bounds_a.radius + bounds_b.radius, 2);
+ const Point& pos_a, const CircleBounds& bounds_a,
+ const Point& pos_b, const CircleBounds& bounds_b
+ ) {
+ Point center_a = pos_a + bounds_a.center;
+ Point center_b = pos_b + bounds_b.center;
+ Point difference = center_a - center_b;
+ return difference.lengthSquared() <= pow(bounds_a.radius + bounds_b.radius, 2);
}
};
