Esempio n. 1
0
        public void ArrangeFrontsByRank()
        {
            if (I == 0)
            {
                // очищаем список списков фронтов, если это начало
                Fronts.Clear();
                // копируем исходные точки, чтобы не потерять
                foreach (var el in Points)
                {
                    p.Add(el);
                }
            }
            // добавляем в список списков фронтов новый фронт
            Fronts.Add(new List <PointF>());
            Fronts[I] = ParetoFront(p);
            // удаляем из рабочего массива все точки, входящие в этот фронт
            Predicate <PointF> pat = (e) => Fronts[I].Contains(e);

            p.RemoveAll(pat);
            I++;
            // если массив точек пуст, обнуляем индекс
            if (p.Count == 0)
            {
                I = 0;
            }
            // всё происходит не в цикле, чтобы иметь
            // возможность вызывать метод по таймеру
            // и отрисовывать в виде промежуточный результат
        }
Esempio n. 2
0
 // очистить фронты
 public void ClearFronts()
 {
     Fronts.Clear();
     UpdateObservers();
 }