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


⇐ Предыдущая| |Следующая ⇒