From 9c63070718d8b9ec3e019e538e3cfa367fcd6fea Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Wed, 4 Jan 2012 17:08:03 +1100 Subject: [PATCH] Add various interpolation routines for perlin --- Makefile.am | 2 ++ lerp.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ lerp.hpp | 30 ++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 lerp.cpp create mode 100644 lerp.hpp 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