#ifndef SIXSITEJUMP_H #define SIXSITEJUMP_H #include "base.h" #include #include 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 clone() const override; [[nodiscard]] std::string toString() const override; private: double m_chi{std::acos(-1.0 / 3.0)}; // 54.74 deg std::array m_corners{}; int m_corner_idx{0}; std::uniform_int_distribution<> m_chooser{1, 5}; }; } // namespace motions #endif // SIXSITEJUMP_H