Епіциклоїда є кривою точка на окружності , як це робить катається ще одне коло. 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's
input()
). r1
іr2
відносно один одного, а не розміри зображення. Таким чином, ви можете встановити одну "одиницю" будь-якої кількості фактичних пікселів.
Точка, яку ви повинні простежити, - одна з вершин форми кочення. Фігури повинні починатися з цієї вершини, яка торкається нерухомої вершини та двох сусідніх сторін:
Точні початкові вершини та кут нерухомого багатокутника значення не мають.
Вихідні дані
Вихід повинен мати зображення, яке має принаймні 600x600 пікселів (або якийсь змінний розмір, ніж можна встановити на 600). Він повинен показувати всю криву епіциклона, задану параметрами, добре обрамлену на зображенні.
Полігони, що котяться і нерухомі, також повинні бути намальовані (з роликом у остаточному стані). Дві форми і епіциклон мають бути трьома помітно різними кольорами.
Там також повинен бути простий спосіб НЕ малювати багатокутники (зміна true
на false
в коді вистачає).
Будь ласка, покажіть нам щонайменше 2 вихідних зображення. Це нормально, якщо потрібно, щоб зменшити їх.
Оцінка балів
Виграє найкоротший код, який створює дійсні вихідні зображення.
Бонуси
- Мінус 50 байт, якщо висновок є анімований gif (або подібний) кривої, що малюється.
- Мінус 150 байт, якщо ви дозволите
n1
іn2
приймаєте значення 2, тому фігури стають лінійними відрізками довжини2 * r1
(абоr2
), "котячись" навколо один одного. Як ви справляєтеся ,r
колиn1
іn2
є 2 до вас , так як центр ваги не обертається навколо один одного так , як вони роблять в інших випадках. (Якщо "кочення" взагалі не вважається обробкою.)
Оскільки я дуже нетерплячий, щоб ця романна ідея була добре виконана (і це не зовсім торт), я збираюся нагородити переможця в 150 нагород . Конкурс закінчиться того ж дня, коли виграє щедрот.
Виграш не буде присуджений переможцю, якщо зрозуміло, що вони просто переписали більшість коду з іншого подання.
Функції бібліотеки, які вже трапляються для цього (якщо такі є), заборонені.
Примітка. Це виникло з моїх запитань про залишки, які кожен може вільно публікувати. Але якщо ніхто більше не опублікує їх, є хороший шанс, що я встигну. : P