Задача состоит в том, чтобы нарисовать правильный многоугольник из n сторон, используя только компас и линейку без опознавательных знаков.
Вход (n) является одним из следующих 10 чисел: 3, 4, 5, 6, 8, 10, 12, 15, 16, 17.
Метод : поскольку у вас есть только линейка и компас, вы можете рисовать только точки, линии и круги.
Линия может быть нарисована только:
- через две существующие точки.
Круг можно нарисовать только:
- с одной точкой в качестве центра и с периметром, проходящим через вторую точку.
Точку можно нарисовать только:
на пересечении двух линий,
на пересечении (ях) линии и круга,
на пересечении (ях) двух окружностей,
в начале, когда вы можете нарисовать 2 точки, чтобы начать.
Через этот процесс (и только через этот процесс) вы должны нарисовать n линий запрошенного n-gon вместе с любой работой, необходимой для достижения этой стадии.
РЕДАКТИРОВАТЬ: Положение пересечений должны быть рассчитаны, но линии и круги могут быть нарисованы любым способом, предусмотренным языком.
Вывод представляет собой изображение n-стороннего правильного многоугольника, показывающее работу.
Графически нет никаких ограничений на размер изображения, формат, толщину линии или что-либо еще, не упомянутое здесь. Однако должна быть возможность визуально различать различные линии, круги и их пересечения. Дополнительно:
- N линий, которые составляют стороны вашего n-гона, должны иметь другой цвет по сравнению с вашей «рабочей» (то есть любые точки, круги или другие линии) и снова иметь другой цвет на вашем фоне.
- Рабочие могут оставить границы области рисования, кроме точек, которые должны находиться в пределах видимых границ изображения.
- Круг может быть полным кругом или просто дугой (если он показывает необходимые пересечения).
Линия бесконечна (т.е. покидает область рисования) или обрезана в двух точках, через которые она проходит.РЕДАКТИРОВАТЬ: линия может быть проведена любой длины. Точки могут быть созданы только там, где нарисованная линия визуально пересекается.- Точка может быть нарисована по вашему желанию, в том числе не отмечая ее.
Подсчет очков имеет два аспекта: за каждый вход, который он поддерживает, предоставляется 1 балл, что составляет максимум 10 баллов. В случае ничьи побеждает самый короткий счетчик байтов.
Признание будет дано представлениям, которые могут построить n-гоны за наименьшее количество шагов или способны построить n-гоны за пределами заданного диапазона, но это не поможет вашему счету.
CIRCLE 0,0,500
или мне нужно это сделатьR=SQRT(300^2+400^2): CIRCLE 0,0,R
? (Кстати, выработка положений пересечений, вероятно, сложнее, чем линий и окружностей.)Carl Friedrich Gauss in 1796 showed that a regular n-sided polygon can be constructed with straightedge and compass if the odd prime factors of n are distinct Fermat primes
Ответы:
BBC Basic, 8 полигонов: 3,4,5,6,8,10,12,15 сторон (также 60 сторон)
Загрузите эмулятор на http://www.bbcbasic.co.uk/bbcwin/download.html
Я решил не включать 16 сторон, просто потому что моя предварительная конструкция становилась довольно загроможденной. Еще 2 круга и линия будут необходимы. Кстати, 17 сторон действительно очень сложны и, возможно, лучше всего подходят в качестве отдельной программы.
Я получил больше прибыли за добавление 2 кругов к моей первоначальной конструкции, чтобы создать пятиугольник, так как это также дало мне доступ к 10,15 и 60 сторонам.
Программа делает предварительную конструкцию, прежде чем запрашивать какой-либо пользовательский ввод. Этого достаточно, чтобы определить по крайней мере 2 точки на главном круге, которые соответствуют смежным вершинам 3,4,5,6,8,10,12,15 или 60-сторонней фигуры. Точки хранятся в наборе из 99 элементов, в которых элементы 0-59 отводятся для одинаково разнесенных точек по окружности. Это в основном для наглядности, восьмиугольник не идеально вписывается в 60 точек, поэтому здесь требуется некоторая гибкость (а также для 16-гиона, если он был включен). Изображение выглядит как изображение ниже, в белом и сером цвете, с только два желтых кружка предназначены исключительно для фигур, кратных 5 сторонам. См. Http://en.wikipedia.org/wiki/Pentagon#mediaviewer/File:Regular_Pentagon_Incribed_in_a_Circle_240px.gifдля моего предпочтительного метода рисования пятиугольника. Угол поворота состоит в том, чтобы избегать вертикальных линий, поскольку программа не может обрабатывать бесконечные градиенты.
Пользователь вводит число
d
для количества требуемых сторон. Программа ищет в массиве индекс первой из двух точек (следующая находится на расстоянии 60 градусов в направлении по часовой стрелке).Затем программа проходит цикл рисования круга с центром во второй точке, проходящей через первую точку, и расчета нового пересечения, чтобы обойти главный круг. Строительные круги нарисованы синим цветом, а требуемый многоугольник - красным. Окончательные изображения выглядят так.
Я очень доволен ими. BBC Basic выполняет расчеты достаточно точно. Однако очевидно (особенно с 15 и 60 сторонами), что BBC Basic имеет тенденцию рисовать круги с немного меньшим радиусом, чем следовало бы.
источник
Mathematica,
234 полигона, 759 байтовСлучайные маркеры:
Switch
чтобы выбрать соответствующие окружности и линии для каждой конструкции. Таким образом, я мог бы использовать много примитивов между ними.Вот негольфированный код:
А вот и выводы:
источник
Switch
. Это, вероятно, позволило бы мне использовать намного больше кругов, линий и точек.