Уравнение (11.52) задает кривую в виде взвешенной суммы стыковочных функций g(t - k), а именно:
* =.0
где g(t) - квадратичная сплайн-функция, определяемая уравнением (11.49). Напишите и выполните программу, которая предоставляет пользователю возможность разместить с помощью мыши последовательность контрольных точек Рк, после чего рисует кривую V(t). При выполнении задания полезно создать функцию double g(double t), которая возвращает значение v(t) и, в частности, возвращает 0, если £ лежит за пределами промежутка [0,3].
Тематическое задание 11.5. Создание редактора сплайн-кривых
Уровень сложности IIL
Создайте и выполните программу, которая предоставляет пользователю возможность создать с помощью мыши контрольный полигон Р. При запросе программа рисует В-сплайн кривую, определяв11.13. Тематические задания мую полигоном Р. В программе должны быть реализованы следующие команды, выполняемые по нажатию соответствующих клавиш на клавиатуре (например, «Ь» для begin (начать), «d» для delete (удалить) и т. д.):
О |
b)egin: |
начать новый контрольный полигон Р; |
|
о |
d)elete: |
удалить точку из Р, ближайшую к отмеченной; |
|
о |
m)ove: |
переместить в новое положение отмеченную точку из Р; |
|
о |
r)efresh: |
нарисовать Р; |
|
о |
o)rder ('1'. | .'9'): |
нарисовать сплайн кривую заданного порядка на базе Р; |
о |
c)losed ('- | 1', , '-9'): |
нарисовать замкнутую В-сплайн кривую на базе Р; |
о |
e)rase: |
очистить экран; |
|
о |
q)uit: |
выйти из программы. |
Дополнительное задание 1. Поддержка нескольких контрольных полигонов. Расширьте свою программу так, чтобы в ней можно было одновременно создавать на дисплее до 10 контрольных полигонов и по желанию редактировать каждый из них.
Дополнительное задание 2. Могут ли В-сплайны образовывать окружности? Поэкспериментируйте с четырьмя и с восемью контрольными точками, лежащими на окружности, и проверьте, насколько точно аппроксимирует эту окружность замкнутая кубическая В-сплайн кривая. Подберите подходящую численную оценку невязки между кривой и окружностью и попробуйте с помощью различных конфигураций получить наилучшую кривую.