diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/body.cpp | 24 | ||||
-rw-r--r-- | src/body.cpps | 1 | ||||
-rw-r--r-- | src/rigidbody.cpp | 24 |
3 files changed, 44 insertions, 5 deletions
diff --git a/src/body.cpp b/src/body.cpp new file mode 100644 index 00000000..fb6c40e7 --- /dev/null +++ b/src/body.cpp @@ -0,0 +1,24 @@ +#include "Physics/body.hpp" + +namespace yage +{ + +Body::~Body() +{} + +Body::Body(const glm::vec2 ¢er_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) +{} + +float Body::xPosition() const +{ + return center_of_mass_.x; +} + +float Body::yPosition() const +{ + return center_of_mass_.y; +} + +} // yage diff --git a/src/body.cpps b/src/body.cpps new file mode 100644 index 00000000..3cacc0b9 --- /dev/null +++ b/src/body.cpps @@ -0,0 +1 @@ +12
\ No newline at end of file diff --git a/src/rigidbody.cpp b/src/rigidbody.cpp index 4d774937..d8b963de 100644 --- a/src/rigidbody.cpp +++ b/src/rigidbody.cpp @@ -9,15 +9,29 @@ RigidBody::RigidBody(const glm::vec2 ¢er_of_mass, double mass, const glm::ve void RigidBody::applyForce(const glm::vec2 &force) { + force_+=force; +} + +void RigidBody::update() +{ // set the time_step for 60fps double time_step=1.0/60.0; - - // a=F/m - 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); + // set the last acceleration + glm::vec2 last_acceleration=acceleration_; + + // update the position of the body + center_of_mass_.x+=velocity_.x*time_step+(0.5*last_acceleration.x*time_step*time_step); + center_of_mass_.y+=velocity_.y*time_step+(0.5*last_acceleration.y*time_step*time_step); + + // update the acceleration + acceleration_=glm::vec2(force_.x/mass_, force_.y/mass_); + glm::vec2 avg_acceleration=glm::vec2((acceleration_.x+last_acceleration.x)/2, + (acceleration_.y+last_acceleration.y)/2); - velocity_=acceleration+glm::vec2(intermediate_velocity.x*time_step, intermediate_velocity.y*time_step); + // update the velocity of the body + velocity_.x+=avg_acceleration.x*time_step; + velocity_.y+=avg_acceleration.y*time_step; } } // yage |