예제 #1
0
파일: Attractor.cs 프로젝트: Noah1989/fmacj
        public double Potential(Particle particle)
        {
            var xyDistance = Position - particle.Position;

            // charges with different signs create a negative potential
            return Charge * particle.Charge
                    / Math.Sqrt(xyDistance.LengthSquared + Z * Z);
        }
예제 #2
0
파일: Attractor.cs 프로젝트: Noah1989/fmacj
        public Vector2D Force(Particle particle)
        {
            var xyDistance = Position - particle.Position;
            if(xyDistance.IsZero) return Vector2D.ZeroVector;

            var xyProjectionCoefficient = xyDistance.Length / Math.Sqrt(xyDistance.LengthSquared + Z * Z);

            // charges with different signs attract each other
            return -Charge * particle.Charge * xyProjectionCoefficient
                    / (xyDistance.LengthSquared + Z * Z)
                    * xyDistance.Unity;
        }
예제 #3
0
파일: Pendulum.cs 프로젝트: Noah1989/fmacj
        public Pendulum(int attractorCount)
        {
            Attractors = new AttractorSet();
            for (int i = 0; i < attractorCount; i++)
            {
                var angle = i * 2 * Math.PI / attractorCount;
                Attractors.Add(new Attractor { Position = new Vector2D(Math.Cos(angle), Math.Sin(angle)) });
            }

            Particle = new Particle { Force = ForceOnParticle };
            Friction = new FluidFriction();
        }
예제 #4
0
 public override Vector2D Force(Particle particle)
 {
     return -Coefficient * particle.Velocity.Length * particle.Velocity;
 }
예제 #5
0
파일: Friction.cs 프로젝트: Noah1989/fmacj
 public abstract Vector2D Force(Particle particle);
예제 #6
0
파일: Pendulum.cs 프로젝트: Noah1989/fmacj
 private Vector2D ForceOnParticle(Particle particle)
 {
     return Attractors.Force(particle) + Friction.Force(particle);
 }