Newer
Older
#include "BarnesHutTree.hpp"
BarnesHutTree::BarnesHutTree() {
}
BarnesHutTree::~BarnesHutTree() {
vector<Box> BarnesHutTree::splitBB(Node* node) {
int BarnesHutTree::numberOfChildren() {
return 8;
}
void BarnesHutTree::build(vector<Body> bodies) {
current->extendBBforBodies();
current->extendBBtoCube();
current->afterSubtree = current->next;
//iterate over existing boxes and split if it contains too much bodies
while (current != this->nodes) {
if (current->isSplitable()) {
vector<Box> subboxes = this->splitBB(current);
for (vector<Box>::iterator it = subboxes.begin(); it != subboxes.end(); it++) {
child->bodies = it->copyBodies(current->bodies);
child->nextSibling = current->next;
current->next->prevSibling = child;
if (it != subboxes.begin()) {
child->afterSubtree = child->next;
} else {
child->afterSubtree = current->afterSubtree;
}
}
current->bodies.clear();
}
current = current->next;
}