use struct for coordinates
This commit is contained in:
@ -9,7 +9,7 @@
|
||||
#include "base.h"
|
||||
#include "coordinates.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <unordered_map>
|
||||
|
||||
Motion::Motion(const double delta, const double eta, std::mt19937_64& rng) : m_delta(delta), m_eta(eta), m_rng(rng) {
|
||||
m_uni_dist = std::uniform_real_distribution(0., 1.);
|
||||
@ -38,4 +38,4 @@ SphericalPos Motion::draw_position() {
|
||||
const double phi = 2.0 * M_PI * m_uni_dist(m_rng);
|
||||
|
||||
return {cos_theta, phi};
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
#include "coordinates.h"
|
||||
#include <random>
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
|
||||
class Motion {
|
||||
@ -36,4 +36,5 @@ protected:
|
||||
std::uniform_real_distribution<> m_uni_dist;
|
||||
};
|
||||
|
||||
|
||||
#endif //RWSIM_MOTIONBASE_H
|
||||
|
25
motions/bimodalangle.cpp
Normal file
25
motions/bimodalangle.cpp
Normal file
@ -0,0 +1,25 @@
|
||||
//
|
||||
// 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) :
|
||||
Motion(delta, eta, rng),
|
||||
m_angle1(angle1 * M_PI / 180.0),
|
||||
m_angle2(angle2 * M_PI / 180.0),
|
||||
m_prob(prob) {};
|
||||
BimodalAngle::BimodalAngle(std::mt19937_64 &rng) : Motion(rng) {}
|
||||
|
||||
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);
|
||||
}
|
25
motions/bimodalangle.h
Normal file
25
motions/bimodalangle.h
Normal file
@ -0,0 +1,25 @@
|
||||
//
|
||||
// Created by dominik on 8/23/24.
|
||||
//
|
||||
|
||||
#ifndef BIMODALANGLE_H
|
||||
#define BIMODALANGLE_H
|
||||
|
||||
#include "base.h"
|
||||
|
||||
class BimodalAngle : public Motion {
|
||||
public:
|
||||
BimodalAngle(double, double, double, double, double, std::mt19937_64& );
|
||||
explicit BimodalAngle(std::mt19937_64&);
|
||||
|
||||
void initialize() override;
|
||||
double jump() override;
|
||||
|
||||
protected:
|
||||
double m_angle1{0};
|
||||
double m_angle2{0};
|
||||
double m_prob{0};
|
||||
SphericalPos m_prev_pos{0., 0.};
|
||||
};
|
||||
|
||||
#endif //BIMODALANGLE_H
|
@ -3,12 +3,11 @@
|
||||
//
|
||||
|
||||
#include "isosmallangle.h"
|
||||
#include "coordinates.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
SmallAngle::SmallAngle(const double delta, const double eta, const double chi, std::mt19937_64 &rng) : Motion(delta, eta, rng), m_chi(chi) {};
|
||||
SmallAngle::SmallAngle(std::mt19937_64 &rng) : Motion(rng) {
|
||||
}
|
||||
SmallAngle::SmallAngle(const double delta, const double eta, const double chi, std::mt19937_64 &rng) : Motion(delta, eta, rng), m_chi(chi * M_PI / 180.0) {};
|
||||
SmallAngle::SmallAngle(std::mt19937_64 &rng) : Motion(rng) {}
|
||||
|
||||
void SmallAngle::initialize() {
|
||||
m_prev_pos = draw_position();
|
||||
@ -16,7 +15,7 @@ void SmallAngle::initialize() {
|
||||
|
||||
double SmallAngle::jump() {
|
||||
const double gamma{2 * M_PI * m_uni_dist(m_rng)};
|
||||
m_prev_pos = rotate(m_prev_pos, gamma, m_chi);
|
||||
m_prev_pos = rotate(m_prev_pos, m_chi, gamma);
|
||||
|
||||
return omega_q(m_prev_pos);
|
||||
}
|
||||
|
@ -9,12 +9,10 @@ TetrahedralJump::TetrahedralJump(const double delta, const double eta, std::mt19
|
||||
TetrahedralJump::TetrahedralJump(std::mt19937_64& rng) : Motion(rng) {}
|
||||
|
||||
void TetrahedralJump::initialize() {
|
||||
// const auto pos = SphericalPos{0., 0};
|
||||
const auto pos = draw_position();
|
||||
m_corners[0] = omega_q(pos);
|
||||
|
||||
const double alpha = 2. * M_PI * m_uni_dist(m_rng);
|
||||
// const double alpha = 0.;
|
||||
|
||||
for (int i = 1; i<4; i++) {
|
||||
auto corner_pos = rotate(pos, m_beta, alpha + (i-1) * 2*M_PI/3.);
|
||||
|
Reference in New Issue
Block a user