added von mises distributionb

quick&dirty: added activity to the grid-walkers
This commit is contained in:
2016-04-21 08:59:05 +02:00
parent a00f2cf80a
commit f77a28735b
11 changed files with 216 additions and 11 deletions

View File

@@ -0,0 +1,56 @@
#ifndef K_MATH_DISTRIBUTION_VONMISES_H
#define K_MATH_DISTRIBUTION_VONMISES_H
#include <cmath>
#include <random>
#include "../Math.h"
#include "Bessel.h"
#include "LUT.h"
namespace Distribution {
/** von-mises distribution */
template <typename T> class VonMises {
private:
/** center of the distribution */
const T mu;
/** like 1.0/variance of the distribution */
const T kappa;
/** pre-calcuated look-up-table */
std::vector<T> lut;
/** helper for modified bessel I_0(kappa) */
Bessel<T> bessel;
public:
/** ctor */
VonMises(const T mu, const T kappa) : mu(mu), kappa(kappa) {
}
LUT<T> getLUT() const {
return LUT<T>(*this, -M_PI, +M_PI, 10000);
}
/** get probability for the given value */
T getProbability(const T _val) const {
const T val = Math::clamp((T)-M_PI, (T)+M_PI, _val);
return
std::exp(kappa * std::cos(val - mu)) /
(2 * M_PI * bessel.getModified(0, kappa));
}
};
}
#endif // K_MATH_DISTRIBUTION_VONMISES_H