Функции · 21 из 31
Спирограф
Валера нашёл в ящике сына спирограф — пластмассовое кольцо и шестерёнки с дырочками для ручки. Шестерёнка радиусом r катится внутри кольца радиусом R, ручка вставлена на расстоянии d от её центра, и выходят те самые узоры с открыток. Валера хочет «шестерёнку в программе»: выбрал кольцо, шестерёнку и дырочку — получил функцию, которая по времени говорит, где сейчас ручка.
Что сделать
Сделайте шестерёнку: по кольцу, шестерёнке и дырочке верните функцию, которая по времени отвечает, где ручка.
Что приходит
R— радиус кольцаr— радиус шестерёнки, меньшеRd— на каком расстоянии от центра шестерёнки дырочка с ручкой
Что вернуть
Функцию одного довода t, которая возвращает пару (x, y) — где ручка в момент t; формулы — в «Подробных правилах».
Допишите функцию spirograf в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
с графикой когда тесты пройдут, ответ вашей функции нарисуется · все задачи с графикой
spirograf(5, 3, 5) — кольцо 5, шестерёнка 3, ручка на краю шестерёнки. Получившаяся функция в момент 0 отвечает (7.0, 0.0): центр шестерёнки на расстоянии 2 от центра кольца, ручка ещё на 5 дальше. В проверке точки для моментов 0, 1 и 2 округлены до тысячных.
[tuple(round(v, 3) + 0 for v in spirograf(5, 3, 5)(t)) for t in (0, 1, 2)]
[(7.0, 0.0), (5.01, -1.409), (0.344, -3.041)]
Функция spirograf(R, r, d) возвращает функцию tochka(t). Та отдаёт пару:
x = (R - r) * cos(t) + d * cos((R - r) / r * t)y = (R - r) * sin(t) - d * sin((R - r) / r * t)
cos и sin — из модуля math, t — в радианах, деление обычное. Каждая возвращённая функция помнит свои R, r и d: две шестерёнки, сделанные одна за другой, не мешают друг другу.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.