Force d'attraction pour tous

This commit is contained in:
Mattéo Delabre 2016-03-19 15:38:08 +01:00
parent 20d15c6df8
commit 4b606cc1da
2 changed files with 33 additions and 33 deletions

View File

@ -20,39 +20,6 @@ sf::Vector2f Ball::getForces(EngineState& state) {
forces += sf::Vector2f(Constants::MOVE, 0);
}
// force d'attraction entre les balles et les blocs chargés
if (getCharge() != 0) {
for (unsigned int j = 0; j < state.objects.size(); j++) {
Object *attractive = state.objects[j];
if (attractive == this || attractive->getCharge() == 0) {
continue;
}
// vecteur allant de l'objet attirant vers l'objet considéré
sf::Vector2f attraction(getPosition() - attractive->getPosition());
// la norme de ce vecteur est la distance entre les objets
float distanceSquared = attraction.x * attraction.x +
attraction.y * attraction.y;
// éviter la division par zéro
if (distanceSquared == 0) {
continue;
}
// normalisation du vecteur direction qui porte
// la force d'attraction, puis application de la norme
attraction /= std::sqrt(distanceSquared);
attraction *= Constants::ATTRACTION * (
(getCharge() * attractive->getCharge()) /
distanceSquared
);
forces += attraction;
}
}
return forces;
}

View File

@ -17,6 +17,39 @@ sf::Vector2f Object::getForces(EngineState& state) {
// force de gravité
forces += sf::Vector2f(0, Constants::GRAVITY);
// force d'attraction entre objets chargés
if (getCharge() != 0) {
for (unsigned int j = 0; j < state.objects.size(); j++) {
Object *attractive = state.objects[j];
if (attractive == this || attractive->getCharge() == 0) {
continue;
}
// vecteur allant de l'objet attracteur vers l'objet actuel
sf::Vector2f attraction(getPosition() - attractive->getPosition());
// la norme de ce vecteur est la distance entre les objets
float distanceSquared = attraction.x * attraction.x +
attraction.y * attraction.y;
// éviter la division par zéro
if (distanceSquared == 0) {
continue;
}
// normalisation du vecteur direction qui porte
// la force d'attraction, puis application de la norme
attraction /= std::sqrt(distanceSquared);
attraction *= Constants::ATTRACTION * (
(getCharge() * attractive->getCharge()) /
distanceSquared
);
forces += attraction;
}
}
return forces;
}