star-sim

Barnes-Hut gravity simulation.
Log | Files | Refs | README | LICENSE

commit 3fe09681e47e02ed6abdcc719a8d8b3a4f80da09
parent b1b317c4bdfcc45519c6aae3ab50c474a274f13b
Author: Amin Mesbah <mesbahamin@gmail.com>
Date:   Fri, 16 Jun 2017 22:40:28 -0700

Fix center-of-mass calculation.

Diffstat:
Mbarnes_hut.h | 17++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/barnes_hut.h b/barnes_hut.h @@ -237,20 +237,21 @@ void quad_tree_set_virtual_stars(struct QuadTreeNode *node, struct Star virtual_ } else if (*current_num < max_virtual_stars) { - // TODO: handle mass more intelligently float x_sum = 0; float y_sum = 0; float mass_sum = 0; for (int i = 0; i < node->cell->num_stars; ++i) { - x_sum += node->cell->stars[i]->x; - y_sum += node->cell->stars[i]->y; - mass_sum += node->cell->stars[i]->mass; + struct Star *s = node->cell->stars[i]; + + mass_sum += s->mass; + x_sum += s->x * s->mass; + y_sum += s->y * s->mass; } - float x_avg = x_sum / node->cell->num_stars; - float y_avg = y_sum / node->cell->num_stars; + float x_avg = x_sum / mass_sum; + float y_avg = y_sum / mass_sum; virtual_stars[*current_num].x = x_avg; virtual_stars[*current_num].y = y_avg; @@ -259,7 +260,9 @@ void quad_tree_set_virtual_stars(struct QuadTreeNode *node, struct Star virtual_ } else { - printf("Virtual_stars buffer overflow.\n"); + printf("Virtual_stars buffer overflow:\n\tcurrent_num: %d\n\tmax_virtual_stars: %d\n", + *current_num, + max_virtual_stars); } }