Кривые и поверхности в компьютерной геометрии, I
Сплайны
Определение 5.2.1. Сплайном называется кривая, построенная по совокупности точек которые называются характеристическими или опорными точками сплайна. Требуется, чтобы сплайн r = r(t) проходил через заданные точки при заданных значениях параметра Значения параметра называются узловыми, а точки на оси R - узлами сплайна.
Пример 5.2.1. Ломаная линия с вершинами в точках :
где и Параметр называется местным параметром на учacткe
Если то параметризация ломаной называется равномерной. В этом случае параметрическая длина ломаной равна т. е. -числу опорных точек минус 1, если все опорные точки различны.
Если т. е. ломаная замкнута, ее параметрическая длина равна числу опорных точек (в предположении, что точки различны):
In[3] = DynamicModule [ {pts } , Manipulate [ Show[Graphics[{Blue, Thick, Line[{pts}]}]], {{pts, {{1, 1}, {2, 2.3}, {3, 2.7}, {4, 3}, {5, 4}}}, Locator}]]
Рассмотрим основные примеры сплайнов.
Сплайн Лагранжа
Пусть дана опорная точка Требуется найти полиномиальную по кривую такую, что при заданных значениях параметра Будем искать решение этой задачи в виде
где
Таким свойствами обладают многочлены
С их помощью получаем сплайн Лагранжа:
или
где
Главный недостаток сплайнов Лагранжа состоит в том, что между двумя соседними опорными точками они могут образовывать петли. Такие петли, не обусловленные расположением опорных точек, называются необоснованными петлями и являются существенным недостатком сплайна, не позволяющим применять данный сплайн для большинства приложений компьютерной геометрии.
Еще один существенный недостаток сплайнов Лагранжа состоит в том, что они могут выходить за пределы выпуклой оболочки своих опорных точек, причем довольно значительно.
Эти недостатки - цена за бесконечную гладкость сплайна на всей области определения параметра. Поэтому в компьютерной геометрии чаще всего пользуются не гладкими, а кусочно-гладкими сплайнами, о которых пойдет речь ниже.
Пример 5.2.2. Сплайн Лагранжа с возможностью управления опорными точками:
In[4] := DynamicModule [ {pts , ptsO , L, t, p, n = 6, tt} , ptsO ={{6.0, 0.0}, {0.0, 0.0}, {4.8, 5.2}, {0.3, 5.5}, {9.0, 3.0}, {4.3, 8.2} , {10.0, 6.0}} ; tt= {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0}; p[i_, s_] : = Apply [Times , (s - tt [ [tt] ] ) & /@ Drop [Range [n + 1] , {i + 1} ] ] ; L = Table [p [i , t] / p [i , tt [ [i + 1] ] ] , {i , 0 , n} ] ; Manipulate[ Show[{ParametricPlot[L.pts, {t, tt[[l]], tt[[-l]]}, PlotRange -> {{-15, 15}, {-15, 15}}], Graphics [{Red, Text [ToString [tt - 1] , pts [ [#] ] +{1.2, 0}] &/@ Range[n + 1] , Text["Сплайн Лагранжа = сплайн Ньютона", {8, -14}]}]}], {{pts, ptsO}, Locator}]]
Сплайн Ньютона
Сплайн Ньютона представляет собой тот же самый сплайн Лагранжа, но в другой форме, удобной для перевычисления сплайна в случае добавления новых опорных точек.
А именно, сплайн Ньютона записывается в виде
где векторные коэффициенты ищутся из условий прохождения сплайна через точки При этом точки полностью определяют коэффициенты с помощью системы уравнений
Эта система решается за один проход, так как матрица системы является нижнетреугольной. Из первых уравнений определяются первые неизвестные Поэтому если мы добавим еще одну точку нам будет нужно лишь определить еще один коэффициент из еще одного, добавленного уравнения. Коэффициенты при этом останутся прежними.
Задача 5.2.1. Написать программу для сплайна Ньютона с возможностью добавлять точку.
Сплайн Эрмита
Сплайны Эрмита предназначены для соединения двух заданных кривых новой кривой, полиномиальной по параметру, так, чтобы получившаяся совокупная кривая имела заданную степень гладкости в точках стыковки. Отсюда следует, что сплайн Эрмита задается двумя своими крайними точками и заданным числом m производных радиус-вектора в каждой из крайних точек. Сплайн Эрмита имеет вид полинома степени по Степень полинома называется порядком сплайна. При этом векторных коэффициентов этого полинома определяются из системы уравнений ( условие для каждой из двух крайних точек).
Сплайн Эрмита может быть определен формулой
( 5.1) |
где - заданные значения радиус-вектора кривой и его производных на концах, а даются формулами
( 5.2) |
Задача 5.2.2. Написать программу для сплайна Эрмита с возможностью добавлять точку. Запрограммировав сплайны Эрмита, проверить на Mathematica, что производные радиус-вектора на концах сплайна равны заданным значениям.