Рис. 10.19. Порция поверхности Безье
Рис. 10.20. Кручение в угловой точке порции поверхности Безье
10.7. Кубические В-сплайны
Кубические кривые Безье и порции кубических поверхностей Безье довольно широко используются в задачах компьютерной графики и автоматизации проектирования. Но объекты этого класса имеют одно принципиальное ограничение. В точках сопряжения составных кривых или поверхностей обеспечивается выполнение условий параметрической непрерывности только класса С0. Если, например, использовать составную кривую в форме Безье для построения шпангоутов фюзеляжа планера (эту задачу мы рассматривали в разделе 10.2), вряд ли ее гладкость удовлетворит конструктора.
Создается впечатление, что мы достигли предела возможностей бикубического представления кривых и поверхностей и дальнейшие перспективы связаны либо с повышением порядка полиномов, либо с более частым размещением опорных точек. Но, оказывается, существует и третий путь совершенствования методики построения кубических кривых- нужно только отказаться от требования, чтобы формируемая кривая проходила через опорные точки, и согласиться, чтобы она проходила близко к ним. При этих условиях оказывается довольно просто обеспечить непрерывность не только самой составной кривой, но и ее первой и второй производных в точках сопряжения сегментов.
10.7.1. Кубические В-сплайны (пример)
В этом разделе мы рассмотрим один из частных случаев в В-сплайновой кривой и покажем, как обеспечить непрерывность класса С2 в точках сопряжения сегментов. В разделе 10.8
Кривые и криволинейные поверхности
будет рассмотрен более общий подход к формированию сплайновых кривых, который включает кривые Безье как частный случай.
Рассмотрим четыре последовательные опорные точки (р,_2, р,-ь р„ р,+|}, "выдернутые" из достаточно длинной последовательности. Раньше мы формировали на основе четырех точек такую кубическую кривую, которая при изменении значения параметра и от 0 до 1 "пробегала" расстояние от р,_2 до р(+ь причем проходила через точки р,_2 и р,+1. Теперь же оставим только первое условие - по мере того как параметр // изменяется от 0 до 1, мы должны сформировать участок кривой между промежуточными точками, соответствующими двум средним из заданного набора (рис. 10.21).