private void move(double timeDelta, Body b, double finalTime) { var force = Point3D.Zero; foreach (var c in bodies) { if (c == b) continue; var fac = World.forceFac * c.mass; var d = c.current - b.current; var dist = d.Length; if (dist < 0.0001) continue; force += d.Normalize() * (fac / (dist * dist)); } b.SetCurrent(timeDelta, force, finalTime); }
private void DrawBodyTrack(Graphics g, Body body,Pen trackPen) { var _track = body.track.Where((x, i) => i % 1 == 0).ToList(); var _forces = body.forces.Where((x, i) => i % 1 == 0).ToList(); var cv = _track.Select(x => x.toPF(mx)).ToArray(); if (cv.Length > 1) g.DrawCurve(trackPen, cv); for (int i = 0; i < _track.Count - 1; ++i) if (_forces[i].Length > 0) g.DrawLine(forcePen, _track[i].toPF(mx), (_track[i] + _forces[i] * 500).toPF(mx)); var cur = body.current.toPF(mx); // g.DrawLine(forcePen, cur, (body.current + body.currentF * 1000).toPF(mx)); g.DrawEllipse(trackPen, cur.X-3, cur.Y-3, 6, 6); }