- •Московский институт электронной техники
- •Введение.
- •Пространственна кривая в параметрическом виде.
- •Интерполяционные кривые.
- •Сплайновые кривые.
- •Сплайновые кривые Эрмита.
- •Сплайновые кривые Безье.
- •Интерактивное изменение положения опорных точек сплайновых кривых с помощью мышки.
- •Интерактивное изменение числа опорных точек сплайновых кривых с помощью диалоговых окон.
- •Составные b-сплайновые кривые с кратными опорными точками
- •Нормализованные базисные функции b-сплайна.
Пространственна кривая в параметрическом виде.
Пространственную кривую удобно представлять в параметрическом виде. На Рис.5. показана пространственная кривая C. Произвольная точкаMна этой кривой имеет координаты (x,y,z). Эти координаты определяются через систему следующих параметрических уравнений:
(1)
Здесь параметр tменяется в интервале [a,b]. Если параметр равенt=a, то точкаMнаходится в начале кривой, в точке 1. Если же параметр равенt=b, то точкаMнаходится в конце кривой, в точке 2.
Интервал [a,b] изменения параметраtвсегда можно свести к единичному интервалу [0,1], введя новый параметрuс помощью следующего преобразования:
(2)
Систему уравнений (1) кривой Cможно записать в векторной форме следующего вида:
(3)
Здесь r- радиус-вектор точек пространственной кривойC.
Рис.5. Пространственная кривая C. Вектор касательнойT. Вектор кривизныK. |
Рис.6. Дуга окружности C. Вектор касательнойT. Вектор кривизныK. |
(Изображение на Рис.5 создано программой line1.cpp, на Рис.6 создано line2.cpp.)
Кривая Cназывается регулярной кривой, еслив каждой ее точке. Это означает, что в каждой точке кривойMсуществует касательная к ней и эта касательная меняется непрерывно вслед за перемещением точкиMпо кривой. Единичный вектор касательной к кривой определяется следующей формулой:
(4)
На Рис.5. вектор касательной Tобозначен стрелкой желтого цвета.
Если дополнительно потребовать, чтобы задающая кривую векторная функция имела вторую производную, то будет определен вектор кривизны кривой. Вектор кривизны определяется следующим выражением:
(5)
Направление вектора кривизны, это направление на центр кривизны кривой для данной точки M. Радиус кривизны равен обратному значению длины вектора кривизны.
(6)
На Рис.5. вектор кривизны Kобозначен вектором желтого цвета.
В качестве примера рассмотрим дугу окружности с радиусомRлежащей в плоскостиxOyРис.6.. Параметрические уравнения (1) теперь примут вид:
(7)
Здесь в качестве параметра удобно выбрать угол в цилиндрической системе координат. Находим первую и вторую производные радиуса-вектора точек окружности.
(8)
Теперь нетрудно по формулам (4), (5) и (8) найти вектор касательной Tи вектор кривизныK. После подстановки (8) в формулы (4) и (5) получаем следующие выражения:
(9)
Здесь следует обратить внимание на то, что радиус кривизны R() окружности, определенный по формуле (6), будет совпадать с радиусом окружностиR. Действительно, из формул (9) следует выражение для модуля вектора кривизны:
(10)
Отсюда получаем радиус кривизны окружности.
Пусть точка Mнаходится на осиOy, как показано на Рис.6. В этом случае параметр равен=/2, и векторыTиMбудут иметь следующий вид:
(11)
Из формул (11) видно, что вектор кривизны направлен к центру окружности. Это же видно и из Рис.6.
Интерполяционные кривые.
Если заданы N+1 опорные точки (опорные векторы)искомой пространственной линии, то можно сконструировать интерполяционную кривую (interpolatingcurve) в виде полинома порядкаN. Основным свойством интерполяционной кривой является то, что она проходит через все опорные точки. В других точках интерполяционная кривая не совпадает с точками искомой линии.
Рассмотрим для примера четыре опорных вектора Рис.7. Здесь четыре опорные точки лежат на дуге винтовой линии.
Рис.7 Четыре опорных вектора лежат на дуге винтовой линии |
Рис.8 Через опорные точки проведена интерполяционная кривая третьего порядка |
(Изображение на Рис.7 создано программой line3.cpp, на Рис.8 создано line4a.cpp.)
Построим на этих векторах параметрическую интерполяционную кривую. Будем предполагать, что параметр кривой uменяется в пределах 0u3. Кроме того, будем считать, что приu=0 радиус-вектор кривой будет совпадать с первым опорным вектором, приu=1 совпадать со вторым опорным вектором, приu=2 с третьим опорным вектором, и приu=3 радиус-вектор кривой будет совпадать с четвертым опорным вектором.
(12)
При этих условиях интерполяционная кривая определяется однозначно, и имеет следующий вид:
(13)
На Рис.8. показана интерполяционная кривая (13) синим цветом.
Как видно из Рис.7. интерполяционная кривая третьего порядка достаточно хорошо описывает дугу винтовой линии. По-видимому, если увеличить число опорных векторов, а значит увеличить порядок интерполяционной кривой, то результат интерполяции можно еще улучшить. Обобщим результат, содержащийся в формулах (12), (13) на число опорных векторов N+1.
Теперь будем считать, что параметр кривой uменяется в пределах 0uN. Кроме того, будем считать, что выполняются следующие условия:
(14)
После этого запишем общую формулу для интерполяционной кривой, проходящей через N+1 опорных векторов.
(15)
На Рис.9. показана интерполяционная кривая (15) шестого порядка.
Рис.9. Интерполяционная кривая порядка 6. |
Рис.10. Интерполяционная кривая порядка 13. |
(Изображения на Рис. 9, 10 созданы программами line4b.cpp, line4c.cpp.)
Как видно из Рис.9. интерполяционная кривая порядка 6 прекрасно аппроксимировала дугу винтовой линии. Однако такое положение будет не для всех линий. На Рис.10. приведен пример пространственной линии, для которой интерполяционная кривая не дает хорошей аппроксимации. Порядок интерполяционной кривой в этом примере выбран достаточно большим, он равен 13. Однако интерполяционная кривая на одних участках линии дает хорошую аппроксимацию, а на других плохую.
Поэтому этот класс интерполяционных кривых редко используется в задачах компьютерной графики.