private static ShortPair[] MoveStep_GetShortest(IList<Dot> dots) { List<ShortPair> retVal = new List<ShortPair>(); for (int outer = 0; outer < dots.Count - 1; outer++) { ShortPair currentShortest = null; for (int inner = outer + 1; inner < dots.Count; inner++) { if (dots[outer].IsStatic && dots[inner].IsStatic) { continue; } double[] link = MathND.Subtract(dots[inner].Position, dots[outer].Position); double length = MathND.GetLength(link); double avgMult = (dots[inner].RepulseMultiplier + dots[outer].RepulseMultiplier) / 2d; double ratio = length / avgMult; if (currentShortest == null || ratio < currentShortest.LengthRatio) { currentShortest = new ShortPair(outer, inner, length, ratio, avgMult, link); } } if (currentShortest != null) { retVal.Add(currentShortest); } } return retVal. OrderBy(o => o.LengthRatio). ToArray(); }
private static ShortPair[] MoveStep_GetShortest3(IList<Dot> dots) { List<ShortPair> retVal = new List<ShortPair>(); for (int outer = 0; outer < dots.Count - 1; outer++) { ShortPair currentShortest = null; for (int inner = outer + 1; inner < dots.Count; inner++) { if (dots[outer].IsStatic && dots[inner].IsStatic) { continue; } Vector3D link = dots[inner].Position - dots[outer].Position; double length = link.Length; double avgMult = (dots[inner].RepulseMult + dots[outer].RepulseMult) / 2d; double ratio = length / avgMult; if (currentShortest == null || ratio < currentShortest.LengthRatio) { currentShortest = new ShortPair(outer, inner, length, ratio, avgMult, link); } } if (currentShortest == null) { continue; } retVal.Add(currentShortest); } return retVal. OrderBy(o => o.LengthRatio). ToArray(); }