Про криві Без'є та сплайни
Крива Без'є — гладка параметрична крива, що задається набором керівних точок. Її незалежно один від одного розробили П’єр Без'є (Renault) і Поль де Кастельжо (Citroën) у 1960-х роках для проєктування кузовів автомобілів. Крива степеня n задається многочленом Бернштейна: B(t) = Σ Pᵢ ⋅ C(n,i) ⋅ (1−t)ⁿ⁻ᶦ ⋅ tᶦ, де t ∈ [0,1], C(n,i) — біноміальні коефіцієнти. Алгоритм де Кастельжо обчислює криву геометрично — багаторазовим лінійним інтерполюванням між сусідніми точками, що є чисельно стійким і інтуїтивно зрозумілим.
Симулятор дозволяє додавати керівні точки клацанням, перетягувати їх для зміни форми кривої в реальному часі, з’єднувати кубічні сегменти у гладкі сплайни (C¹ або G¹ неперервність) і спостерігати за «багатокутником підрозділу» на кожному кроці алгоритму де Кастельжо, що анімується під час пробігу параметра t від 0 до 1.
Поширені запитання
Що таке алгоритм де Кастельжо?
Алгоритм де Кастельжо обчислює точку кривої Без'є при параметрі t через багаторазове лінійне інтерполювання між сусідніми керівними точками. Для кубічної кривої (4 точки P₀–P₃): перший тур дає 3 проміжні точки, другий — 2, третій — одну точку B(t). Проміжні точки утворюють трикутник відрізків, де гіпотенуза є дотичною до кривої — це і є «багатокутник підрозділу», видимий в анімації.
Чому кубічні криві Без'є настільки поширені?
Кубічні криві (степінь 3, 4 керівні точки) — мінімальний степінь, що дозволяє незалежно задавати обидва кінці та обидва дотичні напрямки. Криві вищого степеня можуть коливатися (явище Рунге) і ними складніше керувати. Фактично всі векторні формати — SVG, PDF, PostScript, шрифти TrueType/OpenType, CSS-анімації — використовують кубічні криві Без'є як базовий примітив.
Що таке B-сплайн і чим він відрізняється від кривої Без'є?
B-сплайн (базисний сплайн) визначається вузловим вектором, що задає порядок з’єднання поліноміальних ділянок. На відміну від кривої Без'є, кожна керівна точка B-сплайна впливає лише на локальну ділянку кривої (скінченна підтримка). NURBS (неоднорідні раціональні B-сплайни) з вагами є стандартом у CAD-системах типу AutoCAD і SolidWorks.
Як забезпечити гладке з’єднання кубічних сегментів?
Для C¹-неперервності (збіг першої похідної) остання керівна точка сегмента k, перша керівна точка сегмента k+1 і спільна кінцева точка мають бути колінеарними, причому відстані від кінцевої точки — рівними. Це забезпечує збіг напрямку й величини дотичної. Для G¹-неперервності достатньо лише колінеарності (напрямок збігається, але не обов’язково величина) — слабша, але візуально гладка умова, що використовується у дизайні шрифтів.
Що таке многочлени Бернштейна?
Многочлени Бернштейна B(i,n,t) = C(n,i)⋅tᶦ⋅(1−t)ⁿ⁻ᶦ утворюють базис многочленів степеня n на [0,1]. Вони невід’ємні, у сумі дорівнюють 1 і кожен досягає максимуму при t = i/n. Оскільки крива є зваженим середнім керівних точок (ваги = многочлени Бернштейна), вона завжди лежить всередині опуклої оболонки керівного многокутника.
Як криві Без'є використовуються в типографіці?
Шрифти TrueType зберігають контури гліфів як квадратичні криві Без'є (3 точки на сегмент), OpenType — або квадратичні, або кубічні (як у PostScript Type 1). При відображенні растеризатор обчислює криві з потрібною роздільністю і заповнює контур. Один символ ASCII зазвичай складається з 10–30 сегментів Без'є.
Що таке властивість опуклої оболонки?
Опукла оболонка множини точок — найменша опукла область, що містить усі точки. Оскільки криві Без'є є опуклими комбінаціями керівних точок (ваги Бернштейна невід’ємні й у сумі дорівнюють 1), крива завжди лежить всередині опуклої оболонки керівного многокутника. Ця властивість використовується в алгоритмах перевірки зіткнень: якщо промінь не перетинає опукту оболонку, він не може перетнути криву.
Який зв’язок між кривими Без'є і згладжуванням анімації?
CSS і SVG використовують кубічні криві Без'є для задання функцій плавності анімації: cubic-bezier(x₁, y₁, x₂, y₂), де два керівних точки (кінці зафіксовані в (0,0) і (1,1)) визначають, наскільки швидко змінюється анімоване значення. Знайомий «ease-in-out» приблизно відповідає cubic-bezier(0.42, 0, 0.58, 1). Крутий ділянок — швидка зміна, плоска — повільна.
Чи можуть криві Без'є точно описувати кола?
Ні — раціональні криві Без'є (NURBS із ненульовими вагами) можуть точно описувати конічні перерізи, зокрема кола. Але поліноміальні криві Без'є не можуть. Один квадрант кола апроксимується кубічною кривою Без'є з керівними точками (R, kR) і (kR, R), де k ≈ 0,5523. Максимальна похибка становить близько 0,00027R — незамітна для звичайних роздільностей екрана.
Що таке підвищення степеня кривої Без'є?
Підвищення степеня — це представлення тієї самої геометричної кривої з однією додатковою керівною точкою (й вищим степенем) без зміни форми. Лінійний сегмент підвищується до квадратичного, квадратичний — до кубічного тощо. Нові керівні точки обчислюються як зважені середні оригінальних, і процес є точним (без апроксимації). Це корисно, коли потрібно звести всі криві до єдиного степеня перед подальшим алгоритмічним обробленням.