From 60072c1d8089ffd3294e76636198d14710be95b8 Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Sat, 9 Sep 2017 07:55:22 +0100 Subject: Restructuring --- yage/physics/particlebody.cpp | 54 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 yage/physics/particlebody.cpp (limited to 'yage/physics/particlebody.cpp') diff --git a/yage/physics/particlebody.cpp b/yage/physics/particlebody.cpp new file mode 100644 index 00000000..bdb81eac --- /dev/null +++ b/yage/physics/particlebody.cpp @@ -0,0 +1,54 @@ +/* ---------------------------------------------------------------------------- + * particlebody.cpp + * + * Copyright (c) 2017 Yann Herklotz Grave -- MIT License + * See file LICENSE for more details + * ---------------------------------------------------------------------------- + */ + +#include + +#include +#include + +namespace yage +{ + +ParticleBody::ParticleBody(const Vector2d &position, double mass, + const Vector2d &velocity, bool gravity) + : Body(position, mass, velocity, gravity) +{ +} + +void ParticleBody::applyForce(const Vector2d &force) +{ + force_ += force; +} + +void ParticleBody::update() +{ + // set the time_step for 60fps + double time_step = 1.0 / 60.0; + + // set the last acceleration + Vector2d last_acceleration = acceleration_; + + // update the position of the body + position_ += velocity_ * time_step + + (0.5 * last_acceleration * std::pow(time_step, 2)); + + // update the acceleration + if (gravity_) { + acceleration_ = + Vector2d(force_.x() / mass_, (GRAVITY + force_.y()) / mass_); + } else { + acceleration_ = Vector2d(force_.x() / mass_, force_.y() / mass_); + } + + Vector2d avg_acceleration = (acceleration_ + last_acceleration) / 2.0; + + // update the velocity of the body + velocity_ += avg_acceleration * time_step; +} + +} // namespace yage -- cgit