Product
Introducing License Enforcement in Socket
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
ngraph.quadtreebh
Advanced tools
Implementation of Barnes-Hut N-Body simulation in Javascript.
I'm still working on API and it might be changed in future.
var Body = require('ngraph.physics.primitives').Body;
// Create new bodies at (1, 0) and (2, 0):
var bodies = [];
bodies.push(new Body(1, 0));
bodies.push(new Body(2, 0));
/* ... create more as you need ... */
// build quad tree:
var createQuadTree = require('ngraph.quadtreebh');
var quadTree = createQuadTree();
// insert bodies into the quad tree
quadTree.insertBodies(bodies); // performance: O(n * log n)
// calculate forces acting on each body in the tree O(n * log n):
bodies.forEach(function(body) {
quadTree.updateBodyForce(body);
});
// At this point every body object has valid 2d force vecor
console.dir(bodies[0].force);
Note: You don't necessary have to use ngraph.physics.primitives. That package merely defines an interface for a physical Body, which is expected by quad tree. As long as your Body object implements this interface (mass
, pos
and force
) - you can use current quad tree structure to calculate forces.
Quad tree allows to change two global options:
gravity
- Gravitational constant, used in force value calculation. Defaults to -1
;theta
- a threshold which determines when group of bodies is considered distant enough to be approximated as a single body. The value should be > 0
, and usually little less than 1
. It defaults to 0.8
if not suplied. This argument affects accuracy and speed of simulation. Please refer to [1] for more details.You can pass these setting to quad tree as follows:
var createQuadTree = require('ngraph.quadtreebh');
var quadTree = createQuadTree({
theta: 1.2,
gravity: -10
});
To query current options of the tree use:
var createQuadTree = require('ngraph.quadtreebh');
var quadTree = createQuadTree();
console.dir(quadTree.options()); // prints { theta: 0.8, gravity: -1};
To change options at run time:
var createQuadTree = require('ngraph.quadtreebh');
var quadTree = createQuadTree();
quadTree.options({
theta: 0.5,
gravity: -42
});
Mass of each body affects overall result of computation. You can tweak it when creating new bodies:
var Body = require('ngraph.physics.primitives').Body;
var earth = new Body(); earth.mass = 5.972;
var sun = new Body(); sun.mass = 1989000;
npm install ngraph.quadtreebh
BSD 3-Clause
FAQs
Quad tree data structure for Barnes-Hut simulation
We found that ngraph.quadtreebh demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
Product
We're launching a new set of license analysis and compliance features for analyzing, managing, and complying with licenses across a range of supported languages and ecosystems.
Product
We're excited to introduce Socket Optimize, a powerful CLI command to secure open source dependencies with tested, optimized package overrides.