Если задано целое число N> = 2, создайте изображение, показывающее узел Серпинского с степенью N.
Например, вот узлы степени 2, 3, 4 и 5:
Нажмите на изображение для просмотра в полном размере (чем выше степень, тем больше изображение).
Спецификация
- Узел Серпинского по степени N рисуется с использованием вершин треугольника Серпинского по степени N в качестве ориентиров. Треугольник Серпинского по степени N - это три треугольника Серпинского по степени N-1, сгруппированных в больший треугольник. Треугольник Серпинского с нулевой степенью является равносторонним треугольником.
- Наименьшие составляющие треугольники имеют длину стороны 64, что дает треугольник Серпинского, на котором основан узел, общую длину стороны
- Центр внешнего треугольника расположен в центре изображения. Это не дает равных пробелов сверху и снизу.
- Выход представляет собой квадратное изображение с длиной стороны , где находится
ceiling(x)
, наименьшее целое число , большее или равное х. Это просто достаточно для размещения верхней вершины нижележащего треугольника Серпинского в изображении, когда центр треугольника находится в центре изображения. - Одна кривая должна проходить над и под собой, строго чередуясь. Решения могут быть выбраны между «ниже» или «над», а затем «под»
- Примеры изображений показывают черный передний план и белый фон. Вы можете выбрать любые два легко различимых цвета. Сглаживание разрешено, но не обязательно.
- Не должно быть промежутков, где встречаются две дуги или где кривая проходит над или под собой.
- Выходные данные могут быть в любой файл изображения в растровом формате или в любой файл изображения в векторном формате, который содержит правильный размер экрана по умолчанию. При непосредственном отображении на экране это должно быть в форме, позволяющей прокручивать изображение, чтобы увидеть полное изображение, когда оно больше экрана.
Определение центра дуги, радиуса и толщины
- Узел построен как серия дуг окружности, которые встречаются в точках, где их касательные параллельны, чтобы дать бесшовное соединение. Эти дуги отображаются в виде кольцевых секторов (дуг с толщиной).
- Центры этих дуг - вершины самых маленьких перевернутых треугольников. Каждая такая вершина является центром ровно одной дуги.
- Каждая дуга имеет радиус
- Исключением является то, что дуги в трех самых внешних треугольниках (в углах большого треугольника) имеют центр, который является средней точкой двух смежных внутренних вершин, и, следовательно, имеют радиус
- Каждая дуга представлена с общей толщиной (разницей между внутренним радиусом и внешним радиусом), и черные границы каждой из них имеют толщину . Кривая должна иметь эти границы, а не просто сплошную полосу.
Единицы измерения
- Все расстояния указаны в пикселях (1 - горизонтальное или вертикальное расстояние между 2 соседними пикселями).
- Квадратный корень из 3 должен быть точным до 7 значащих цифр. То есть ваши расчеты должны быть эквивалентны использованию ROOT3 таким образом, чтобы
1.7320505 <= ROOT3 < 1.7320515
счет
Самый короткий код в байтах побеждает.
Для тех, кому интересно, N = 0 и N = 1 не включены, потому что они соответствуют окружности и трилистнику, которые не совсем соответствуют шаблону, который применяется для N> = 2. Я ожидаю, что большинству подходов к этой задаче потребуется добавить специальный код случая для 0 и 1, поэтому я решил их опустить.
stroke-width:3.464102
подобное немного излишне, если идея заключалась в том, чтобы получить точность в 1 пиксель. Я продолжу и включу это так, хотя, если это - решение.