Численные методы

Сплайны

Каждый анимационный кадр в Pixar - это не ключевой кадр. Аниматор ставит позу в кадре 0 и в кадре 24. Всё между ними вычисляет кубический сплайн. Сплайн знает, что движение должно ускоряться и замедляться плавно (C² условие) - поэтому анимация выглядит живой, а не механической. TrueType-шрифт на экране - набор квадратичных B-сплайнов. Корпус iPhone спроектирован NURBS-поверхностями в Rhino. Траектория промышленного манипулятора - кубический сплайн с оптимизацией по jerk.

  • **Анимация (Pixar, DreamWorks):** кубические сплайны между ключевыми кадрами с C² гладкостью - аниматор задаёт «ease in/ease out» через касательные в узлах
  • **Spline regression / GAM:** B-spline basis в sklearn SplineTransformer, в Prophet для тренда, в R mgcv - nonlinear feature map из одной числовой фичи
  • **Robotics (MoveIt, CasADi):** cubic spline waypoints для motion planning, C² автоматически минимизирует jerk без явных ограничений в NLP

Предварительные знания

  • Интерполяция: Лагранж, Ньютон и феномен Рунге

Кубические сплайны

Каждый анимационный кадр в Pixar - это не ключевой кадр. Аниматор ставит позу в кадре 0 и в кадре 24. Всё между ними вычисляет кубический сплайн. Сплайн знает: движение должно ускоряться и замедляться плавно - C² условие. Поэтому анимация выглядит живой, а не механической.

**Кубический сплайн** S(x) на узлах x_0 < x_1 < ... < x_n: 1. На каждом интервале [x_i, x_{i+1}] - полином S_i(x) степени <= 3 2. **Интерполяция:** S_i(x_i) = y_i, S_i(x_{i+1}) = y_{i+1} 3. **C¹:** S'_i(x_{i+1}) = S'_{i+1}(x_{i+1}) - касательная непрерывна 4. **C²:** S''_i(x_{i+1}) = S''_{i+1}(x_{i+1}) - кривизна непрерывна Граничные условия: natural (S'' = 0 на краях) или clamped (S' задана на краях).

Сплайн строится через **трёхдиагональную систему** для вторых производных в узлах. Алгоритм прогонки Томаса решает её за O(n) - линейная сложность даже для тысяч узлов. Та же трёхдиагональная структура встречается в implicit time-stepping методах для диффузионных уравнений.

В Prophet (Facebook/Meta) сплайны - буквально building block тренда. Каждый changepoint задаёт узел кусочной линейной или логистической функции. Spline regression - это nonlinear feature map: из одной числовой фичи делается несколько базисных функций, которые GAM складывает линейно. Интерпретируемость сохраняется, нелинейность появляется.

Кубический сплайн обеспечивает гладкость класса:

B-сплайны

Кубический сплайн интерполирует - проходит через все точки. B-сплайн аппроксимирует - проходит **рядом** с контрольными точками, притягивается к ним. Это не баг, а фича: перетащить одну точку = изменить только локальный участок кривой. Именно поэтому каждый UI для редактирования кривых (Blender, After Effects, Figma) использует B-сплайн или Безье.

**B-сплайн кривая степени p:** C(t) = sum(i=0..n) P_i * N_{i,p}(t) где P_i - контрольные точки, N_{i,p}(t) - базисные функции Cox-de Boor. **Рекурсия (Cox-de Boor):** - N_{i,0}(t) = 1 если t_i <= t < t_{i+1}, иначе 0 - N_{i,p}(t) = (t - t_i)/(t_{i+p} - t_i) * N_{i,p-1}(t) + (t_{i+p+1} - t)/(t_{i+p+1} - t_{i+1}) * N_{i+1,p-1}(t) **Свойства базиса:** - Локальный носитель: N_{i,p}(t) != 0 только на [t_i, t_{i+p+1}] - Неотрицательность: N_{i,p}(t) >= 0 - Разбиение единицы: sum N_{i,p}(t) = 1

Локальный носитель - ключевое отличие от полинома Лагранжа. Там изменение одной точки пересчитывает **всю** кривую глобально. У B-сплайна степени p изменение контрольной точки P_i затрагивает только p+1 сегментов. В robotics это критично: пересчёт траектории не должен менять поведение руки-манипулятора на участках, которые уже выполнены.

СвойствоИнтерполяционный сплайнB-сплайн
Проходит через точки?Да (интерполяция)Нет (аппроксимация)
Локальный контроль?Нет (пересчёт всей кривой)Да (только p+1 сегментов)
УстойчивостьЗависит от расположения узловХорошая (базис неотрицателен)
ПрименениеВосстановление данныхДизайн кривых, анимация, CAD
ВычислениеРешение трёхдиагональной системыАлгоритм де Бура, O(p²)

В motion planning (MoveIt, CasADi) кубические B-сплайны задают waypoints траектории робота. Оптимизатор выбирает контрольные точки так, чтобы минимизировать jerk (производную ускорения). C² условие автоматически выполняется - не нужно добавлять его как ограничение в задачу оптимизации. Это экономит тысячи переменных в NLP-задаче.

Главное преимущество B-сплайнов перед интерполяционными сплайнами:

NURBS и применения в CAD

Полиномиальный B-сплайн не может нарисовать окружность точно - никогда, ни при каком числе точек. Потому что x(t)² + y(t)² = 1 - это не полиномиальное уравнение. Это алгебраический факт. NURBS обходит его элегантно: добавляет **веса** к контрольным точкам и использует рациональные функции (отношение полиномов).

1960-е: автопром рождает математику

Пьер Безье (Renault) и Поль де Кастельжо (Citroen) независимо изобрели кривые для проектирования кузовов автомобилей - без компьютеров, на бумаге. De Casteljau опубликовал позже, Bezier дал имя кривым. B-сплайны обобщили Безье, NURBS добавили веса для точных конических сечений. Сегодня NURBS - основа форматов STEP и IGES, на которых держится всё машиностроение.

**NURBS кривая:** C(t) = sum(i) w_i * P_i * N_{i,p}(t) / sum(j) w_j * N_{j,p}(t) где w_i > 0 - веса контрольных точек. **Non-Uniform** - узлы могут быть неравномерными **Rational** - отношение двух полиномиальных выражений При w_i = 1 для всех i -> обычный B-сплайн.

ГеометрияПолиномиальный B-сплайнNURBS
Прямая линияТочноТочно
ПараболаТочноТочно
ОкружностьПриближениеТочно
ЭллипсПриближениеТочно
Свободная формаТочноТочно

NURBS в CAD - это не только красота. В аэрокосмическом ML-пайплайне: Rhino/Solidworks экспортирует NURBS-геометрию -> mesh generation (triangle mesh) -> FEM/CFD симуляция -> эти симуляции становятся training data для aerodynamic surrogate models (нейросеть, которая предсказывает drag за миллисекунды вместо часов CFD). Если геометрия задана точно через NURBS, mesh качественный, surrogate учится лучше.

Сплайн и кривая Безье - одно и то же

Кривая Безье - один полиномиальный сегмент. Сплайн - последовательность сегментов, соединённых условиями гладкости (C⁰/C¹/C²). B-сплайн - запись сплайна через базисные функции с автоматической гладкостью

Одна кривая Безье степени n определяется n+1 точками и не имеет стыков. Сплайн - много сегментов, «сшитых» с заданной гладкостью. Кубические кривые Безье - частный случай B-сплайна степени 3 с конкретным узловым вектором.

Почему NURBS может точно представить окружность, а полиномиальный B-сплайн - нет?

Ключевые идеи

  • **Кубический сплайн:** кусочный полином степени 3 с C² гладкостью; решает феномен Рунге; трёхдиагональная система O(n)
  • **B-сплайн:** базисные функции Cox-de Boor; локальный носитель; аппроксимация, не интерполяция; building block GAM и spline regression
  • **NURBS:** рациональные B-сплайны с весами; единственный способ точно представить окружность/эллипс; стандарт CAD/CAM (STEP, IGES)
  • **Гладкость Cᵏ:** «ease in/ease out» в Pixar - это C² условие в математической записи; выбор между PCHIP (C¹) и natural cubic (C²) - инженерное решение

Связанные темы

Сплайны опираются на интерполяцию и применяются в оптимизации и CAD:

  • Интерполяция: Лагранж и Ньютон — Сплайны - ответ на феномен Рунге: низкая степень полинома + много сегментов
  • Погрешности и floating point — Трёхдиагональные системы для сплайнов устойчивее полиномов высокой степени к cancellation
  • Численное интегрирование — Сплайны - эффективная основа для квадратурных формул высокого порядка

Вопросы для размышления

  • C² условие сплайна - это ровно то, что аниматор называет 'ease in / ease out'. Математически: вторая производная непрерывна в каждом узле. Что произойдёт с анимацией, если использовать C¹ (PCHIP) вместо C²?
  • B-spline regression в Prophet задаёт тренд через changepoints. Как выбор числа узлов (knots) влияет на bias-variance tradeoff модели?
  • NURBS-геометрия -> mesh -> FEM симуляция -> surrogate ML-модель. На каком этапе точность NURBS критична, а на каком достаточно приближения?

Связанные уроки

  • nm-02 — Феномен Рунге - мотивация для кусочной интерполяции
  • nm-01 — Трёхдиагональные системы решаются в float64 - важна устойчивость
  • nm-04 — Квадратуры - интегрирование сплайнов точно и дёшево
  • calc-16-taylor — Тейлор - локальное полиномиальное приближение, сплайн - кусочное
  • la-15-svd — SVD лежит в основе сплайн-регрессии и GAM-моделей
  • la-01-vectors-intro
Сплайны

0

1

Войти