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; } // всё происходит не в цикле, чтобы иметь // возможность вызывать метод по таймеру // и отрисовывать в виде промежуточный результат }
// очистить фронты public void ClearFronts() { Fronts.Clear(); UpdateObservers(); }