#pragma once #include "units.hpp" #include #include #include class Body { public: Body(const Position& X, const Velocity& V, const Mass& m, const std::string& name = ""); // Save and load state std::tuple save() const; static Body load(const std::tuple& tup); // Physics calculations void step(Decimal step_size); Decimal E() const; // Total energy Decimal pe() const; // Potential energy Decimal ke() const; // Kinetic energy Decimal dist_from_o() const; // Distance from origin std::string speed() const; // Speed as formatted string // Getters const Position& getPosition() const { return X; } const Velocity& getVelocity() const { return V; } const Acceleration& getAcceleration() const { return A; } const Mass& getMass() const { return m; } const std::string& getName() const { return name; } // Setters void setAcceleration(const Acceleration& new_A) { A = new_A; } void addAcceleration(const Acceleration& new_A); void subAcceleration(const Acceleration& new_A); // String representation std::string toString() const; private: Position X; Velocity V; Acceleration A; Mass m; std::string name; Decimal _speed() const; // Internal speed calculation };