From d89ac6d0e54815b45be73b7e882977d4d8d35955 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre?= Date: Tue, 8 Mar 2016 17:42:45 +0100 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20de=20l'algo=20pour=20la=20f?= =?UTF-8?q?orce=20d'attraction?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- engine.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/engine.cpp b/engine.cpp index 7191e13..80ed426 100644 --- a/engine.cpp +++ b/engine.cpp @@ -67,10 +67,10 @@ void Engine::update(float delta) { for (int i = 0; i < balls.size(); i++) { sf::Vector2f forces(0, 0); - // ajout de la force de gravité + // force de gravité forces += sf::Vector2f(0, Engine::GRAVITY); - // déplacement de la balle + // déplacement de la balle après appui sur les touches de direction if (goLeftKey) { forces += sf::Vector2f(-Engine::MOVE, 0); } @@ -79,14 +79,18 @@ void Engine::update(float delta) { forces += sf::Vector2f(Engine::MOVE, 0); } - // force d'attraction + // force d'attraction entre les balles et les blocs for (int j = 0; j < balls.size(); j++) { - if (i != j) { + if (i != j && balls[i].getCharge() && balls[j].getCharge()) { sf::Vector2f attraction(balls[i].getPosition() - balls[j].getPosition()); float distanceSquared = attraction.x * attraction.x + attraction.y * attraction.y; + // normalisation du vecteur direction qui porte la force d'attraction attraction /= std::sqrt(distanceSquared); - attraction *= Engine::ATTRACTION * ((balls[i].getCharge() * balls[j].getCharge()) / distanceSquared); + attraction *= Engine::ATTRACTION * ( + (balls[i].getCharge() * balls[j].getCharge()) / + distanceSquared + ); forces += attraction; }