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; }