2024-09-16 17:52:51 +00:00
|
|
|
//
|
|
|
|
// Created by dominik on 8/23/24.
|
|
|
|
//
|
|
|
|
|
|
|
|
#include "bimodalangle.h"
|
|
|
|
#include "base.h"
|
|
|
|
|
|
|
|
BimodalAngle::BimodalAngle(const double delta, const double eta, const double angle1, const double angle2, const double prob, std::mt19937_64 &rng) :
|
2024-11-09 16:59:37 +00:00
|
|
|
Motion(std::string("Bimodal Angle Jump"), delta, eta, rng),
|
2024-09-16 17:52:51 +00:00
|
|
|
m_angle1(angle1 * M_PI / 180.0),
|
|
|
|
m_angle2(angle2 * M_PI / 180.0),
|
|
|
|
m_prob(prob) {};
|
2024-11-09 16:59:37 +00:00
|
|
|
BimodalAngle::BimodalAngle(std::mt19937_64 &rng) : Motion(std::string("Bimodal Angle Jump"), rng) {}
|
2024-09-16 17:52:51 +00:00
|
|
|
|
|
|
|
void BimodalAngle::initialize() {
|
|
|
|
m_prev_pos = draw_position();
|
|
|
|
};
|
|
|
|
|
|
|
|
double BimodalAngle::jump() {
|
|
|
|
const double angle = m_uni_dist(m_rng) < m_prob ? m_angle1 : m_angle2;
|
|
|
|
const double gamma{2 * M_PI * m_uni_dist(m_rng)};
|
|
|
|
m_prev_pos = rotate(m_prev_pos, angle, gamma);
|
|
|
|
|
|
|
|
return omega_q(m_prev_pos);
|
|
|
|
}
|