Ejemplo n.º 1
0
            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();
        }