Esempio n. 1
0
        public void Add(Spring spring)
        {
            if (!pointmass_list.Contains(spring.pointmass_a))
                spring_pointmass_list.Add(spring.pointmass_a);

            if (!pointmass_list.Contains(spring.pointmass_b))
                spring_pointmass_list.Add(spring.pointmass_b);

            spring_list.Add(spring);
        }
Esempio n. 2
0
        public override void ApplyInternalForces(double elapsed)
        {
            // internal spring forces.
            Vector2 force = new Vector2();

            for (int i = 0; i < spring_list.Count; i++)
            {
                Spring s = spring_list[i];
                Spring.SpringForce(ref s, out force);

                s.pointmass_a.force.X += force.X;
                s.pointmass_a.force.Y += force.Y;

                s.pointmass_b.force.X -= force.X;
                s.pointmass_b.force.Y -= force.Y;
            }

            // shape matching forces.
            if (is_constrained)
            {
                for (int i = 0; i < count; i++)
                {
                    if (shape_k > 0)
                    {
                        Spring.SpringForce(ref pointmass_list[i].position, ref pointmass_list[i].velocity, ref curr_shape.points[i],
                                           ref pointmass_list[i].velocity, 0.0f, shape_k, shape_damping, out force);


                        pointmass_list[i].force.X += force.X;
                        pointmass_list[i].force.Y += force.Y;
                    }
                }
            }

            for (int i = 0; i < spring_pointmass_list.Count; i++)
            {
                this.spring_pointmass_list[i].velocity.X *= damping;
                this.spring_pointmass_list[i].velocity.Y *= damping;
                this.spring_pointmass_list[i].Update(elapsed);
            }
        }
Esempio n. 3
0
        public void Update(double elapsed)
        {
            Vector2 force = new Vector2();

            for (int i = 0; i < spring_list.Count; i++)
            {
                Spring s = spring_list[i];
                Spring.SpringForce(ref s, out force);

                s.pointmass_a.force.X += force.X;
                s.pointmass_a.force.Y += force.Y;

                s.pointmass_b.force.X -= force.X;
                s.pointmass_b.force.Y -= force.Y;
            }

            for (int i = 1; i < pointmass_list.Count - 1; i++)
            {
                pointmass_list[i].velocity.X *= damping;
                pointmass_list[i].velocity.Y *= damping;
                pointmass_list[i].Update(elapsed);
            }
        }
Esempio n. 4
0
 public static void SpringForce(ref Spring spring, out Vector2 forceOut)
 {
     SpringForce(ref spring.pointmass_a.position, ref spring.pointmass_a.velocity, ref spring.pointmass_b.position, ref spring.pointmass_b.velocity, spring.d, spring.k, spring.damping, out forceOut);
 }
Esempio n. 5
0
 public static void SpringForce(ref Spring spring, out Vector2 forceOut)
 {
     SpringForce(ref spring.pointmass_a.position, ref spring.pointmass_a.velocity, ref spring.pointmass_b.position, ref spring.pointmass_b.velocity, spring.d, spring.k, spring.damping, out forceOut);
 }