Пусть, например, дизайнер хочет создать компьютерное представление кривой, изображенной на рис. 11.9, а. Эта кривая может быть частью создаваемого проекта крыла автомобиля, турбинной лопатки или корпуса электродрели. Или это может быть траекторией камеры, по которой она перемещается по сцене, делая снимки. Задача состоит в фиксации формы этой кривой в виде, который позволит при желании воспроизводить ее, при необходимости произвольно изменять ее форму и размер, передавать ее в машину для автоматической раскройки или литья и т. д. Как правило, не существует простой формулы для точного описания этой кривой.
Для того чтобы «ввести» кривую, дизайнер рисует эскиз кривой на графическом планшете и затем перемещает курсор вдоль кривой, нажимая кнопку мыши в контрольных точках Р0, Р{,…, расположенных в непосредственной близости к этой кривой, как показано на рис. 11.9, б. Последовательность контрольных точек часто называют контрольным полигоном (control poligon)1. Дизайнер вводит контрольный полигон, имея богатый опыт и ясное понимание характеристик алгоритма генерирования кривых - именно такой алгоритм будет позднее использован для повторной генерирования кривой по данным точкам.
1 Термин «полигон» означает замкнутую фигуру, ограниченную прямыми линиями. Фигура еще не является полигоном, пока мы имеем дело лишь с последовательностью точек. Тем не менее такая терминология уже стала общепринятой.
11.3. Интерактивное конструирование кривых
Рис. 11.9. Сценарий конструирования кривой: а) желаемая кривая; б) пользователь задает точки; в) алгоритм генерирует множество точек вдоль «близкой» кривой Как видно из рис. 11.10, роль алгоритма заключается в создании точки P(t) по любому введенному в него значению t. «Данными» для этого алгоритма является набор контрольных точек, в совокупности определяющих кривую, на которую должны лечь точки P(t). Алгоритм обычно реализуется в виде функции:
Point2 curvePt(double t. Real PointArray pts),
которая возвращает точку для произвольного значения t из заданного интервала. Для того чтобы нарисовать кривую, пользователь может выбрать последовательность значений t, вычислить для каждого из них функцию curvePtO и соединить полученные точки отрезками прямой, чтобы сформировать ломаную линию. На рис. 11.9, в приведен набор маленьких квадратиков, указывающих точки, которые мог бы возвратить соответствующий алгоритм после получения совокупности контрольных точек с рис. 11.9, б.