48 lines
1.4 KiB
C++
48 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include "units.hpp"
|
|
#include <string>
|
|
#include <tuple>
|
|
#include <memory>
|
|
|
|
class Body {
|
|
public:
|
|
Body(const Position& X, const Velocity& V, const Mass& m,
|
|
const std::string& name = "");
|
|
|
|
// Save and load state
|
|
std::tuple<Position, Velocity, Mass> save() const;
|
|
static Body load(const std::tuple<Position, Velocity, Mass>& 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
|
|
};
|