#pragma once
#include <Eigen/Dense>
#include <Eigen/Geometry>
class Rod2d {
   public:
    explicit Rod2d(double L);

    [[nodiscard]] const Eigen::Matrix2d &getDiff() const;

    [[nodiscard]] double getDRot() const;

    [[nodiscard]] const Eigen::Vector2d &getPos() const;

    void setPos(const Eigen::Vector2d &Pos);

    [[nodiscard]] const Eigen::Matrix2d &getDiff_Sqrt() const;

    [[nodiscard]] const Eigen::Vector2d &getE() const;

    void setE(const Eigen::Vector2d &mE);

    [[nodiscard]] double getDRot_Sqrt() const;

   private:
    Eigen::Matrix2d m_Diff;
    Eigen::Matrix2d m_Diff_sqrt;
    double m_D_rot;
    double m_D_rot_sqrt;
    Eigen::Vector2d m_pos;  // position
    Eigen::Vector2d m_e;
};
