Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Компьютерная геометрия и геометрическое моделирование лабораторные работы. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
81
Лабораторная работа № 10. Сплайн Лагранжа, кубические сплайны с хордовой и нормализованной интерполяцией
10.1. Цель лабораторной работы
Целью данной лабораторной работы является знакомство с интерполяцией с помощью сплайна Лагранжа и кубических сплайнов с хордовой и нормализованной интерполяцией.
10.2. Предварительные сведения
10.2.1. Сплайн Лагранжа
Сплайн Лагранжа для опорных точек p
𝑁
r
𝑖p𝑖 𝑖
𝑖=0
Никаких дополнительных требований не накладывается, и для построения необ­ходимо задать лишь набор опорных точек.
Функции
𝑖
являются базисными функциями для полинома Лагранжа. Вы­шеизложенная формула подразумевает, что построение производится по всему массиву опорных точек сразу. Из-за этого с увеличением числа точек растёт по­рядок полинома, что может привести к возникновению эффекта Рунге на концах интерполируемого отрезка.
Сплайн Лагранжа, таким образом, является одним из самых простых сплайнов и
подходит для применения лишь в несложных и учебных задачах.
𝑁
строится по следующей формуле:
𝑖
0
𝑁

𝑗
𝑖
𝑗
 0𝑁
𝑗=0,𝑗≠𝑖
10.2.2. Кубический сплайн
Кубическим сплайном принято называть параметрический сплайн, который в точ­ках соединения своих сегментов имеет непрерывные первые и вторые производные. Уравнение одного сегмента такого сплайна имеет вид
r
a0a1a22a33 𝑖
𝑖
Без потери общности можно положить
    
хордовой интерполяции с помощью кубических сплайнов.
Встаёт задача нахождения коэффициентов сплайна. Для каждого сегмента сплайна необходимо задать две опорные точки и два касательных вектора. Для примера рассмотрим первый сегмент сплайна.
Пусть заданы точки
относительно коэффициентов
p0,
p1и касательные векторыp0,p1. Решая систему уравнений
rp
r1p1
0
a0,
a1,
r
a2,
a3, получим следующие выражения для
коэффициентов:
a
0p0
a0
p
0
a2
p1p0
2
1
p
0
1
p
p
0
1
a3
1
𝑖+1
r

. В этом случае говорят о
𝑖+1

p
1
1
p0p1
3
1
p
p
0
2
1
1
2
1
82 Лабораторная работа № 10. Сплайн Лагранжа, кубические сплайны
Аналогичные выражения получаются и для всех остальных сегментов сплайна в точках отдо соседними опорными точками:
p2,
. Значение
𝑖+1
p3,
p4и т.д. до
p𝑁. Параметрна каждом отрезке
при хордовой интерполяции вычисляют как длину между
𝑖+1
𝑖+1
p
𝑖+1p𝑖


изменяется
𝑖+1
В задачах, чаще всего встречающихся на практике, значения производныхp во всех точках не известны. Однако, воспользовавшись условием непрерывности вторых производных в каждой точке кубического сплайна, можно получить систему линейных уравнений, которая позволит вычислить касательные векторы во всех опорных точках кроме начальной
p0и конечной
p𝑁. Подробные выкладки можно
найти в книге [1]. Здесь же мы приведём лишь основные формулы.
Значения касательной находятся из следующей системы:
M P R
где матрицаMимеет размерность
212
МатрицаP цы

3
       
имеет размерность ) и состоит из компонент касательных векторов, относительно которых
1
23 
4

 

𝑁−1

(для плоских кривых размерность матри-
и является трёхдиагональной:
𝑁−1𝑁−2
𝑁−2
𝑁
𝑁
𝑁−1
 
𝑁−1
и необходимо решать данную линейную систему алгебраических уравнений:

000
P

111

𝑁𝑁𝑁
Наконец вектор R имеет следующий вид:
p
𝑁−1
p
0

𝑁
2
p1p0
2 2
p2p1
3
2
p
𝑁−1p𝑁−2
𝑁
p
𝑁
R
𝑁−1𝑁

1 2
2
𝑁−1
 
2

p2p1
1
2
2

p3p2
2
3
p𝑁p
Касательные векторыp0иp𝑁предполагаются известными.
𝑖
Геворкян М. Н. и др. Компьютерная геометрия и геометрическое моделирование 83
После нахождения касательных векторов можно вычислить коэффициенты для каждого сегмента кубического сплайна:
P
𝑖
P
𝑖+1
P
𝑖
P
𝑖+1
где вид:

1𝑖 2𝑖 3𝑖 4𝑖
r
, а функцииназываются весовыми функциями и имеют следующий
𝑖+1
1𝑖32 2𝑖32
3𝑖2
4𝑖2
𝑖+1
𝑖+1
Таким образом, вычисление кубического сплайна включает в себя следующие шаги:
– по заданным опорным точкам вычисляются значения параметра
–
решается система линейных алгебраических уравнений, из которой находятся
;
𝑖
значения касательных в опорных точках;
–
по опорным точкам и касательным вычисляются коэффициенты каждого сегмента сплайна;
–
путём изменения значений параметрапроизводится интерполяция искомой кривой.
Кубические сплайны оказались особенно полезны для численных методов ре­шения обыкновенных дифференциальных уравнений с плотной выдачей, так как в этом случае значения производных известны в каждой точке из правой части дифференциального уравнения.
10.2.3. Сплайн Эрмита
Сплайны Эрмита названы в честь французского математика Шарля Эрмита (Charles Hermite, 1822–1901) и являются кубическими полиномами, проходящи­ми через две точки компьютерной графике данные сплайны часто носят название cspline.
Для простоты обозначений рассмотрим две точки
m0, m1. Формула для вычисления точек сплайна имеет следующий вид:
Функции вычислить, воспользовавшись следующими граничными условиями:
p𝑖и
p
при известных производных в этих точках
𝑖+1
r
p010m001p111m1 
00
00,01,10и11
m𝑖и
m
. В
𝑖+1
p0,
p1и два касательных вектора
являются базисными полиномами. Их можно
rp
rp1 r′m0 r′m1
0
На практике используют три формы записи данных функций:
– Приведённая форма
совпадает с нормализованными весовыми функциями для
кубических сплайнов:
0032 1032 0132 1132
84 Лабораторная работа № 10. Сплайн Лагранжа, кубические сплайны
– Факторизированная форма
позволяет минимизировать число арифметических
операций при вычислении:
002 102 012 112
– Форма Безье
показывает связь между сплайнами Эрмита и полиномами Берн-
штейна (см. далее):
0
00 01

3 3

3
1
 10
3 2
 11
3
Факторизированная форма помогает сразу же выяснить, что
1

3
2

3
0010
11, 01и 0110, 11, 00.
Третья форма позволяет выявить связь сплайнов Эрмита с кривыми Безье и свести их построение к построению кривых Безье. Для этого можно вычислить опорные точки кривой Безье по следующим формулам:
w
w1p0m0 w2p1m1 w3p1
0p0
Сплайны Эрмита можно использовать для аппроксимации данных без известных значений производных (касательных). Для этого необходимо вычислить значения производных в точках по приближенным формулам.
Пусть дан набор точек
𝑘p𝑘
При использовании сплайнов Эрмита интерполяционная кривая будет состоять
𝑛
, который необходимо соединить гладкой кривой.
1
из отдельных сплайнов Эрмита, соединяющих пары точек. Кривая будет гладко
дифференцируемой на всём промежутке 
Приближенное вычисление касательных векторов (производных) можно прово-
0𝑛
.
дить разными способами. Перечислим здесь несколько формул.
Простейший способ заключается в использовании трёхточечных конечных разно­стей:
m
𝑘
p
𝑘+1p𝑘
𝑘+1𝑘
p
𝑘p𝑘−1
𝑘
 
𝑘+1
В начальной и конечной точке придётся использовать обычные конечные разно­сти:
p
1p0
m
0
1
0
m𝑛
p
𝑛p𝑛−1
𝑛
𝑛−1
Другим способом является использование формулы
p
m
𝑘

𝑘+1p𝑘−1
𝑘+1𝑘−1
 
При сплайн Эрмита сведётся к сплайну Катмулл–Рома.
Ещё одна формула имеет вид
p
m
𝑘𝑘+1
В конечных точках найдём ной радиус-вектора r
𝑘p𝑘−1
𝑘
𝑘+1
‴

.
p
𝑘+1p𝑘
𝑘
𝑘
m0и
 𝑘p𝑘p
𝑘+1
𝑘−1
 
𝑘+1
p
𝑘+1p𝑘
m𝑛из условия равенства нулю третьей производ-

,
Геворкян М. Н. и др. Компьютерная геометрия и геометрическое моделирование 85
0.0 0.5 1.0 1.5 2.0 2.5 3.0
y
1.0
0.5
0.0
0.5
1.0
p
0
p
1
p
2
p
3
p
i
0.0 0.5 1.0 1.5 2.0 2.5 3.0
x
1.0
0.5
0.0
0.5
1.0
y
p
0
p
1
p
2
p
3
p
i
10.3. Задание
1.
Задайте набор опорных точек Для проверки результатов используйте следующий набор точек:
p
 
1
примера 5-2 книги [1].
2.
Постройте точки ломаной линии по заданным опорным точкам так, как это изоб-
𝑇
,
p
2
 
ражено на рис. 10.1.
p0,
𝑇
,
p1, …,
p𝑁произвольной двумерной кривой.
p
 
3
𝑇
. Данный набор точек взят из
p

0
𝑇
,
Рис. 10.1. Точки ломаной для опорных точек p0, p1, p2, p
3.
Постройте сплайн Лагранжа по заданным опорным точкам. Изобразите на одном рисунке построенный сплайн, ломаную линию и опорные точки (см. рис. 10.2).
Рис. 10.2. Сплайн Лагранжа для опорных точек p0, p1, p2, p
Обратите внимание, что использовать для интерполяции необходимо именно сплайны, а не одноимённый полином Лагранжа.
4.
Постройте кубический сплайн, используя лишь заданные опорные точки. Так как для построения кубического сплайна необходимо задать производныеp0,
p𝑁в начальной и конечной точках, а по условию производные неизвестны, то
вычислите их приближённо для хордовой интерполяции по формулам:
p
p
0
1p0
p1p0
p
𝑁
p
𝑁p𝑁−1
p𝑁p
𝑁−1
3
3
86 Лабораторная работа № 10. Сплайн Лагранжа, кубические сплайны
0.0 0.5 1.0 1.5 2.0 2.5 3.0
x
1.0
0.5
0.0
0.5
1.0
y
p
0
p
1
p
2
p
3
p
i
На рис. 10.2 приведены два кубических сплайна, один из которых построен с помощью хордовой аппроксимации, а второй — с помощью нормализованной аппроксимации.
Рис. 10.3. Кубический сплайн для опорных точек p0, p1, p2, p
5.
Определите, какой из сплайнов лучше аппроксимировал выбранную вами кривую.
6.
Изобразить кривую, точки и все сплайны в одной системе координат. Видна ли разница в интерполяции «на глаз»? Проявляется ли эффект Рунге в случае сплайна Лагранжа?
В качестве справочной литературы рекомендуется использовать следующие ис­точники [1—6].
10.4. Содержание отчёта
Выполнение лабораторной работы необходимо оформить в виде отчёта, который должен содержать:
– титульный лист с указанием номера лабораторной работы и ФИО студента; – формулировку задания; – описание результатов выполнения задания:
– полученные вами графические изображения; – листинги (исходный код) программ (если они есть);
– выводы, согласованные с целью работы.
10.5. Контрольные вопросы
1.
Запишите формулы для кубического сплайна. Чем кубический сплайн отличается от кубического полинома?
2.
Запишите формулы для сплайна Лагранжа. Чем сплайн отличается от одноимён­ного полинома?
3.
Запишите формулы для сплайна Эрмита. Какие формы записи его коэффициентов вы знаете?
4.
Каковы преимущества и недостатки сплайнов Эрмита по сравнению со сплайном Лагранжа и кубическими сплайнами?
5. Чем сплайн Эрмита отличается от одноименных полиномов?
3
Геворкян М. Н. и др. Компьютерная геометрия и геометрическое моделирование 87
Список литературы
1.
Роджерс Д., Адамс А. Математические основы машинной графики. — М. : Мир, 2001. — ISBN 5030021434.
2.
Голованов Н. Н. Геометрическое моделирование. — М. : Физматлит, 2002. — ISBN 5940520480.
3.
Дубровин Б. А., Новиков С. П., Фоменко А. Т. Современная геометрия: Методы и приложения. Т. 1. — 6-е изд. — М. : УРСС: Книжный дом «ЛИБРОКОМ»,
2013. — ISBN 978-5-453-00047-0.
4. Фиников С. П. Курс дифференциальной геометрии. — М. : URSS, 2017.
5. Python home site. — 2018. — URL: https://www.python.org/.
6.
Плас Д. В. Python для сложных задач. Наука о данных и машинное обучение. — М. : Питер, 2018. — ISBN 978-5-496-03068-7.
88
Лабораторная работа № 11. Кривые Безье
11.1. Цель лабораторной работы
Целью данной лабораторной работы является изучение свойств кривых Безье.
11.2. Предварительные сведения
Кривые Безье названы в честь французского инженера компании Рено (Renault) Пьера Безье (Pierre Bézier, 1910–1999). Он опубликовал результаты своих иссле­дований в 1962 году. Однако он был не первым, кто использовал данные кривые. К похожим результатам пришёл другой французский инженер компании Ситроен (Citroën) — Поль де Кастельё (Paul de Casteljau, 1930) в 1959 году, но свои результаты он не опубликовывал. Кроме того, кривые Безье по своей сути являются полинома­ми Бернштейна, названными так в честь русского математика Сергея Натановича Бернштейна (1880–1968).
Кривые Безье нашли своё применение во многих областях инженерного дела, компьютерной графики и дизайна. Они активно используются в следующих типах программ:
–
в системах автоматизированного проектирования (CAD и CAM), которые активно используются в инженерии, архитектуре и в машиностроении;
–
в векторных графических редакторах, таких как Adobe Illustrator, CorelDRAW, Inkscape;
–
в векторных форматах графических изображений, таких как SVG, OpenType fonts, PDF, PS, и многих других;
–
в специализированных языках программирования для построения векторных изображений: Tikz/PGF, Asymptote.
11.2.1. Основные определения
Базисом Бернштейна называется совокупность функций следующего вида:
𝑖
𝑖
C
𝑛
где

— индексы, а параметрпринимает значения из единичного
промежутка.
Кривая Безье является полиномом Бернштейна с векторными коэффициентами
w𝑖:
B
𝑛
где w
𝑖𝑖𝑖в трёхмерном случае и w𝑖𝑖𝑖в двумерном случае.
𝑖
Кривая проходит через начальную формирует опорный «скелет» (или «каркас») и называются управляющими (или кон- трольными) точками кривой Безье. Ломаная, образующаяся при последовательном соединении этих точек, называется характеристической ломаной кривой Безье.
Часто управляющими точками называют лишь точки вне кривой, отличая их таким образом от конечных точек проходит кривая.
𝑛−𝑖𝑖

𝑛
𝑛

𝑖=0
w0и конечную

𝑖
w𝑖
𝑛
w𝑛точки. Точки
w
w
1w2
w0и
w𝑛, через которые
w0w1w𝑛
, лежащие
𝑛−1
Геворкян М. Н. и др. Компьютерная геометрия и геометрическое моделирование 89
B
3 3
(t)
B
2 3
(t)
B
1 3
(t)
B
0 3
(t)
0
0.2
0.4
0.6
0.8
1
0 0.5 1
t
w
0
w
1
w
2
w
0
w
1
w
2
w
0
w
1
w
2
Вычислим несколько первых функций Бернштейна (рис. 11.1):
0

0
Рис. 11.1. Графики нескольких функций Бернштейна
0

1
1

1
Для вычисления других функций можно воспользоваться рекуррентной формулой
𝑖−1
𝑖
𝑛


𝑛−1
которая доказывается путём подстановки выражений для
Базис Бернштейна представляет собой разложение единицы. Это можно показать,
𝑖
𝑛−1
𝑖−1
𝑖
и
𝑛−1
.
𝑛−1
воспользовавшись формулой для бинома Ньютона:
𝑛
𝑖
𝑛𝑛
𝑛
𝑖=0
На практике используют кривые Безье-го,-го и-го порядков. При реализации кривых более высокого порядка самым ресурсоёмким шагом является вычисление
биноминальных коэффициентов C коэффициентов заранее и сохранение их во вложенных списках.
𝑖
, поэтому разумным является вычисление этих
𝑛
На рис. 11.2 изображены три кривые Безье второго порядка с одинаковыми на­чальной и конечной точками
w0и
w2, но с разной контрольной точкой
w1. Одной
контрольной точки часто бывает недостаточно. Тогда используют кривые Безье тре­тьего порядка (см. рис. 11.3), для построения которых нужны уже четыре опорные точки, две из которых являются контрольными.
Рис. 11.2. Кривые Безье второго порядка. На рисунке показано различное положение
контрольной точки w
1
90 Лабораторная работа № 11. Кривые Безье
w
0
w
1
w
2
w
3
w
0
w
1
w
2
w
3
w
0
w
1
w
2
w
3
Рис. 11.3. Кривые Безье третьего порядка и их характеристические ломаные. Две
контрольные точки w1и w2позволяют более гибко управлять положением кривой
В графических векторных редакторах манипуляция кривыми Безье осуществля­ется путём перемещения опорных точек с помощью мыши. Вначале указываются желаемые конечные точки, а затем с помощью контрольных точек кривая подстраи­вается под нужную форму.
Выше упоминалось, что кривые Безье используются в шрифтах форматов True Type и Open Type. Каждый глиф шрифта состоит из одного или нескольких контуров, заданных с помощью кривых Безье третьего порядка с четырьмя опорными точками, две из которых управляющие. На рис. 11.4 представлено несколько примеров.
Рис. 11.4. Контуры букв ω, O и o шрифта Times New Roman. Показаны опорные и
управляющие точки кривых Безье
11.2.2. Матричные формулы для вычисления кривых Безье
Для ускорения вычислений точек кривой Безье можно воспользоваться матричной формулировкой вышеприведённых формул. Современные процессоры хорошо под­держивают операции с векторами, поэтому выигрыш в производительности можно получить даже при выполнении кода на одноядерном процессоре. В случае исполь­зования библиотеки функций на Си, так и за счёт распараллеливания операций с массивами.
Рассмотрим случай кубической и квадратной кривых Безье. При необходимости можно аналогичным способом получить формулы и для кривых более высокого порядка.
Кубическая кривая Безье имеет следующий вид:
B

3
NumPy
ускорение достигается как за счёт вызовов быстрых
3
w
2w1
0
2
3
w

w
2
3
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]