diff --git a/Makefile.am b/Makefile.am
index d4d5174a..362fa271 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -44,6 +44,8 @@ UTIL_FILES = \
ip.hpp \
json.cpp \
json.hpp \
+ lerp.cpp \
+ lerp.hpp \
maths.cpp \
maths.hpp \
maths/matrix.cpp \
diff --git a/lerp.cpp b/lerp.cpp
new file mode 100644
index 00000000..0e629f12
--- /dev/null
+++ b/lerp.cpp
@@ -0,0 +1,49 @@
+/*
+ * This file is part of libgim.
+ *
+ * libgim is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * libgim is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with libgim. If not, see .
+ *
+ * Copyright 2011 Danny Robson
+ */
+
+#include "lerp.hpp"
+
+#include "debug.hpp"
+#include "maths.hpp"
+
+#include
+
+
+double
+lerp::sigmoid (double val) {
+ return -1.0 + 2.0 / (1.0 + exp (-2.0 * val));
+}
+
+
+double
+lerp::linear (double a, double b, double weight) {
+ check (weight >= 0 && weight <= 1.0);
+ return (1.0 - weight) * a + weight * b;
+}
+
+
+double
+lerp::cosine (double a, double b, double weight) {
+ check (weight >= 0 && weight <= 1.0);
+ double ft = weight * PI;
+ double f = (1.0 - cos (ft)) * 0.5;
+
+ return a * (1.0 - f) + b * f;
+}
+
diff --git a/lerp.hpp b/lerp.hpp
new file mode 100644
index 00000000..145e8bc4
--- /dev/null
+++ b/lerp.hpp
@@ -0,0 +1,30 @@
+/*
+ * This file is part of libgim.
+ *
+ * libgim is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * libgim is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with libgim. If not, see .
+ *
+ * Copyright 2011 Danny Robson
+ */
+
+#ifndef __UTIL_LERP_HPP
+#define __UTIL_LERP_HPP
+
+namespace lerp {
+ double sigmoid (double val);
+
+ double linear (double a, double b, double weight);
+ double cosine (double a, double b, double weight);
+}
+
+#endif