import CentralGravitySolver from "./CentralGravitySolver"
|
|
|
|
/**
|
|
* @class ForceAtlas2BasedCentralGravitySolver
|
|
* @extends CentralGravitySolver
|
|
*/
|
|
class ForceAtlas2BasedCentralGravitySolver extends CentralGravitySolver {
|
|
/**
|
|
* @param {Object} body
|
|
* @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody
|
|
* @param {Object} options
|
|
* @constructor ForceAtlas2BasedCentralGravitySolver
|
|
*/
|
|
constructor(body, physicsBody, options) {
|
|
super(body, physicsBody, options);
|
|
}
|
|
|
|
|
|
/**
|
|
* Calculate the forces based on the distance.
|
|
*
|
|
* @param {number} distance
|
|
* @param {number} dx
|
|
* @param {number} dy
|
|
* @param {Object<vis.Node.id, vis.Node>} forces
|
|
* @param {vis.Node} node
|
|
* @private
|
|
*/
|
|
_calculateForces(distance, dx, dy, forces, node) {
|
|
if (distance > 0) {
|
|
let degree = (node.edges.length + 1);
|
|
let gravityForce = this.options.centralGravity * degree * node.options.mass;
|
|
forces[node.id].x = dx * gravityForce;
|
|
forces[node.id].y = dy * gravityForce;
|
|
}
|
|
}
|
|
}
|
|
|
|
export default ForceAtlas2BasedCentralGravitySolver;
|