Skip to content

A multi-surface elastic collision force type for the d3-force simulation engine

License

Notifications You must be signed in to change notification settings

vasturiano/d3-force-surface

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

d3.forceSurface

NPM package Build Size NPM Downloads

A multi-surface elastic collision force type for the d3-force simulation engine.

It can be used, for example to keep nodes within boundaries or in a game of Pong.

See also d3.forceBounce.

Quick start

import d3ForceSurface from 'd3-force-surface';

or using a script tag

<script src="//unpkg.com/d3-force-surface/dist/d3-force-surface.min.js"></script>

then

d3.forceSimulation()
    .nodes(<myNodes>)
    .force('surface', d3.forceSurface()
        .surfaces(<mySurfaces>)
    );

API reference

Method Description Default
surfaces([array]) Getter/setter for the list of surface lines []
elasticity([number]) Getter/setter for every collision's coefficient of restitution, aka elasticity. A value of 1 represents a purely elastic collision with no energy loss, while a 0 will fully eliminate the bounce in the collision direction. Values >1 can be used to introduce acceleration at each collision. Values <0 are not recommended. 1
radius([num or fn]) Getter/setter for the node object radius accessor function (fn(node)) or a constant (num) for all nodes. 1
from([fn]) Getter/setter for the surface object starting point accessor function fn(surface). It should return a two coordinate object: {x,y} surface.from
to([fn]) Getter/setter for the surface object ending point accessor function fn(surface). It should return a two coordinate object: {x,y} surface.to
oneWay([bool or fn]) Getter/setter for the surface object "one-way" flag accessor function (fn(surface)) or a constant for all surfaces. This flag indicates whether collisions of nodes against the surface should occur in both directions of movement or only in one (when the node is moving in a N>S orientation according to the W>E line axis), effectively ignoring collisions in the other direction. false
onImpact([fn]) Callback function triggered at every collision, with the signature onImpact(node, surface)