🎨 Математика · Параметричні криві
📅 Квітень 2026⏱ 12 хв🟡 Початковий–середній рівень

Спірографи, гіпотрохоїди та епітрохоїди: математика котливих кіл

Іграшка-спірограф викреслює шлях точки на малій шестерні, що котиться всередині або навколо більшого кільця. Результат ніколи не є цілком круговим — натомість виникають вигадливі пелюсткові криві, точна форма яких залежить від єдиного відношення цілих чисел. За цією дитячою іграшкою стоїть прекрасна галузь геометрії, що поєднує передаткові відношення, найбільші спільні дільники, ряди Фур'є та рух планет у єдину цілісну картину.

1. Циклоїда: котіння по прямій

Перш ніж переходити до шестерень, розгляньмо найпростішу криву котливого кола: візьмемо коло радіуса r, що котиться вздовж прямої без проковзування. Точка на ободі викреслює циклоїду:

x(t) = r · (t − sin t) y(t) = r · (1 − cos t) t ∈ [0, 2π] викреслює одну арку циклоїди (один повний оберт). Довжина дуги однієї арки: 8r (рівно 4× діаметра — напрочуд просто) Площа під однією аркою: 3πr² (утричі більша за площу котливого кола)

Циклоїда має дві відомі фізичні властивості. Це брахістохрона: крива найшвидшого спуску між двома точками під дією сили тяжіння — швидша навіть за пряму лінію. І це таутохрона: де б на арці ви не відпустили кульку без тертя, вона досягає дна за абсолютно однаковий час (Гюйгенс, 1659). Завдяки цьому циклоїда стала основою першого точного спускового механізму маятникового годинника.

Якщо точка, що викреслює криву, лежить не на ободі, а всередині (на відстані d < r) або зовні (d > r), крива є відповідно видовженою або укороченою циклоїдою — гладкіші петлі або арки з вістрями залежно від d.

2. Гіпоциклоїди: котіння всередині кола

Тепер прокотімо мале коло всередині нерухомого зовнішнього кола радіуса R. Точка, що креслить криву, лежить на ободі малого кола (радіус r). Отримана крива — це гіпоциклоїда:

x(t) = (R − r) · cos t + r · cos((R−r)t/r) y(t) = (R − r) · sin t − r · sin((R−r)t/r) Окремі випадки (гарні назви для цілих відношень R/r): R/r = 2 → відрізок прямої (вироджений випадок) R/r = 3 → дельтоїда (3 вістря, трикутна) R/r = 4 → астроїда (4 вістря, x^(2/3) + y^(2/3) = R^(2/3)) R/r = 5 → пентадельтоїда (5 вістер) R/r = 6 → гексадельтоїда (6 вістер) Кількість вістер = R/r (коли R/r — ціле число)

Астроїда (R/r = 4) трапляється в багатьох контекстах: еволюта еліпса є астроїдою; обвідна драбини, що сповзає (один кінець на стіні, інший на підлозі), є астроїдою. Її рівняння x^(2/3) + y^(2/3) = R^(2/3) виглядає оманливо простим для такого вигадливого геометричного об'єкта.

Вироджений випадок R = 2r: коли мала шестерня має рівно вдвічі менший діаметр за зовнішнє кільце, точка, що креслить криву, рухається ідеально прямою лінією туди-сюди через центр. Це основа траммеля Архімеда — механізму, що перетворює обертальний рух на лінійний, запатентованого як «машина, що нічого не робить», бо вона ніби відтворює лише той рух, який ви в неї вкладаєте.

3. Гіпотрохоїди: спірографічна крива

Гіпотрохоїда узагальнює гіпоциклоїду, розміщуючи точку, що креслить криву, на відстані d від центра котливого кола, не обов'язково на ободі:

// Параметричні рівняння гіпотрохоїди x(t) = (R − r) · cos t + d · cos((R−r)t/r) y(t) = (R − r) · sin t − d · sin((R−r)t/r) Параметри: R = радіус нерухомого зовнішнього кола r = радіус котливого внутрішнього кола d = відстань точки, що креслить криву, від центра котливого кола Коли d = r: гіпоциклоїда (точка на ободі → вістря) Коли d < r: внутрішня гіпотрохоїда (гладкі, заокруглені «пелюстки») Коли d > r: зовнішня гіпотрохоїда (петлі, самоперетини) Саме цю криву креслить стандартна іграшка Spirograph®!

Іграшка Spirograph (винайдена 1965 року Денісом Фішером) має фізичні набори шестерень з конкретними значеннями R і r. Отвори для олівця в малій шестерні відповідають різним значенням d. Обираючи різні комбінації шестерень та отворів, діти (і математики) досліджують цю двопараметричну сім'ю кривих.

Рози як окремі випадки

Коли d = R − r (точка, що креслить криву, опиняється на початку координат котливого кола, якби воно лежало на зовнішньому ободі), гіпотрохоїда вироджується в розу r = cos(nθ) у полярних координатах, де n = R/r. Саме тому рози з 3, 5, 7 пелюстками мають непарні знаменники — котливе коло має зробити ціле число повних обертів усередині нерухомого кільця.

4. Епітрохоїди: котіння зовні

Епітрохоїда виникає, коли мале коло котиться зовні нерухомого кола — це лише одна зміна знака в рівняннях:

// Параметричні рівняння епітрохоїди x(t) = (R + r) · cos t − d · cos((R+r)t/r) y(t) = (R + r) · sin t − d · sin((R+r)t/r) Окремі випадки (епіциклоїди, d = r): R/r = 1 → кардіоїда (форма серця, 1 вістря) R/r = 2 → нефроїда (форма нирки, 2 вістря) R/r = 3 → епіциклоїда з трьома вістрями R/r = n → епіциклоїда з n вістрями Кардіоїда також окреслює основне тіло множини Мандельброта!

Кардіоїда (грец. «серце») — одна з найбільш упізнаваних математичних кривих. Окрім того, що вона є межею основного тіла множини Мандельброта, вона є директрисою параболічного мікрофона та формою полярної діаграми чутливості кардіоїдного мікрофонного капсуля — звідси й назва цього типу мікрофона.

Нефроїда з'являється як каустика (яскрава крива), яку видно всередині циліндричної кавової чашки на сонці. Відбиті або заломлені від вигнутої поверхні промені обгортають нефроїду — природне оптичне явище, пояснюване геометрією епітрохоїд.

5. Підрахунок пелюсток і правило НСД

Скільки пелюсток (часток) має спірографічна крива? Відповідь пов'язана з найбільшим спільним дільником (НСД) двох радіусів шестерень:

Нехай k = R/r (відношення зовнішнього радіуса до внутрішнього, скорочене до нескоротного дробу) Запишемо k = p/q, де gcd(p, q) = 1 Кількість пелюсток (часток): Гіпотрохоїда, d < r: p − q пелюсток Гіпотрохоїда, d > r: p − q петель (та сама кількість, інша топологія) Епітрохоїда: p + q пелюсток (зовнішнє котіння додає частки) Альтернативна форма через кількість зубців T_outer, T_inner: num_petals = (T_outer − T_inner) / gcd(T_outer, T_inner) Приклади: R=60, r=36: gcd=12, відношення=5/3 → 5−3 = 2 пелюстки (видовжений еліпс) R=60, r=24: gcd=12, відношення=5/2 → 5−2 = 3 пелюстки (трикутна) R=60, r=16: gcd=4, відношення=15/4 → 15−4 = 11 пелюсток R=60, r=45: gcd=15, відношення=4/3 → 4−3 = 1 пелюстка (замкнена петля)

Ця формула — математична причина, чому на іграшкових спірографах вказують кількість «зубців» кожної шестерні. Знаючи кількість зубців, можна передбачити точний візерунок ще до малювання — або, навпаки, обрати комбінацію шестерень для потрібної кількості пелюсток.

Чому НСД? Відношення p/q в нескоротному вигляді показує, скільки обертів внутрішньої шестерні (p обертів відносно нерухомої системи) потрібно, перш ніж система повернеться до початкової конфігурації. Кожен оберт внутрішньої шестерні дає одну часткову пелюстку; викреслюється (p−q) часток, бо кутовий приріст за один оберт внутрішньої шестерні становить (R−r)/r = (p−q)/q.

6. Період, замикання і НСК

Спірографічна крива замикається (повертається до початкової точки) після того, як параметр t зросте на 2π × (LCM(R, r) / R) — це час, потрібний системі, щоб повернутися рівно до початкового вирівнювання шестерень. Через кількість зубців T_R і T_r:

Повний період (кількість обертів внутрішньої шестерні до замикання): N_inner = T_outer / gcd(T_outer, T_inner) Еквівалентно, параметр t має змінюватися від 0 до: t_max = 2π · T_outer / gcd(T_outer, T_inner) = 2π · (R/r) / gcd(чисельник R/r, знаменник R/r) Приклад: R=60, r=24 (gcd=12, нескоротне = 5/2) t_max = 2π × 5 (внутрішня шестерня робить 5 обертів → 2 повні зовнішні періоди → викреслено 3 пелюстки) Правило: якщо R/r = p/q у нескоротному вигляді: внутрішня шестерня обертається p разів, зовнішній період повторюється q разів, викреслюється p − q (або p + q) пелюсток.

Це означає, що для малювання повної спірографічної кривої в коді потрібно проганяти t від 0 до 2π × p (де p — чисельник скороченого передаткового відношення, а не просто 2π). Зупинка на 2π дає лише часткову криву — поширена прикра помилка під час перших реалізацій спірографів.

// JavaScript: малювання повної гіпотрохоїди function drawHypotrochoid(ctx, R, r, d, steps=2000) { const g = gcd(R, r); const p = R / g; // чисельник скороченого відношення const tMax = 2 * Math.PI * p; // повний період ctx.beginPath(); for (let i = 0; i <= steps; i++) { const t = (tMax * i) / steps; const x = (R-r)*Math.cos(t) + d*Math.cos((R-r)*t/r); const y = (R-r)*Math.sin(t) - d*Math.sin((R-r)*t/r); i === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y); } ctx.stroke(); } function gcd(a, b) { return b === 0 ? a : gcd(b, a % b); }

7. Фігури Ліссажу: особлива границя

Коли радіус зовнішнього кола R → ∞, а r залишається сталим (передаткове відношення → ∞), котіння всередині кола локально наближається до котіння вздовж прямої. У границі гіпотрохоїда стає фігурою Ліссажу — параметричною кривою, що викреслюється двома незалежно осцилюючими синусоїдами:

x(t) = A · sin(a·t + δ) y(t) = B · sin(b·t) Для фігури Ліссажу: a/b = відношення частот двох коливань δ = різниця фаз Коли a/b = 1, δ = π/2: коло Коли a/b = 1, δ = 0: діагональна пряма Коли a/b = 2/1: вісімка (обвідна параболи) Коли a/b = 3/2: 3-часткова форма крендзеля Замикання: крива замикається тоді й лише тоді, коли a/b раціональне (так само, як у спірографів!)

Фігури Ліссажу з'являються на осцилографі, коли дві синусоїдні напруги керують пластинами відхилення X та Y. Форма одразу виявляє відношення частот — коло означає рівні частоти, вісімка означає, що одна частота вдвічі більша за іншу. Це використовують в аудіолабораторіях для налаштування частот і вимірювання фазових співвідношень між сигналами.

Зв'язок зі спірографами не лише формальний: обидва утворюються поєднанням двох колових рухів. Гіпотрохоїда поєднує коло радіуса (R−r), що обертається зі швидкістю 1, з колом радіуса d, що обертається зі швидкістю (R−r)/r. Фігура Ліссажу поєднує горизонтальне коливання (півколо) зі швидкістю a з вертикальним коливанням зі швидкістю b. Візуальна схожість — замкнені пелюсткові криві — відображає цю спільну колову суперпозицію.

8. Епіцикли Фур'є: будь-яка крива з кіл

Спірографічні криві будуються з двох кіл. Але епіцикли Фур'є узагальнюють це до будь-якої кількості кіл — і з достатньою кількістю кіл можна наблизити будь-яку замкнену криву, а не лише алгебраїчні.

// Подання епіциклами Фур'є з N кіл z(t) = Σₙ cₙ · e^(i·nωt) (комплексний запис: z = x + iy) = c₀ (сталий зсув) + c₁ e^(iωt) (основна гармоніка: один оберт за період) + c₂ e^(2iωt) (друга гармоніка: два оберти) + c₋₁ e^(−iωt) (обертання у зворотному напрямку) + ... Кожен член cₙ e^(inωt) — це коло радіуса |cₙ|, що обертається зі швидкістю n. Щоб наблизити довільну криву (наприклад, намальовану мишею): 1. Вибрати криву як z(t) у N рівновіддалених значеннях t. 2. Обчислити дискретне перетворення Фур'є: cₙ = DFT(z)[n] / N 3. Відтворити ланцюг епіциклів: кожне плече обертається зі своєю гармонічною частотою. Результат: із 50 колами кінчик ланцюга креслить майже будь-яку замкнену форму!

Це основа популярних візуалізацій «малювання епіциклами Фур'є», де ланцюг обертових плечей викреслює портрет, державний кордон або рукописну літеру. Кожне плече відповідає одній моді Фур'є; сума всього ланцюга наближає комплексний ряд Фур'є вихідної кривої.

Математичний зміст той самий, що й в аудіоаналізі Фур'є: так само як звукова хвиля розкладається на частотні складові (гармоніки), 2D замкнена крива розкладається на колові обертання на різних частотах. Плече «основної частоти» обходить коло раз за період; вищі гармоніки додають дрібні коливання й гострі кути.

Збіжність: для гладкої кривої коефіцієнти Фур'є швидко спадають (|cₙ| ∝ n^(−k) для k разів диференційовної кривої). Коло подається точно лише одним c₁. Квадрату потрібно багато членів, бо його кути є розривами — явище Гіббса спричиняє «дзвін» біля гострих кутів за скінченного обрізання.

9. Малювання спірографів на JavaScript

Повноцінний інтерактивний рендерер спірографа менш ніж у 50 рядках:

// HTML: <canvas id="c" width="500" height="500"></canvas> const canvas = document.getElementById('c'); const ctx = canvas.getContext('2d'); const cx = 250, cy = 250; // центр полотна function drawSpirograph(R, r, d, color='#6366f1') { const g = gcd(Math.round(R), Math.round(r)); const periods = R / g; // кількість внутрішніх обертів const steps = periods * 360; // 1 крок на градус const scale = 220 / (R); // вписати в полотно ctx.beginPath(); ctx.strokeStyle = color; ctx.lineWidth = 1.2; for (let i = 0; i <= steps; i++) { const t = (2 * Math.PI * periods * i) / steps; const x = (R-r)*Math.cos(t) + d*Math.cos((R-r)*t/r); const y = (R-r)*Math.sin(t) - d*Math.sin((R-r)*t/r); i === 0 ? ctx.moveTo(cx + x*scale, cy + y*scale) : ctx.lineTo(cx + x*scale, cy + y*scale); } ctx.stroke(); } function gcd(a, b) { return b < 0.5 ? a : gcd(b, a % b); } // Приклади: ctx.fillStyle = '#0f0f0f'; ctx.fillRect(0,0,500,500); drawSpirograph(100, 60, 50, '#6366f1'); // 2 пелюстки drawSpirograph(100, 40, 60, '#f59e0b'); // 3 пелюстки drawSpirograph(100, 36, 70, '#22c55e'); // неправильна

Симуляція Симулятор спірографа на цьому сайті дає змогу інтерактивно перетягувати повзунки для R, r та d й спостерігати, як крива будується в реальному часі — з видимим котінням внутрішньої шестерні навколо зовнішнього кільця, що показує геометричну побудову.

Розширення