Inheritance: System.Windows.Controls.Control
        /// <summary>
        /// 
        /// </summary>
        /// <param name="system"></param>
        /// <param name="emitter"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="minks">Minimum Spring Constant</param>
        /// <param name="maxks">Maximum Spring Constant</param>
        /// <param name="minkd">Minimum Dampening Constant</param>
        /// <param name="maxkd">Maximum Dampening Constant</param>
        /// <param name="minrest">Minimum Rest Length</param>
        /// <param name="maxrest">Maximum Rest Length</param>
        public Meatball(ParticleSystem system, Emitter emitter, double x, double y, 
            double minks, double maxks, double minkd, double maxkd, double minrest, 
            double maxrest, bool anchored)
        {
            // create thre particles
            mParticles[0] = new Particle();
            mParticles[0].IsAnchor = anchored; // anchors the first particle if so desired
            mParticles[1] = new Particle();
            mParticles[2] = new Particle();

            // update the particles
            Update(emitter, x, y);

            // Create the spring between particles 0 and 1
            Spring s = new Spring();
            s.ThisParticle = mParticles[0];
            s.ConnectedParticle = mParticles[1];
            s.SpringConstant = ParticleSystem.random.NextDouble(minks, maxks); //1.0, 4.0);
            s.DampingConstant = ParticleSystem.random.NextDouble(minkd, maxkd); //0.10, 0.30);
            s.RestLength = ParticleSystem.random.NextDouble(minrest, maxrest); //1.0, 6.0);
            mParticles[0].Connections.Add(s);
            mParticles[1].Connections.Add(s);
            //system.Forces.Add(s);

            // Create the spring between particles 0 and 2
            s = new Spring();
            s.ThisParticle = mParticles[0];
            s.ConnectedParticle = mParticles[2];
            s.SpringConstant = ParticleSystem.random.NextDouble(minks, maxks); //1.0, 4.0);
            s.DampingConstant = ParticleSystem.random.NextDouble(minkd, maxkd); //0.10, 0.30);
            s.RestLength = ParticleSystem.random.NextDouble(minrest, maxrest); //1.0, 6.0);
            mParticles[0].Connections.Add(s);
            mParticles[2].Connections.Add(s);
            //system.Forces.Add(s);

            // Create the spring between particles 1 and 2
            s = new Spring();
            s.ThisParticle = mParticles[1];
            s.ConnectedParticle = mParticles[2];
            s.SpringConstant = ParticleSystem.random.NextDouble(minks, maxks); //1.0, 4.0);
            s.DampingConstant = ParticleSystem.random.NextDouble(minkd, maxkd); //0.10, 0.30);
            s.RestLength = ParticleSystem.random.NextDouble(minrest, maxrest); //1.0, 6.0);
            mParticles[1].Connections.Add(s);
            mParticles[2].Connections.Add(s);
            //system.Forces.Add(s);

            // Add the particles to the system
            system.Particles.Add(mParticles[0]);
            system.Particles.Add(mParticles[1]);
            system.Particles.Add(mParticles[2]);
        }
        /// <summary>
        /// Update a meatball
        /// </summary>
        /// <param name="emitter"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        public void Update(Emitter emitter, double x, double y)
        {
            // All particles should have the same lifespan, so only calculate it once.
            double life = ParticleSystem.random.NextDouble(emitter.MinLifeSpan, emitter.MaxLifeSpan);

            // inti every particle in the particle list
            foreach (Particle particle in mParticles)
            {
                particle.Owner = emitter;
                particle.Mass = (float)ParticleSystem.random.NextDouble(emitter.MinMass, emitter.MaxMass);
                particle.StartOpacity = emitter.StartOpacity;
                particle.EndOpacity = emitter.EndOpacity;
                particle.Force = new Vector(0, 0);
                particle.Velocity = new Vector(
                    ParticleSystem.random.NextDouble(emitter.MinHorizontalVelocity, emitter.MaxHorizontalVelocity),
                    ParticleSystem.random.NextDouble(emitter.MinVerticalVelocity, emitter.MaxVerticalVelocity));
                particle.LifeSpan = life;
                particle.Position = new Point(x + ParticleSystem.random.NextDouble(emitter.MinPositionOffsetX, emitter.MaxPositionOffsetX),
                                              y + ParticleSystem.random.NextDouble(emitter.MinPositionOffsetY, emitter.MaxPositionOffsetY));
                particle.BackgroundColors = emitter.ColorKeyFrames;
            }
        }