aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/YAGE/Physics/README.org23
-rw-r--r--include/YAGE/Physics/body.hpp6
-rw-r--r--include/YAGE/Physics/rigidbody.hpp1
-rw-r--r--src/rigidbody.cpp13
4 files changed, 38 insertions, 5 deletions
diff --git a/include/YAGE/Physics/README.org b/include/YAGE/Physics/README.org
new file mode 100644
index 00000000..0a2a5066
--- /dev/null
+++ b/include/YAGE/Physics/README.org
@@ -0,0 +1,23 @@
+#+TITLE: README
+#+DATE: <2017-04-17 Mon>
+#+AUTHOR:
+#+EMAIL: yannherklotz@yann-arch
+#+OPTIONS: ':nil *:t -:t ::t <:t H:3 \n:nil ^:t arch:headline
+#+OPTIONS: author:t c:nil creator:comment d:(not "LOGBOOK") date:t
+#+OPTIONS: e:t email:nil f:t inline:t num:t p:nil pri:nil stat:t
+#+OPTIONS: tags:t tasks:t tex:t timestamp:t toc:t todo:t |:t
+#+CREATOR: Emacs 25.1.1 (Org mode 8.2.10)
+#+DESCRIPTION:
+#+EXCLUDE_TAGS: noexport
+#+KEYWORDS:
+#+LANGUAGE: en
+#+SELECT_TAGS: export
+
+* Physics Engine
+
+** Acceleration, speed and position
+
+ I have a = dv/dt; v=dp/dt;
+
+ I am going to use the second order runga kutta method with a=0, b=1, alpha=1/2 and beta=1/2
+
diff --git a/include/YAGE/Physics/body.hpp b/include/YAGE/Physics/body.hpp
index 9806f4e3..170ef491 100644
--- a/include/YAGE/Physics/body.hpp
+++ b/include/YAGE/Physics/body.hpp
@@ -9,6 +9,8 @@ namespace yage
class Body
{
protected:
+ // current force acting on object
+ glm::vec2 force_;
// current velocity of the object
glm::vec2 velocity_;
@@ -28,8 +30,8 @@ public:
virtual void applyForce(const glm::vec2 &force)=0;
protected:
// protected constructor to initialize member variables
- Body(const glm::vec2 &center_of_mass, double mass, const glm::vec2 &velocity, bool gravity) :
- velocity_(velocity), center_of_mass_(center_of_mass),
+ Body(const glm::vec2 &center_of_mass, double mass, const glm::vec2 &force, const glm::vec2 &velocity, bool gravity) :
+ force_(force), velocity_(velocity), center_of_mass_(center_of_mass),
mass_(mass), gravity_(gravity)
{}
};
diff --git a/include/YAGE/Physics/rigidbody.hpp b/include/YAGE/Physics/rigidbody.hpp
index 47f3bc01..56f089ed 100644
--- a/include/YAGE/Physics/rigidbody.hpp
+++ b/include/YAGE/Physics/rigidbody.hpp
@@ -11,6 +11,7 @@ class RigidBody : public Body
public:
RigidBody(const glm::vec2 &center_of_mass,
double mass,
+ const glm::vec2 &force=glm::vec2(0.f, 0.f),
const glm::vec2 &velocity=glm::vec2(0.f, 0.f),
bool gravity=true);
diff --git a/src/rigidbody.cpp b/src/rigidbody.cpp
index 3f719784..4d774937 100644
--- a/src/rigidbody.cpp
+++ b/src/rigidbody.cpp
@@ -3,14 +3,21 @@
namespace yage
{
-RigidBody::RigidBody(const glm::vec2 &center_of_mass, double mass, const glm::vec2 &velocity, bool gravity) :
- Body(center_of_mass, mass, velocity, gravity)
+RigidBody::RigidBody(const glm::vec2 &center_of_mass, double mass, const glm::vec2 &force, const glm::vec2 &velocity, bool gravity) :
+ Body(center_of_mass, mass, force, velocity, gravity)
{}
void RigidBody::applyForce(const glm::vec2 &force)
{
+ // set the time_step for 60fps
+ double time_step=1.0/60.0;
+
// a=F/m
- glm::vec2 acceleration(force.x/mass_, force.y/mass_);
+ glm::vec2 acceleration((force_.x+force.x)/mass_, (force_.y+force.y)/mass_); // = a(t0)
+
+ glm::vec2 intermediate_velocity=acceleration+glm::vec2(acceleration.x*time_step/2, acceleration.y*time_step/2);
+
+ velocity_=acceleration+glm::vec2(intermediate_velocity.x*time_step, intermediate_velocity.y*time_step);
}
} // yage