public ScrollSpringSimulation( SpringDescription spring, float start, float end, float velocity, Tolerance tolerance = null ) : base(spring, start, end, velocity, tolerance: tolerance) { }
public ScrollSpringSimulation( SpringDescription spring, double start, double end, double velocity, Tolerance tolerance = null ) : base(spring, start, end, velocity, tolerance: tolerance) { }
public SpringSimulation( SpringDescription spring, double start, double end, double velocity, Tolerance tolerance = null ) : base(tolerance: tolerance) { this._endPosition = end; this._solution = _SpringSolution.create(spring, start - end, velocity); }
public SpringSimulation( SpringDescription spring, float start, float end, float velocity, Tolerance tolerance = null ) : base(tolerance: tolerance) { _endPosition = end; _solution = _SpringSolution.create(spring, start - end, velocity); }
internal new static _CriticalSolution create( SpringDescription spring, double distance, double velocity ) { double r = -spring.damping / (2.0 * spring.mass); double c1 = distance; double c2 = velocity / (r * distance); return(new _CriticalSolution(r, c1, c2)); }
internal new static _CriticalSolution create( SpringDescription spring, float distance, float velocity ) { float r = -spring.damping / (2.0f * spring.mass); float c1 = distance; float c2 = velocity / (r * distance); return(new _CriticalSolution(r, c1, c2)); }
internal new static _UnderdampedSolution create( SpringDescription spring, double distance, double velocity ) { double w = Math.Sqrt(4.0 * spring.mass * spring.stiffness - spring.damping * spring.damping) / (2.0 * spring.mass); double r = -(spring.damping / 2.0 * spring.mass); double c1 = distance; double c2 = (velocity - r * distance) / w; return(new _UnderdampedSolution(w, r, c1, c2)); }
internal new static _OverdampedSolution create( SpringDescription spring, double distance, double velocity ) { double cmk = spring.damping * spring.damping - 4 * spring.mass * spring.stiffness; double r1 = (-spring.damping - Math.Sqrt(cmk)) / (2.0 * spring.mass); double r2 = (-spring.damping + Math.Sqrt(cmk)) / (2.0 * spring.mass); double c2 = (velocity - r1 * distance) / (r2 - r1); double c1 = distance - c2; return(new _OverdampedSolution(r1, r2, c1, c2)); }
internal new static _UnderdampedSolution create( SpringDescription spring, float distance, float velocity ) { float w = Mathf.Sqrt(4.0f * spring.mass * spring.stiffness - spring.damping * spring.damping) / (2.0f * spring.mass); float r = -(spring.damping / 2.0f * spring.mass); float c1 = distance; float c2 = (velocity - r * distance) / w; return(new _UnderdampedSolution(w, r, c1, c2)); }
internal new static _OverdampedSolution create( SpringDescription spring, float distance, float velocity ) { float cmk = spring.damping * spring.damping - 4 * spring.mass * spring.stiffness; float r1 = (-spring.damping - Mathf.Sqrt(cmk)) / (2.0f * spring.mass); float r2 = (-spring.damping + Mathf.Sqrt(cmk)) / (2.0f * spring.mass); float c2 = (velocity - r1 * distance) / (r2 - r1); float c1 = distance - c2; return(new _OverdampedSolution(r1, r2, c1, c2)); }
internal static _SpringSolution create( SpringDescription spring, double initialPosition, double initialVelocity ) { D.assert(spring != null); double cmk = spring.damping * spring.damping - 4 * spring.mass * spring.stiffness; if (cmk == 0.0) { return(_CriticalSolution.create(spring, initialPosition, initialVelocity)); } if (cmk > 0.0) { return(_OverdampedSolution.create(spring, initialPosition, initialVelocity)); } return(_UnderdampedSolution.create(spring, initialPosition, initialVelocity)); }