Крива, побудована на параметрі, а не на функції
Звичайна функція y = f(x) не може описувати петлю або замкнену форму — вона не проходить вертикального тесту. Параметрична крива обходить цю проблему, виражаючи як x, так і y як функції незалежного параметра t, що змінюється від 0 до 1: P(t) = (x(t), y(t)). При t = 0 крива починається, при t = 1 вона закінчується, а значення між ними безперервно простежують шлях. Незалежно один від одного у 1960-х роках були винаході Паулем де Кастелюа в Citroën та П’єром Бèзером в Renault — обидва намагалися математично описувати кузовні панелі автомобілів — крива Бèзера стала стандартним способом визначення гладкої форми за допомогою кількох інтуїтивно зрозумілих контрольних точок.
Алгоритм Де Кастелюа
Де Кастелюа знайшов геометричний спосіб оцінки кривої без використання будь-якого явного полінома. При заданих контрольних точках P₀…Pₙ, повторно інтерполюйте кожну сусідню пару на параметрі t до тих пір, поки не залишиться лише одна точка — ця точка лежить на кривій. Для кубічної кривої (чотири контрольні точки) це потребує трьох рівнів інтерполяції:
Рівень 1: Q₀ = (1-t)P₀ + tP₁ Q₁ = (1-t)P₁ + tP₂ Q₂ = (1-t)P₂ + tP₃ Рівень 2: R₀ = (1-t)Q₀ + tQ₁ R₁ = (1-t)Q₁ + tQ₂ Рівень 3: B(t) = (1-t)R₀ + tR₁
Оскільки алгоритм використовує лише лінійну інтерполяцію, він є чисельно стійким навіть для кривих високого ступеня, на відміну від прямого поліноміального оцінювання, яке страждає від помилок приписування з ростом степеня. Він також надає можливість поділу на частини безкоштовно: обчислення при t = 0,5 ділить криву на дві половини, що зменшуються вдвічі, повторно використовуючи проміжні точки, що точно так само використовується рендерерами для згладжування кривих у лінійні відрізки — поділити до тих пір, поки сегмент не знаходиться на відстані менше одного пікселя від його хорди, потім зупинитись.
Level 1: Q0=(1-t)P0+tP1 Q1=(1-t)P1+tP2 Q2=(1-t)P2+tP3 Level 2: R0=(1-t)Q0+tQ1 R1=(1-t)Q1+tQ2 Level 3: B(t)=(1-t)R0+tR1
Бернштейнові поліноми та явна формула
Ту ж криву можна записати як зважену суму точок керування, використовуючи бернштейнівські базисні поліноми: B(t) = Σ C(n,i)·tⁱ·(1−t)ⁿ⁻ⁱ·Pᵢ. Ці ваги утворюють суму 1 для кожного t (розділ цілісності), тому крива завжди є опуклою комбінацією точок керування і, відповідно, повністю лежить всередині їхньої опуклої оболонки – властивість, яку використовують рендерери для швидких тестів відсікання за допомогою прямокутних паралелепіпедів. Крива також проходить точно через P₀ та Pₙ, а зворотне t простежує ту ж форму назад.
Чому кубічні криві є основою
Кубічні Bézier'и – точна кількість чотирьох контрольних точок – використовуються майже скрізь: команда C у SVG, контури PostScript та TrueType/OpenType шрифтів, шляхи PDF та функція CSS cubic-bezier() timing — всі вони базуються на них. Дотижна на кожному кінці фіксується суміжним ручкою: B'(0) = 3(P₁−P₀) і B'(1) = 3(P₃−P₂), тому дизайнери перетягують P₁ та P₂ щоб керувати напрямком входу та виходу кривої. У cubic-bezier(0.25, 0.1, 0.25, 1.0), кінцеві точки (0,0) і (1,1) фіксовані, вісь X нормалізована час, а вісь Y – прогрес анімації — форма кривої є функцією розгону.
Сплайни: плавне з’єднання сегментів
Одинакова високоступенева крива Безьє є незручною — зміна одного контрольного пункту змінює всю криву. Рішення полягає у ланцюгуванні кількох кубічних сегментів у сплайн, забезпечуючи безперервність на кожному з’єднанні: C⁰ означає, що сегменти просто діляться кінцем (можливим кутом); C¹ означає відповідність напрямку та швидкості дотичного (без «колі) за рахунок того, що ручки з обох боків з’єднання залишаються колінеарними та рівновіддаленими; C² також забезпечує відповідність кривизни, що робить відображення на кузові автомобіля або контурі шрифта справді плавним, а не просто пов'язаним. B-сплайни розширюють це поняття, розподіляючи контрольні точки через вектор вузлів за допомогою рекурсії Cox–de Boor, а NURBS додають вагу кожній точці, що дозволяє точно представляти кола та еліпси — неможливі для простої поліноміальної кривої Безьє. NURBS є стандартом геометрії, що лежить в основі форматів обміну CAD, таких як STEP і IGES.
Де фактично застосовуються математичні обчислення
Шрифти TrueType зберігають контури символів у вигляді квадратичних Bézier; PostScript та OpenType використовують кубічні – окреслений символ може містити 10-30 сегментів, растровані з роздільною здатністю нижче пікселя кожного разу, коли текст малюється на екрані. Програмне забезпечення для анімації зберігає рух за ключовими кадрами як кубічні сплайни в часі, а ручки забезпечують ефект плавної зміни швидкості (slow-in/slow-out easing); ігрові движки використовують еквівалентну форму Hermite для траєкторій камер та руху персонажів вздовж рельсів. У CAD автомобільні панелі та лопатки турбін моделюються як поверхні NURBS – добуток тензорів кривих NURBS у двох напрямках, з контролем точності виробництва за допомогою кривизни κ = |B′×B″|/|B′|³, де B′ - перший похідний, а B″ - другий. Роботи-апарати та автономні транспортні засоби планують плавну траєкторію таким же чином: кубічні або пентагонні сплайни через контрольні точки, які мінімізують jerk – третю похідну від положення, щоб суглоби та пасажири не зазнавали різких прискорень.
Часті запитання
Яка різниця між кривою Безьє та сплайном?
Крива Безьє – це окремий поліноміальний сегмент, визначений n+1 контрольних точками. Сплайн – це шматок кривої, що складається з кількох сегментів Безьє, об'єднаних обмеженнями безперервності, що забезпечують локальний контроль – переміщення однієї ручки впливає лише на сусідні сегменти, на відміну від окремої кривої високого ступеня Безьє, де кожна точка зміщує всю форму.
Чому кубічні криві Безьє домінують над іншими ступенями?
Чотири контрольні точки забезпечують незалежний контроль над кінцями та обома напрямками касання – достатньо, щоб задовольнити безперервність C¹ на з’єднанні, не перевантажуючи при цьому форму. Квадратики не мають незалежного напрямку касання на кожному кінці; ступінь 5 і вище додають складності без значної практичної користі.
Чи може крива Безьє представити ідеальну окружність?
Ні – поліноміальна крива Безьє може лише наближено представляти коло. Раціональна крива Безьє (NURBS з ваговими коефіцієнтами) може її представити точно. Кубічне наближення чверті кола з довжиною ручки приблизно 0,5523 від радіуса має максимальну радіальну похибку близько 0,027%, яка непомітна при роздільній здатності екрана.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте the simulation і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію the simulation