
Security News
npm Adopts OIDC for Trusted Publishing in CI/CD Workflows
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
ngraph.quadtreebh3d
Advanced tools
Quad Tree data structure for Barnes-Hut simulation in 3d space
Quad Tree data structure for Barnes-Hut simulation in 3d space. Technically it should be named OctTree, since it's not a quad tree. But for parity with 2d interface it's currently called quadtree. Let me know if you think it should be changed :).
This project is part of ngraph family. If you need 2d quad tree follow to ngraph.quadtreebh.
var Body = require('ngraph.physics.primitives').Body3d;
// Create new bodies at (1, 1, 1) and (0, 0, 0):
var bodies = [];
bodies.push(new Body(1, 1, 1));
bodies.push(new Body(0, 0, 0));
/* ... create more as you need ... */
// build quad tree:
var createQuadTree = require('ngraph.quadtreebh3d');
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 3d 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.quadtreebh3d');
var quadTree = createQuadTree({
theta: 1.2,
gravity: -10
});
To query current options of the tree use:
var createQuadTree = require('ngraph.quadtreebh3d');
var quadTree = createQuadTree();
console.dir(quadTree.options()); // prints { theta: 0.8, gravity: -1};
To change options at run time:
var createQuadTree = require('ngraph.quadtreebh3d');
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;
With npm do:
npm install ngraph.quadtreebh3d
MIT
FAQs
Quad Tree data structure for Barnes-Hut simulation in 3d space
The npm package ngraph.quadtreebh3d receives a total of 761 weekly downloads. As such, ngraph.quadtreebh3d popularity was classified as not popular.
We found that ngraph.quadtreebh3d 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.
Security News
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
Research
/Security News
A RubyGems malware campaign used 60 malicious packages posing as automation tools to steal credentials from social media and marketing tool users.
Security News
The CNA Scorecard ranks CVE issuers by data completeness, revealing major gaps in patch info and software identifiers across thousands of vulnerabilities.