Эпициклоида является кривой точка на окружности , как это делает катается еще один круг. Cyclogon это форма точка на правильный многоугольник делает , как она катится по плоскости. Epicyclogon это кривая , описываемая точкой на одном правильного многоугольника , как она катится вокруг другого.
Написать программу , которая рисует epicyclogon данное r
, r1
, r2
, n1
, n2
:
r = number of clockwise revolutions rolling polygon makes around stationary polygon (any real number as limited by float values)
r1 = distance from center of stationary polygon to each of its vertices (positive real number)
r2 = distance from center of rolling polygon to each of its vertices (positive real number)
n1 = number of sides stationary polygon has (integer greater than 2)
n2 = number of sides rolling polygon has (integer greater than 2)
Заметки
- При
r
отрицательном положении ролик должен идти против часовой стрелки . - Ибо
r
один оборот происходит, когда линия, соединяющая центроиды двух фигур, выметает все 360 градусов. Это понятие расширено, чтобы включить все значенияr
. (Таким образом, за четверть оборота линия, соединяющая центроиды, выметается на 90 градусов.) - Эти аргументы должны исходить из командной строки или ваша программа должна запрашивать их (например, с помощью Python
input()
). r1
иr2
относятся друг к другу, а не размеры изображения. Таким образом, вы можете установить одну «единицу измерения» на любое количество реальных пикселей.
Точка, которую вы должны отследить, является одной из вершин формы вращения. Формы должны начинаться с этой вершины, касающейся стационарной вершины и двух соседних сторон:
Точные начальные вершины и угол неподвижного многоугольника не имеют значения.
Выход
Вывод должен идти к изображению размером не менее 600x600 пикселей (или с некоторым изменяемым размером, который может быть установлен на 600). Он должен показывать всю кривую эпициклона, заданную параметрами, хорошо оформленными на изображении.
Скользящие и стационарные многоугольники также должны быть нарисованы (с валиком в его окончательном состоянии). Две фигуры и эпициклон должны быть трех заметно разных цветов.
Там также должен быть простой способ не рисовать многоугольники (смена true
на false
в коде хватает).
Пожалуйста, покажите нам как минимум 2 выходных изображения. Это нормально, чтобы уменьшить их, если это необходимо.
счет
Самый короткий код, который производит действительные выходные изображения, побеждает.
Бонусы
- Минус 50 байтов, если выводом является анимированный GIF (или аналогичный) нарисованной кривой.
- Минус 150 байт, если вы позволите
n1
иn2
примете значение 2, чтобы фигуры стали отрезками длины2 * r1
(илиr2
), «катаясь» друг вокруг друга. Как вы справляетесь,r
когдаn1
и когдаn2
2, зависит от вас, поскольку центроиды не вращаются вокруг друг друга, как в других случаях. (Не «катиться» вообще не считается обработкой.)
Так как мне не терпится увидеть, как эта новая идея выполнена хорошо (и это не совсем легкая прогулка), я собираюсь наградить победителя 150 наградами . Конкурс завершится в тот же день, когда заканчивается награда.
Награда не будет присуждена победителю, если станет ясно, что они просто переписали большую часть кода из другой заявки.
Библиотечные функции, которые уже делают это (если они есть), не допускаются.
Примечание. Это связано с моими оставшимися вопросами, которые каждый может свободно публиковать. Но если никто не публикует их, есть хороший шанс, что я вовремя. :П