Уравнение (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. Могут ли В-сплайны образовывать окружности? Поэкспериментируйте с четырьмя и с восемью контрольными точками, лежащими на окружности, и проверьте, насколько точно аппроксимирует эту окружность замкнутая кубическая В-сплайн кривая. Подберите подходящую численную оценку невязки между кривой и окружностью и попробуйте с помощью различных конфигураций получить наилучшую кривую.
