Сплайновые представления кривых и поверхностей — это представление кривых и поверхностей при помощи функции, область определения которой поделена на конечное количество отрезков, на каждом из которых она совпадает с некоторым алгебраическим многочленом (полиномом).
Введение
Сплайном является функция, область определения которой поделена на конечное количество отрезков, на каждом из которых сплайн совпадает с определенным алгебраическим многочленом. Наибольшая степень из примененных полиномов именуется степенью сплайна. Величина разности между степенью сплайна и достигнутой гладкостью именуется дефектом сплайна. К примеру, непрерывная ломаная является сплайном первой степени и дефекта, равного единице. В сегодняшней трактовке сплайнами являются решения многоточечных краевых задач сеточными методами.
Сплайновые представления кривых и поверхностей
Для наглядной демонстрации понятия сплайна, степени сплайна и дефекта сплайна, рассмотрим следующий пример. Имеется набор экспериментальных данных, следует с максимальной точностью выполнить аппроксимацию последовательности данных полиномиальной функцией n-го порядка с достоверностью не меньше девяноста пяти процентов. В качестве основного можно выбрать метод полиномиальной аппроксимации при помощи так называемого сплайна Безье. Этот метод считается самым актуальным для реализации в компьютерном алгоритме.
Сплайны (кривые) Безье или кривые Бернштейна-Безье были изобретены в шестидесятых годах прошлого века независимо друг от друга Пьером Безье, сотрудником автомобилестроительной корпорации «Рено», и Полем де Кастельжо, сотрудником фирмы «Ситроен», где они использовались для проектирования автомобильных кузовов.
Кривая Безье может быть отнесена к полиномам третьего порядка и ее можно определить при помощи четырех точек. Введем обозначения для этих точек, $p_0$ (начальная), $p_1, p_2$ (две управляющие) и $p_3$ (конечная). Данные точки будут иметь координаты: (x0, y0), (x1, y1), (x2, y2) и (x3, y3). Полином третьего порядка, который задает координаты точек в двумерном пространстве, может быть представлен параметрическими уравнениями общего вида:
$ x(t) = a_x*t^3 + b_x*t^2 + c_x*t + d_x$ (1)
$ y(t) = a_y*t^3 + b_y*t^2 + c_y*t + d_y $
Здесь $a_x, b_x, c_x, d_x, a_y, b_y, c_y. d_y$ являются константами, a параметр t может изменяться от нуля до единицы.
Каждая кривая Безье может быть уникально определена при помощи этих восьми констант. Их величины определяются координатами четырех точек, которые задают кривую. Целью данной задачи является вывод уравнений, позволяющих рассчитать восемь констант по заданным координатам четырех точек. Первым допущением для вывода данных уравнений является тот факт, что кривая Безье должна начинаться в точке с координатами (x0, y0) при t = 0:
x(0) = x0
y(0) = y0
Даже это несложное допущение может позволить продвинуться в выводе уравнений для констант. Если подставить в параметрические уравнения t = 0, то можно получить:
$x(0) = d_x$
$y(0) = d_y$
Это может означать, что две константы являются просто координатами начальной точки:
$d_x = x0 $
$d_y = y0$
Вторым допущением, касающимся кривой Безье является тот факт, что она должна заканчиваться в точке с координатами (x3, y3) при t = 1:
$x1 = x3$
$y1 = y3$
Если подставить в параметрические уравнения (1) вместо t единицу, то получим:
$x(1) = a_x + b_x + c_x + d_x$
$y(1) = a_y + b_y + c_y + d_y$
Это может означать присутствие следующей связи между константами и координатами конечной точки:
$a_x + b_x + c_x + d_x = x3$
$a_y + b_y + c_y + d_y = y3$
Оставшиеся допущения должны касаться первых производных параметрических уравнений, которые описывают угол наклона кривой. Первая производная параметрического уравнения общего вида, которая задает полином третьего порядка в виде функции переменной t, может быть записана в таком виде:
$x´(t) = 3a_x*t^2 + 2b_x*t + c_x$
$y´(t) = 3a_y*t^2 + 2b_y*t + c_y$
Далее требуется определить угол наклона кривой в конечных точках. Воспользуемся известным положением, что прямая, которая проведена из начальной точки через первую управляющую точку, должна проходить по касательной к кривой Безье, и направлена в ту же сторону, что и кривая. Данная прямая может быть задана параметрическими уравнениями следующего вида:
$x(t) = (x1 – x0)t + x0$
$y(t) = (y1 – y0)t + y0$
Здесь t может изменяться от нуля до единицы.
Но эти уравнения могут также быть заданы иначе:
$x(t) = 3(x1 – x0)t + x0$
$y(t) = 3(y1 – y0)t + y0$
В этом случае t должно изменяться от нуля до одной трети.
Величина 1/3 объясняется тем обстоятельством, что длина той части кривой Безье, по касательной к которой должна проходить прямая, идущая из точки p0 через p1, имеющая направление в ту же сторону, что и кривая, равняется 1/3 от суммарной длины кривой.
Первые производные сформированных параметрических уравнений могут быть записаны в следующем виде:
$x´(t) = 3(x1 – x0)$
$y´(t) = 3(y1 – y0)$
Когда требуется выполнить расчет по этим уравнениям угла наклона кривой Безье при t = 0, то имеем:
$x´(0) = 3(x1 – x0)$
$y´(0) = 3(y1 – y0)$
Если подставить t = 0 в уравнение первой производной полинома третьего порядка, то получится:
$x´(0) = c_x $
$y´(0) = c_y$
Поэтому можно записать следующее равенство:
$c_x = 3(x1 – x0)$
$c_y = 3(y1 – y0)$
Последним допущением является тот факт, что прямая, которая проведена из второй управляющей точки через конечную точку, будет касательной к кривой Безье в ее конечной точке и направлена в ту же сторону, что и кривая. По-другому говоря:
$x´(1) = 3(x3 – x2)$
$y´(1) = 3(y3 – y2)$
Из уравнений общего вида вытекает следующее обстоятельство:
$x´(t) = 3a_x + 2b_x + c_x$
$y´(t) = 3a_y + 2b_y + c_y$
Это означает, что:
$3a_x + 2b_x + c_x = 3(x3 – x2)$
$3a_y + 2b_y + c_y = 3(y3 – y2)$
Приведенные выше выражения могут дать четыре уравнения, имеющие четыре неизвестных, которые могут быть решены относительно $a_x, b_x, c_x, d_x$, если выразить их через x0, x1, x2 и x3. После выполнения необходимых алгебраических преобразований, имеем:
$a_x = -x0 + 3x1 – 3x2 + x3$
$b_x = 3x0 -6x1 = 3x2$
$c_x = 3x0 + 3x1$
$d_x = x0$
Приведенные выше выражения позволяют проделать то же самое и для коэффициентов y.