Спирограф - это игрушка, которая рисует гипотрохоиды и эпитрохоиды. Для этой задачи мы просто сосредоточимся на гипотрохоидах.
Из Википедии :
Гипотрохоид - это рулетка, отслеживаемая точкой, прикрепленной к окружности радиуса r, катящейся внутри неподвижной окружности радиуса R , где точка - это расстояние d от центра внутренней окружности.
Параметрические уравнения для них могут быть определены как:
Где θ - угол, образованный горизонталью и центром круга качения.
Ваша задача - написать программу, которая нарисует путь, пройденный точкой, определенной выше. В качестве входных данных вы получите R , r и d , все целые числа от 1 до 200 включительно.
Вы можете получить этот ввод из стандартного ввода, аргументов или пользовательского ввода, но его нельзя жестко запрограммировать в программе. Вы можете принять его в любой удобной для вас форме; в виде строк, целых чисел и т. д.
Предполагать:
- Единицы ввода даны в пикселях.
- R > = r
Выходными данными должно быть графическое представление гипотрохоида, определенного входными данными. ASCII- или другой текстовый вывод не допускается. Это изображение может быть сохранено в файл или отображено на экране. Включите скриншот или изображение вывода для ввода по вашему выбору.
Вы можете выбрать любые цвета для траектории / фона, с учетом ограничения контраста. Два цвета должны иметь компонент «Значение» HSV как минимум на половине шкалы. Например, если вы измеряете ВПГ от [0...1]
, должна быть как минимум 0.5
разница. Между [0...255]
ними должна быть минимальная 128
разница.
Это код гольфа, выигрывает минимальный размер исходного кода в байтах.
источник
R > r
илиR ≥ r
? (То же самое дляr
иd
.)R>=r
, ноd
не ограниченr
и может находиться где угодно в диапазоне 1-200.R=200, r=1, d=200
. Вы можете изменить размер изображения для ввода, если хотите, или оставить его в постоянном размере, пока все это видно.Ответы:
Mathematica, 120 байт
Разобранный код и пример вывода:
Если я могу включить оси в график, я могу сохранить еще 9 символов.
источник
JavaScript (ECMAScript 6) -
312314 символовJSFIDDLE
Пример вывода
г = 1, R = 200, d = 30
источник
Python: 579
Резюме
Это вообще неконкурентоспособно, учитывая ответ Mathematica, но я решил опубликовать его в любом случае, потому что картинки красивые, и это может вдохновить кого-то или быть полезным для кого-то. Поскольку это намного больше, я оставил это в основном безволосым. Программа ожидает ввода в командной строке R, r, d.
Скриншот
Вот два примера: один для (5,3,5) и один для (10,1,7)
Код
источник
Perl / Tk -
239227R = 120, r = 20, d = 40:
R = 128, r = 90, d = 128:
R = 179, r = 86, d = 98:
источник
Обработка, 270
Ввод вводится через консоль, по одному номеру в строке.
Снимок экрана для R = 65, r = 15, d = 24:
источник
ГеоГебра, 87
То есть, если вы считаете GeoGebra допустимым языком.
Принимает ввод с панели ввода GeoGebra в формате
<variable>=<value>
, напримерR=1000
.Обратите внимание, что вам может потребоваться вручную изменить размер зума, чтобы просмотреть все изображение.
(В нижней части окна находится строка ввода, о которой я говорил)
Попробуйте это онлайн здесь .
источник
HTML + Javascript 256
286 303Редактировать Удален первый вызов moveTo, все равно работает. Можно было бы сохранить больше резки beginPath, но тогда это работает только в первый раз
Edit2 30 байт сохранено thx @ ӍѲꝆΛҐӍΛПҒЦꝆ
Тестовое задание
Поместите ввод в текстовое поле (через запятую), затем нажмите вкладку
источник
R, 80 байт
Однако, если вам нужны «чистые» цифры (без осей, без меток и т. Д.), Код должен быть немного длиннее (88 символов):
Один пример кода с использованием более длинной версии f:
Некоторые примеры выходных данных:
источник
,
??C # 813, было 999
Требуется некоторая работа, чтобы уменьшить количество байтов. Мне удалось немного уменьшить его. Он принимает три целых числа, разделенных пробелом, из консоли.
Выходной образец:
источник
сценарий оболочки + gnuplot (153)
Большая часть усилий заключается в удалении осей и тиков, установке размера и диапазона и увеличении точности. К счастью, gnuplot естественен для игры в гольф, поэтому большинство команд можно сокращать. Чтобы сохранить символы, вывод должен быть перенаправлен в файл изображения вручную.
Вызов сценария с
spiro.sh 175 35 25>i.png
даетисточник
R, 169 символов
Отступ:
Примеры:
источник
SmileBASIC, 96 байт
Ввод: 50,30,50:
источник
Befunge-98, 113 байт
Этот код опирается на отпечаток FIXP для некоторых тригонометрических вычислений и отпечаток Turtle Graphics (TURT) для рисования пути спирографа.
Графика Turtle в Befunge очень похожа на графику в языке программирования Logo . Вы рисуете «черепахой» (служащей вашей ручкой), которой вы управляете по выходной поверхности. Это влечет за собой ориентацию черепахи в определенном направлении, а затем дает ей указание двигаться вперед на определенное расстояние.
Чтобы работать с этой системой, мне нужно было приспособить исходные уравнения спирографа к чему-то более дружественному для черепах. Я не уверен, что это лучший подход, но алгоритм, который я придумал, работает примерно так:
Обратите внимание, что это на самом деле рисует путь с неким зигзагообразным узором, но вы на самом деле не заметите, если не приблизите изображение ближе.
Вот пример использования параметров R = 73, r = 51, d = 45.
Я протестировал код с CCBI и cfunge , которые выдают результат в виде SVG-изображения. Поскольку это масштабируемый векторный формат, результирующее изображение не имеет размера пикселя как такового - оно просто масштабируется, чтобы соответствовать размеру экрана (по крайней мере, при просмотре в браузере). Пример выше - это снимок экрана, который был обрезан и масштабирован вручную.
Теоретически код также может работать на Rc / Funge , но в этом случае вам нужно будет работать в системе с XWindows, так как он попытается отобразить вывод в окне.
источник
wxMaxima : 110
Это вызывается в интерактивной сессии через
f(#,#,#)
. В качестве примера рассмотримf(3,2,1)
:источник
рэкет
Выход:
источник