UNPKG

p2s

Version:

A JavaScript 2D physics engine.

1,200 lines (763 loc) 40.3 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>GSSolver - p2.js</title> <link rel="stylesheet" href="http://yui.yahooapis.com/3.9.1/build/cssgrids/cssgrids-min.css"> <link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css"> <link rel="stylesheet" href="../assets/css/main.css" id="site_styles"> <link rel="icon" href="../assets/favicon.ico"> <script src="http://yui.yahooapis.com/combo?3.9.1/build/yui/yui-min.js"></script> </head> <body class="yui3-skin-sam"> <div id="doc"> <div id="hd" class="yui3-g header"> <div class="yui3-u-3-4"> <h1><img src="../assets/css/logo.png" title="p2.js" width="117" height="52"></h1> </div> <div class="yui3-u-1-4 version"> <em>API Docs for: 0.7.1</em> </div> </div> <div id="bd" class="yui3-g"> <div class="yui3-u-1-4"> <div id="docs-sidebar" class="sidebar apidocs"> <div id="api-list"> <h2 class="off-left">APIs</h2> <div id="api-tabview" class="tabview"> <ul class="tabs"> <li><a href="#api-classes">Classes</a></li> <li><a href="#api-modules">Modules</a></li> </ul> <div id="api-tabview-filter"> <input type="search" id="api-filter" placeholder="Type to filter APIs"> </div> <div id="api-tabview-panel"> <ul id="api-classes" class="apis classes"> <li><a href="../classes/AABB.html">AABB</a></li> <li><a href="../classes/AngleLockEquation.html">AngleLockEquation</a></li> <li><a href="../classes/Body.html">Body</a></li> <li><a href="../classes/Box.html">Box</a></li> <li><a href="../classes/Broadphase.html">Broadphase</a></li> <li><a href="../classes/Capsule.html">Capsule</a></li> <li><a href="../classes/Circle.html">Circle</a></li> <li><a href="../classes/Constraint.html">Constraint</a></li> <li><a href="../classes/ContactEquation.html">ContactEquation</a></li> <li><a href="../classes/ContactMaterial.html">ContactMaterial</a></li> <li><a href="../classes/Convex.html">Convex</a></li> <li><a href="../classes/DistanceConstraint.html">DistanceConstraint</a></li> <li><a href="../classes/Equation.html">Equation</a></li> <li><a href="../classes/EventEmitter.html">EventEmitter</a></li> <li><a href="../classes/FrictionEquation.html">FrictionEquation</a></li> <li><a href="../classes/GearConstraint.html">GearConstraint</a></li> <li><a href="../classes/GSSolver.html">GSSolver</a></li> <li><a href="../classes/Heightfield.html">Heightfield</a></li> <li><a href="../classes/Island.html">Island</a></li> <li><a href="../classes/IslandManager.html">IslandManager</a></li> <li><a href="../classes/IslandNode.html">IslandNode</a></li> <li><a href="../classes/Line.html">Line</a></li> <li><a href="../classes/LinearSpring.html">LinearSpring</a></li> <li><a href="../classes/LockConstraint.html">LockConstraint</a></li> <li><a href="../classes/Material.html">Material</a></li> <li><a href="../classes/NaiveBroadphase.html">NaiveBroadphase</a></li> <li><a href="../classes/Narrowphase.html">Narrowphase</a></li> <li><a href="../classes/Object pooling utility..html">Object pooling utility.</a></li> <li><a href="../classes/OverlapKeeper.html">OverlapKeeper</a></li> <li><a href="../classes/OverlapKeeperRecord.html">OverlapKeeperRecord</a></li> <li><a href="../classes/Particle.html">Particle</a></li> <li><a href="../classes/Plane.html">Plane</a></li> <li><a href="../classes/PrismaticConstraint.html">PrismaticConstraint</a></li> <li><a href="../classes/Ray.html">Ray</a></li> <li><a href="../classes/RaycastResult.html">RaycastResult</a></li> <li><a href="../classes/RevoluteConstraint.html">RevoluteConstraint</a></li> <li><a href="../classes/RotationalLockEquation.html">RotationalLockEquation</a></li> <li><a href="../classes/.html"></a></li> <li><a href="../classes/RotationalSpring.html">RotationalSpring</a></li> <li><a href="../classes/RotationalVelocityEquation.html">RotationalVelocityEquation</a></li> <li><a href="../classes/SAPBroadphase.html">SAPBroadphase</a></li> <li><a href="../classes/Shape.html">Shape</a></li> <li><a href="../classes/Solver.html">Solver</a></li> <li><a href="../classes/Spring.html">Spring</a></li> <li><a href="../classes/TopDownVehicle.html">TopDownVehicle</a></li> <li><a href="../classes/TupleDictionary.html">TupleDictionary</a></li> <li><a href="../classes/Utils.html">Utils</a></li> <li><a href="../classes/vec2.html">vec2</a></li> <li><a href="../classes/WheelConstraint.html">WheelConstraint</a></li> <li><a href="../classes/World.html">World</a></li> </ul> <ul id="api-modules" class="apis modules"> </ul> </div> </div> </div> </div> </div> <div class="yui3-u-3-4"> <div id="api-options"> Show: <label for="api-show-inherited"> <input type="checkbox" id="api-show-inherited" checked> Inherited </label> <label for="api-show-protected"> <input type="checkbox" id="api-show-protected"> Protected </label> <label for="api-show-private"> <input type="checkbox" id="api-show-private"> Private </label> <label for="api-show-deprecated"> <input type="checkbox" id="api-show-deprecated"> Deprecated </label> </div> <div class="apidocs"> <div id="docs-main"> <div class="content"> <h1>GSSolver Class</h1> <div class="box meta"> <div class="extends"> Extends <a href="../classes/Solver.html" class="crosslink">Solver</a> </div> <div class="foundat"> Defined in: <a href="../files/src_solver_GSSolver.js.html#l8"><code>src&#x2F;solver&#x2F;GSSolver.js:8</code></a> </div> </div> <div class="box intro"> <p>Iterative Gauss-Seidel constraint equation solver.</p> </div> <div class="constructor"> <h2>Constructor</h2> <div id="method_GSSolver" class="method item"> <h3 class="name"><code>GSSolver</code></h3> <div class="args"> <span class="paren">(</span><ul class="args-list inline commas"> <li class="arg"> <code class="optional">[options]</code> </li> </ul><span class="paren">)</span> </div> <div class="meta"> <p> Defined in <a href="../files/src_solver_GSSolver.js.html#l8"><code>src&#x2F;solver&#x2F;GSSolver.js:8</code></a> </p> </div> <div class="description"> </div> <div class="params"> <h4>Parameters:</h4> <ul class="params-list"> <li class="param"> <code class="param-name optional">[options]</code> <span class="type">Object</span> <span class="flag optional" title="This parameter is optional.">optional</span> <div class="param-description"> </div> <ul class="params-list"> <li class="param"> <code class="param-name optional">[iterations=10]</code> <span class="type">Number</span> <span class="flag optional" title="This parameter is optional.">optional</span> <div class="param-description"> </div> </li> <li class="param"> <code class="param-name optional">[tolerance=0]</code> <span class="type">Number</span> <span class="flag optional" title="This parameter is optional.">optional</span> <div class="param-description"> </div> </li> </ul> </li> </ul> </div> </div> </div> <div id="classdocs" class="tabview"> <ul class="api-class-tabs"> <li class="api-class-tab index"><a href="#index">Index</a></li> <li class="api-class-tab methods"><a href="#methods">Methods</a></li> <li class="api-class-tab properties"><a href="#properties">Properties</a></li> </ul> <div> <div id="index" class="api-class-tabpanel index"> <h2 class="off-left">Item Index</h2> <div class="index-section methods"> <h3>Methods</h3> <ul class="index-list methods extends"> <li class="index-item method inherited"> <a href="#method_addEquation">addEquation</a> </li> <li class="index-item method inherited"> <a href="#method_addEquations">addEquations</a> </li> <li class="index-item method inherited"> <a href="#method_emit">emit</a> </li> <li class="index-item method inherited"> <a href="#method_has">has</a> </li> <li class="index-item method inherited"> <a href="#method_off">off</a> </li> <li class="index-item method inherited"> <a href="#method_on">on</a> </li> <li class="index-item method inherited"> <a href="#method_removeAllEquations">removeAllEquations</a> </li> <li class="index-item method inherited"> <a href="#method_removeEquation">removeEquation</a> </li> <li class="index-item method inherited"> <a href="#method_solve">solve</a> </li> <li class="index-item method inherited"> <a href="#method_solveIsland">solveIsland</a> </li> <li class="index-item method inherited"> <a href="#method_sortEquations">sortEquations</a> </li> </ul> </div> <div class="index-section properties"> <h3>Properties</h3> <ul class="index-list properties extends"> <li class="index-item property inherited"> <a href="#property_equations">equations</a> </li> <li class="index-item property inherited"> <a href="#property_equationSortFunction">equationSortFunction</a> </li> <li class="index-item property"> <a href="#property_frictionIterations">frictionIterations</a> </li> <li class="index-item property"> <a href="#property_iterations">iterations</a> </li> <li class="index-item property"> <a href="#property_tolerance">tolerance</a> </li> <li class="index-item property"> <a href="#property_usedIterations">usedIterations</a> </li> <li class="index-item property"> <a href="#property_useZeroRHS">useZeroRHS</a> </li> </ul> </div> </div> <div id="methods" class="api-class-tabpanel"> <h2 class="off-left">Methods</h2> <div id="method_addEquation" class="method item inherited"> <h3 class="name"><code>addEquation</code></h3> <div class="args"> <span class="paren">(</span><ul class="args-list inline commas"> <li class="arg"> <code>eq</code> </li> </ul><span class="paren">)</span> </div> <div class="meta"> <p>Inherited from <a href="../classes/Solver.html#method_addEquation">Solver</a>: <a href="../files/src_solver_Solver.js.html#l82"><code>src&#x2F;solver&#x2F;Solver.js:82</code></a> </p> </div> <div class="description"> <p>Add an equation to be solved.</p> </div> <div class="params"> <h4>Parameters:</h4> <ul class="params-list"> <li class="param"> <code class="param-name">eq</code> <span class="type"><a href="../classes/Equation.html" class="crosslink">Equation</a></span> <div class="param-description"> </div> </li> </ul> </div> </div> <div id="method_addEquations" class="method item inherited"> <h3 class="name"><code>addEquations</code></h3> <div class="args"> <span class="paren">(</span><ul class="args-list inline commas"> <li class="arg"> <code>eqs</code> </li> </ul><span class="paren">)</span> </div> <div class="meta"> <p>Inherited from <a href="../classes/Solver.html#method_addEquations">Solver</a>: <a href="../files/src_solver_Solver.js.html#l94"><code>src&#x2F;solver&#x2F;Solver.js:94</code></a> </p> </div> <div class="description"> <p>Add equations. Same as .addEquation, but this time the argument is an array of Equations</p> </div> <div class="params"> <h4>Parameters:</h4> <ul class="params-list"> <li class="param"> <code class="param-name">eqs</code> <span class="type">Array</span> <div class="param-description"> </div> </li> </ul> </div> </div> <div id="method_emit" class="method item inherited"> <h3 class="name"><code>emit</code></h3> <div class="args"> <span class="paren">(</span><ul class="args-list inline commas"> <li class="arg"> <code>event</code> </li> </ul><span class="paren">)</span> </div> <span class="returns-inline"> <span class="type"><a href="../classes/EventEmitter.html" class="crosslink">EventEmitter</a></span> </span> <div class="meta"> <p>Inherited from <a href="../classes/EventEmitter.html#method_emit">EventEmitter</a>: <a href="../files/src_events_EventEmitter.js.html#l79"><code>src&#x2F;events&#x2F;EventEmitter.js:79</code></a> </p> </div> <div class="description"> <p>Emit an event.</p> </div> <div class="params"> <h4>Parameters:</h4> <ul class="params-list"> <li class="param"> <code class="param-name">event</code> <span class="type">Object</span> <div class="param-description"> </div> <ul class="params-list"> <li class="param"> <code class="param-name">type</code> <span class="type">String</span> <div class="param-description"> </div> </li> </ul> </li> </ul> </div> <div class="returns"> <h4>Returns:</h4> <div class="returns-description"> <span class="type"><a href="../classes/EventEmitter.html" class="crosslink">EventEmitter</a></span>: <p>The self object, for chainability.</p> </div> </div> </div> <div id="method_has" class="method item inherited"> <h3 class="name"><code>has</code></h3> <div class="args"> <span class="paren">(</span><ul class="args-list inline commas"> <li class="arg"> <code>type</code> </li> <li class="arg"> <code>listener</code> </li> </ul><span class="paren">)</span> </div> <span class="returns-inline"> <span class="type">Boolean</span> </span> <div class="meta"> <p>Inherited from <a href="../classes/EventEmitter.html#method_has">EventEmitter</a>: <a href="../files/src_events_EventEmitter.js.html#l35"><code>src&#x2F;events&#x2F;EventEmitter.js:35</code></a> </p> </div> <div class="description"> <p>Check if an event listener is added</p> </div> <div class="params"> <h4>Parameters:</h4> <ul class="params-list"> <li class="param"> <code class="param-name">type</code> <span class="type">String</span> <div class="param-description"> </div> </li> <li class="param"> <code class="param-name">listener</code> <span class="type">Function</span> <div class="param-description"> </div> </li> </ul> </div> <div class="returns"> <h4>Returns:</h4> <div class="returns-description"> <span class="type">Boolean</span>: </div> </div> </div> <div id="method_off" class="method item inherited"> <h3 class="name"><code>off</code></h3> <div class="args"> <span class="paren">(</span><ul class="args-list inline commas"> <li class="arg"> <code>type</code> </li> <li class="arg"> <code>listener</code> </li> </ul><span class="paren">)</span> </div> <span class="returns-inline"> <span class="type"><a href="../classes/EventEmitter.html" class="crosslink">EventEmitter</a></span> </span> <div class="meta"> <p>Inherited from <a href="../classes/EventEmitter.html#method_off">EventEmitter</a>: <a href="../files/src_events_EventEmitter.js.html#l60"><code>src&#x2F;events&#x2F;EventEmitter.js:60</code></a> </p> </div> <div class="description"> <p>Remove an event listener</p> </div> <div class="params"> <h4>Parameters:</h4> <ul class="params-list"> <li class="param"> <code class="param-name">type</code> <span class="type">String</span> <div class="param-description"> </div> </li> <li class="param"> <code class="param-name">listener</code> <span class="type">Function</span> <div class="param-description"> </div> </li> </ul> </div> <div class="returns"> <h4>Returns:</h4> <div class="returns-description"> <span class="type"><a href="../classes/EventEmitter.html" class="crosslink">EventEmitter</a></span>: <p>The self object, for chainability.</p> </div> </div> </div> <div id="method_on" class="method item inherited"> <h3 class="name"><code>on</code></h3> <div class="args"> <span class="paren">(</span><ul class="args-list inline commas"> <li class="arg"> <code>type</code> </li> <li class="arg"> <code>listener</code> </li> </ul><span class="paren">)</span> </div> <span class="returns-inline"> <span class="type"><a href="../classes/EventEmitter.html" class="crosslink">EventEmitter</a></span> </span> <div class="meta"> <p>Inherited from <a href="../classes/EventEmitter.html#method_on">EventEmitter</a>: <a href="../files/src_events_EventEmitter.js.html#l13"><code>src&#x2F;events&#x2F;EventEmitter.js:13</code></a> </p> </div> <div class="description"> <p>Add an event listener</p> </div> <div class="params"> <h4>Parameters:</h4> <ul class="params-list"> <li class="param"> <code class="param-name">type</code> <span class="type">String</span> <div class="param-description"> </div> </li> <li class="param"> <code class="param-name">listener</code> <span class="type">Function</span> <div class="param-description"> </div> </li> </ul> </div> <div class="returns"> <h4>Returns:</h4> <div class="returns-description"> <span class="type"><a href="../classes/EventEmitter.html" class="crosslink">EventEmitter</a></span>: <p>The self object, for chainability.</p> </div> </div> </div> <div id="method_removeAllEquations" class="method item inherited"> <h3 class="name"><code>removeAllEquations</code></h3> <span class="paren">()</span> <div class="meta"> <p>Inherited from <a href="../classes/Solver.html#method_removeAllEquations">Solver</a>: <a href="../files/src_solver_Solver.js.html#l123"><code>src&#x2F;solver&#x2F;Solver.js:123</code></a> </p> </div> <div class="description"> <p>Remove all currently added equations.</p> </div> </div> <div id="method_removeEquation" class="method item inherited"> <h3 class="name"><code>removeEquation</code></h3> <div class="args"> <span class="paren">(</span><ul class="args-list inline commas"> <li class="arg"> <code>eq</code> </li> </ul><span class="paren">)</span> </div> <div class="meta"> <p>Inherited from <a href="../classes/Solver.html#method_removeEquation">Solver</a>: <a href="../files/src_solver_Solver.js.html#l110"><code>src&#x2F;solver&#x2F;Solver.js:110</code></a> </p> </div> <div class="description"> <p>Remove an equation.</p> </div> <div class="params"> <h4>Parameters:</h4> <ul class="params-list"> <li class="param"> <code class="param-name">eq</code> <span class="type"><a href="../classes/Equation.html" class="crosslink">Equation</a></span> <div class="param-description"> </div> </li> </ul> </div> </div> <div id="method_solve" class="method item"> <h3 class="name"><code>solve</code></h3> <div class="args"> <span class="paren">(</span><ul class="args-list inline commas"> <li class="arg"> <code>h</code> </li> <li class="arg"> <code>world</code> </li> </ul><span class="paren">)</span> </div> <div class="meta"> <p>Inherited from <a href="../classes/Solver.html#method_solve"> Solver </a> but overwritten in <a href="../files/src_solver_GSSolver.js.html#l77"><code>src&#x2F;solver&#x2F;GSSolver.js:77</code></a> </p> </div> <div class="description"> <p>Solve the system of equations</p> </div> <div class="params"> <h4>Parameters:</h4> <ul class="params-list"> <li class="param"> <code class="param-name">h</code> <span class="type">Number</span> <div class="param-description"> <p>Time step</p> </div> </li> <li class="param"> <code class="param-name">world</code> <span class="type"><a href="../classes/World.html" class="crosslink">World</a></span> <div class="param-description"> <p>World to solve</p> </div> </li> </ul> </div> </div> <div id="method_solveIsland" class="method item inherited"> <h3 class="name"><code>solveIsland</code></h3> <div class="args"> <span class="paren">(</span><ul class="args-list inline commas"> <li class="arg"> <code>dt</code> </li> <li class="arg"> <code>island</code> </li> </ul><span class="paren">)</span> </div> <div class="meta"> <p>Inherited from <a href="../classes/Solver.html#method_solveIsland">Solver</a>: <a href="../files/src_solver_Solver.js.html#l49"><code>src&#x2F;solver&#x2F;Solver.js:49</code></a> </p> </div> <div class="description"> <p>Solves all constraints in an island.</p> </div> <div class="params"> <h4>Parameters:</h4> <ul class="params-list"> <li class="param"> <code class="param-name">dt</code> <span class="type">Number</span> <div class="param-description"> </div> </li> <li class="param"> <code class="param-name">island</code> <span class="type"><a href="../classes/Island.html" class="crosslink">Island</a></span> <div class="param-description"> </div> </li> </ul> </div> </div> <div id="method_sortEquations" class="method item inherited"> <h3 class="name"><code>sortEquations</code></h3> <span class="paren">()</span> <div class="meta"> <p>Inherited from <a href="../classes/Solver.html#method_sortEquations">Solver</a>: <a href="../files/src_solver_Solver.js.html#l72"><code>src&#x2F;solver&#x2F;Solver.js:72</code></a> </p> </div> <div class="description"> <p>Sort all equations using the .equationSortFunction. Should be called by subclasses before solving.</p> </div> </div> </div> <div id="properties" class="api-class-tabpanel"> <h2 class="off-left">Properties</h2> <div id="property_equations" class="property item inherited"> <h3 class="name"><code>equations</code></h3> <span class="type">Array</span> <div class="meta"> <p>Inherited from <a href="../classes/Solver.html#property_equations">Solver</a>: <a href="../files/src_solver_Solver.js.html#l19"><code>src&#x2F;solver&#x2F;Solver.js:19</code></a> </p> </div> <div class="description"> <p>Current equations in the solver.</p> </div> </div> <div id="property_equationSortFunction" class="property item inherited"> <h3 class="name"><code>equationSortFunction</code></h3> <span class="type">Function | Boolean</span> <div class="meta"> <p>Inherited from <a href="../classes/Solver.html#property_equationSortFunction">Solver</a>: <a href="../files/src_solver_Solver.js.html#l27"><code>src&#x2F;solver&#x2F;Solver.js:27</code></a> </p> </div> <div class="description"> <p>Function that is used to sort all equations before each solve.</p> </div> </div> <div id="property_frictionIterations" class="property item"> <h3 class="name"><code>frictionIterations</code></h3> <span class="type">Number</span> <div class="meta"> <p> Defined in <a href="../files/src_solver_GSSolver.js.html#l50"><code>src&#x2F;solver&#x2F;GSSolver.js:50</code></a> </p> </div> <div class="description"> <p>Number of solver iterations that are used to approximate normal forces used for friction (F_friction = mu * F_normal). These friction forces will override any other friction forces that are set. If you set frictionIterations = 0, then this feature will be disabled.</p> <p>Use only frictionIterations &gt; 0 if the approximated normal force (F_normal = mass * gravity) is not good enough. Examples of where it can happen is in space games where gravity is zero, or in tall stacks where the normal force is large at bottom but small at top.</p> </div> <p><strong>Default:</strong> 0</p> </div> <div id="property_iterations" class="property item"> <h3 class="name"><code>iterations</code></h3> <span class="type">Number</span> <div class="meta"> <p> Defined in <a href="../files/src_solver_GSSolver.js.html#l22"><code>src&#x2F;solver&#x2F;GSSolver.js:22</code></a> </p> </div> <div class="description"> <p>The max number of iterations to do when solving. More gives better results, but is more expensive.</p> </div> </div> <div id="property_tolerance" class="property item"> <h3 class="name"><code>tolerance</code></h3> <span class="type">Number</span> <div class="meta"> <p> Defined in <a href="../files/src_solver_GSSolver.js.html#l29"><code>src&#x2F;solver&#x2F;GSSolver.js:29</code></a> </p> </div> <div class="description"> <p>The error tolerance, per constraint. If the total error is below this limit, the solver will stop iterating. Set to zero for as good solution as possible, but to something larger than zero to make computations faster.</p> </div> <p><strong>Default:</strong> 1e-7</p> </div> <div id="property_usedIterations" class="property item"> <h3 class="name"><code>usedIterations</code></h3> <span class="type">Number</span> <div class="meta"> <p> Defined in <a href="../files/src_solver_GSSolver.js.html#l61"><code>src&#x2F;solver&#x2F;GSSolver.js:61</code></a> </p> </div> <div class="description"> <p>The number of iterations that were made during the last solve. If .tolerance is zero, this value will always be equal to .iterations, but if .tolerance is larger than zero, and the solver can quit early, then this number will be somewhere between 1 and .iterations.</p> </div> </div> <div id="property_useZeroRHS" class="property item"> <h3 class="name"><code>useZeroRHS</code></h3> <span class="type">Boolean</span> <div class="meta"> <p> Defined in <a href="../files/src_solver_GSSolver.js.html#l42"><code>src&#x2F;solver&#x2F;GSSolver.js:42</code></a> </p> </div> <div class="description"> <p>Set to true to set all right hand side terms to zero when solving. Can be handy for a few applications.</p> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <script src="../assets/vendor/prettify/prettify-min.js"></script> <script>prettyPrint();</script> <script src="../assets/js/yui-prettify.js"></script> <script src="../assets/../api.js"></script> <script src="../assets/js/api-filter.js"></script> <script src="../assets/js/api-list.js"></script> <script src="../assets/js/api-search.js"></script> <script src="../assets/js/apidocs.js"></script> </body> </html>