31 lines
699 B
C++
31 lines
699 B
C++
#ifndef SIXSITEJUMP_H
|
|
#define SIXSITEJUMP_H
|
|
|
|
#include "base.h"
|
|
|
|
#include <array>
|
|
#include <cmath>
|
|
|
|
namespace motions {
|
|
class SixSiteOctahedronC3 final : public BaseMotion {
|
|
public:
|
|
SixSiteOctahedronC3(double, double, double);
|
|
SixSiteOctahedronC3();
|
|
|
|
void initialize(std::mt19937_64 &rng) override;
|
|
double jump(std::mt19937_64 &rng) override;
|
|
[[nodiscard]] std::unique_ptr<BaseMotion> clone() const override;
|
|
|
|
[[nodiscard]] std::string toString() const override;
|
|
|
|
private:
|
|
double m_chi{std::acos(-1.0 / 3.0)}; // 54.74 deg
|
|
|
|
std::array<double, 6> m_corners{};
|
|
int m_corner_idx{0};
|
|
|
|
std::uniform_int_distribution<> m_chooser{1, 5};
|
|
};
|
|
} // namespace motions
|
|
#endif // SIXSITEJUMP_H
|