===== DoubleVec2D ===== We've written a handy utility class ``DoubleVec2D`` used to represent 2D Vectors (components with floating point X and Y directions). You can do almost anything you'd do with a normal data type:: DoubleVec2D a(1, 0); // a.x = 1, a.y = 0 DoubleVec2D b(2, 2); DoubleVec2D swap_a = DoubleVec2D(a.y, a.x); // Swap x and y into a new DoubleVec2D DoubleVec2D c = a + b; // c is 3, 2 c = a - b; // c is -1, -2 c = a + 5 // Scalar addition, each component is added // to the scalar, c = 6, 5 c = a - 5 // Scalar subtraction, c = -4, -5 c = a * 5 // Scalar multiplication, c = 5, 0 bool t = a == b // You can compare vectors, their respective // components are compared, t = false bool t = a != b // t = true double d = a.dot(b) // Dot product d = a.magnitude() // Magnitude of a, d = sqrt(a.x*a.x + a.y*a.y) d = a.distance(b) // Euclidean distance between a and b logr << a; // Prints "(1, 0)" without the quotes We also have ``Vec2D``, in case you'd like use some integral points:: Vec2D x(5, 3) // You can do anything you could do with Vec2D Vec2D x_int = c.to_int() // Round your DoubleVec2D down to a Vec2D DoubleVec2D rounded_float = x_int.to_double(); // Convert any Vec2D into a DoubleVec2D with ease These classes are already included in your source file, so prepare yourselves to experience the euphoria of effortless Vector arithmetic :) Bonus ===== The DoubleVec2D and Vec2D are simply aliases of the the Vector class, which is a templated type. Vec2D corresponds to `Vector` and DoubleVec2D is `Vector`. This means that you can do things like ``Vector(3, 4)``, if for any reason you need In case you want to use any other numeric type, feel free to do `Vector` but you should be fine using just Vec2D and the occasional DoubleVec2D.