diff options
Diffstat (limited to 'lib/wolff_models/dihedral_inf.hpp')
| -rw-r--r-- | lib/wolff_models/dihedral_inf.hpp | 55 | 
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/wolff_models/dihedral_inf.hpp b/lib/wolff_models/dihedral_inf.hpp new file mode 100644 index 0000000..0b09c59 --- /dev/null +++ b/lib/wolff_models/dihedral_inf.hpp @@ -0,0 +1,55 @@ + +#ifndef WOLFF_MODELS_DIHEDRAL_INF_H +#define WOLFF_MODELS_DIHEDRAL_INF_H + +#include <cmath> +#include "height.hpp" + +namespace wolff { + +  template <class T> +  class dihedral_inf_t { +    public: +    bool is_reflection; +    T x; + +    dihedral_inf_t() : is_reflection(false), x(0) {} +    dihedral_inf_t(bool x, T y) : is_reflection(x), x(y) {} + +    height_t<T> act(const height_t<T>& h) const { +      if (this->is_reflection) { +        return height_t(this->x - h.x); +      } else { +        return height_t(this->x + h.x); +      } +    } + +    dihedral_inf_t<T> act(const dihedral_inf_t<T>& r) const { +      if (this->is_reflection) { +        return dihedral_inf_t<T>(!r.is_reflection, this->x - r.x); +      } else { +        return dihedral_inf_t<T>(r.is_reflection, this->x + r.x); +      } +    } + +    height_t<T> act_inverse(const height_t<T>& h) const { +      if (this->is_reflection) { +        return this->act(h); +      } else { +        return height_t(h.x - this->x); +      } +    } + +    dihedral_inf_t<T> act_inverse(const dihedral_inf_t<T>& r) const { +      if (this->is_reflection) { +        return this->act(r); +      } else { +        return dihedral_inf_t<T>(r.is_reflection, r.x - this->x); +      } +    } +  }; + +} + +#endif +  | 
