Adding distance and negate methods.
diff --git a/Source/Vec2D.cpp b/Source/Vec2D.cpp
index 8c26bae..cd28435 100644
--- a/Source/Vec2D.cpp
+++ b/Source/Vec2D.cpp
@@ -51,7 +51,14 @@
 {
 	float x = a[0];
 	float y = a[1];
-	return sqrt(x*x + y*y);
+	return std::sqrt(x*x + y*y);
+}
+
+float Vec2D::distance(const Vec2D& a, const Vec2D& b)
+{
+	float x = b[0] - a[0];
+	float y = b[1] - a[1];
+	return std::sqrt(x*x + y*y);
 }
 
 void Vec2D::copy(Vec2D& result, const Vec2D& a)
@@ -90,4 +97,10 @@
 {
 	o[0] = a[0] * scale;
 	o[1] = a[1] * scale;
+}
+
+void Vec2D::negate(Vec2D& o, const Vec2D& a)
+{
+	o[0] = -a[0];
+	o[1] = -a[1];
 }
\ No newline at end of file
diff --git a/Source/Vec2D.hpp b/Source/Vec2D.hpp
index 531dd52..4f41a5b 100644
--- a/Source/Vec2D.hpp
+++ b/Source/Vec2D.hpp
@@ -25,11 +25,13 @@
 			static void subtract(Vec2D& result, const Vec2D& a, const Vec2D& b);
 			static void add(Vec2D& result, const Vec2D& a, const Vec2D& b);
 			static float length(const Vec2D& a);
+			static float distance(const Vec2D& a, const Vec2D& b);
 			static void copy(Vec2D& result, const Vec2D& a);
 			static void normalize(Vec2D& result, const Vec2D& a);
 			static float dot(const Vec2D& a, const Vec2D& b);
 			static void lerp(Vec2D& o, const Vec2D& a, const Vec2D& b, float f);
 			static void scale(Vec2D& o, const Vec2D& a, float scale);
+			static void negate(Vec2D& o, const Vec2D& a);
 	};
 
 	inline Vec2D operator*(const Mat2D& a, const Vec2D& b)