Esempio n. 1
0
        public void Update()
        {
            PositionApproximation.Run(PositionApproximation.Output);

            for (int i = 0; i < Atoms.Count; i++)
            {
                Atom atom = Atoms[i];

                Vector2 p0 = this.PositionApproximation.Output;
                Vector2 p1 = atom.PositionApproximation.Output;

                if (Intersects(atom))
                {
                    if (!Name.Equals("Proton") && !Name.Equals("Neutrone"))
                    {
                        VelocityApproximation = new Euler(new Vector2(), DELTA0)
                        {
                            f = VelocityApproximation.f
                        }
                    }
                    ;

                    Vector2 n = p1 - p0;
                    double  l = n.Length();
                    n /= l;

                    double overlapped = this.Radius + atom.Radius - l;
                    this.PositionApproximation.Output += n * overlapped;
                }
            }
        }
 public void Update(GameTime gTime)
 {
     if (PlanetMass == 1.989E30)
     {
         return;
     }
     Position = PositionApproximation.Run(Position);
 }
        public void PreSimulate()
        {
            for (double x = 0; x <= TurnAroundTime + Delta; x += Delta)
            {
                _vertices.Add(new VertexPositionColor(Position / 1000000000.0f, Color));
                _indices.Add(_index);
                _indices.Add(++_index);

                Position = PositionApproximation.Run(Position);
            }

            _indices.RemoveAt(_indices.Count - 1);
            _indices.RemoveAt(_indices.Count - 1);

            Initialize();

            VelocityApproximation   = new RK4(Velocity, CelestialBody.Delta);
            VelocityApproximation.f = a;

            PositionApproximation   = new Euler(Position, CelestialBody.Delta);
            PositionApproximation.f = v;
        }