Это может быть некоторым большим количеством работы, но я пошел бы наоборот.
Инстанцируют TraceListener
для консоли и один для файла журнала; после этого используйте Trace.Write
операторы в Вашем коде вместо Console.Write
. Становится легче впоследствии удалить журнал или консольный вывод, или присоединить другой механизм входа.
static void Main(string[] args)
{
Trace.Listeners.Clear();
TextWriterTraceListener twtl = new TextWriterTraceListener(Path.Combine(Path.GetTempPath(), AppDomain.CurrentDomain.FriendlyName));
twtl.Name = "TextLogger";
twtl.TraceOutputOptions = TraceOptions.ThreadId | TraceOptions.DateTime;
ConsoleTraceListener ctl = new ConsoleTraceListener(false);
ctl.TraceOutputOptions = TraceOptions.DateTime;
Trace.Listeners.Add(twtl);
Trace.Listeners.Add(ctl);
Trace.AutoFlush = true;
Trace.WriteLine("The first line to be in the logfile and on the console.");
}
, Насколько я могу вспомнить, можно определить слушателей в конфигурации приложения, позволяющей активировать или деактивировать вход, не касаясь сборки.
Надеюсь, я правильно понял ваш вопрос ...
Можно доказать, что гексагональная плотная упаковка (HCP) сфер покрывает максимальный объем, используя сферы. Поэтому я предполагаю, что выполнение HCP с кругами также охватит максимальную площадь с помощью кругов. Создайте мозаику из треугольников и поместите круг с центром в каждой вершине треугольника с радиусом, равным половине длины стороны треугольника. См. this для изображения алгоритма, о котором я говорю.
Примечание: Это похоже на плотную упаковку атомов в элементарной ячейке .
РЕДАКТИРОВАТЬ: Мой предыдущий метод покрывает максимально возможную площадь без перекрытия. Если перекрытие разрешено, то (я считаю, что) следующий метод может покрыть всю область с минимальным перекрытием.
Как вы, вероятно, знаете, существует только 3 мозаики 2D-пространства с правильными многоугольниками - с использованием квадратов, треугольников или шестиугольников. Стратегия состоит в том, чтобы создать мозаику, используя один из этих многоугольников, а затем описать окружность для каждого многоугольника. Шестиугольник потратит впустую минимальную площадь, используя этот метод.
Поэтому, исходя из радиуса данного круга, вычислите размер необходимых шестиугольников, разбейте область мозаикой, используя шестиугольники, а затем опишите круг на каждом шестиугольнике.
Примечание: Эрик Бейнвилл предложил аналогичный метод.
- Флавиу Сипсиган
Не зная больше о ваших ограничениях, я бы посоветовал взять обычное покрытие плоскости, с дисками, соответствующими правильным шестиугольникам шестиугольной мозаики. Затем сохраните все диски, пересекающие форму.