예제 #1
0
 public ScrollSpringSimulation(
     SpringDescription spring,
     float start,
     float end,
     float velocity,
     Tolerance tolerance = null
     ) : base(spring, start, end, velocity, tolerance: tolerance)
 {
 }
예제 #2
0
 public ScrollSpringSimulation(
     SpringDescription spring,
     double start,
     double end,
     double velocity,
     Tolerance tolerance = null
     ) : base(spring, start, end, velocity, tolerance: tolerance)
 {
 }
예제 #3
0
 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);
 }
예제 #4
0
 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);
 }
예제 #5
0
        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));
        }
예제 #6
0
        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));
        }
예제 #7
0
        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));
        }
예제 #8
0
        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));
        }
예제 #9
0
        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));
        }
예제 #10
0
        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));
        }
예제 #11
0
        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));
        }