Покрытие произвольной области с кругами равного радиуса

Это может быть некоторым большим количеством работы, но я пошел бы наоборот.

Инстанцируют 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.");
}

, Насколько я могу вспомнить, можно определить слушателей в конфигурации приложения, позволяющей активировать или деактивировать вход, не касаясь сборки.

7
задан Eric Leschinski 8 April 2015 в 03:48
поделиться

2 ответа

Надеюсь, я правильно понял ваш вопрос ...

Можно доказать, что гексагональная плотная упаковка (HCP) сфер покрывает максимальный объем, используя сферы. Поэтому я предполагаю, что выполнение HCP с кругами также охватит максимальную площадь с помощью кругов. Создайте мозаику из треугольников и поместите круг с центром в каждой вершине треугольника с радиусом, равным половине длины стороны треугольника. См. this для изображения алгоритма, о котором я говорю.

Примечание: Это похоже на плотную упаковку атомов в элементарной ячейке .

РЕДАКТИРОВАТЬ: Мой предыдущий метод покрывает максимально возможную площадь без перекрытия. Если перекрытие разрешено, то (я считаю, что) следующий метод может покрыть всю область с минимальным перекрытием.

Как вы, вероятно, знаете, существует только 3 мозаики 2D-пространства с правильными многоугольниками - с использованием квадратов, треугольников или шестиугольников. Стратегия состоит в том, чтобы создать мозаику, используя один из этих многоугольников, а затем описать окружность для каждого многоугольника. Шестиугольник потратит впустую минимальную площадь, используя этот метод.

Поэтому, исходя из радиуса данного круга, вычислите размер необходимых шестиугольников, разбейте область мозаикой, используя шестиугольники, а затем опишите круг на каждом шестиугольнике.

Примечание: Эрик Бейнвилл предложил аналогичный метод.

- Флавиу Сипсиган

8
ответ дан 6 December 2019 в 23:10
поделиться

Не зная больше о ваших ограничениях, я бы посоветовал взять обычное покрытие плоскости, с дисками, соответствующими правильным шестиугольникам шестиугольной мозаики. Затем сохраните все диски, пересекающие форму.

0
ответ дан 6 December 2019 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: