qweqweqe123123

Кривая Безье

Хотя преобразование алгебраического уравнения кривой в форму эрмитова уравнения позволяет работать с кривой на интуитивном уровне, эрмитова форма не полностью удовлетворяет требованиям разработчикам. Как мы показали, предсказать форму кривой по величине векторов касательных  P0' и P1'  не так-то просто (рис. 6.2).

В начале 60-х гг. Безье — сотрудник французской автомобильной компании «Рено» — предложил новую форму уравнения кривой и использовал ее в системе поверхностного моделирования UNISURF [19]. Эта кривая получила название кривой Безье (Bezier curve). Она строится по вершинам многоугольника, заключающего ее в себе. Вершины сопрягаются соответствующими функциями подобно тому, как это делается при построении эрмитовой кривой. Безье выбрал функции сопряжения таким образом, чтобы получающаяся кривая удовлетворяла следующим требованиям.

□   Кривая проходит через первую и последнюю вершины многоугольника.

□   Направление вектора касательной в первой точке кривой совпадает с направлением первого отрезка многоугольника (рис. 6.3). Аналогичным образом, последний отрезок многоугольника определяет направление касательной в конечной точке кривой.

□   Производная степени n в начальной (или конечной) точке кривой определяется положением первых (или последних) п + 1 вершин многоугольника. Это свойство очень удобно при соединении двух кривых Безье, если требуется удовлетворить требованию непрерывности высших производных в точке соединения. Вообще говоря, второе свойство есть частный случай данного свойства.

□ При изменении порядка вершин многоугольника на противоположный получается та же самая кривая.

Задавшись этими требованиями, Безье выбрал в качестве функций сопряжения полином Бернштейна:

Кривая Безье

где

Кривая Безье

Если функцию сопряжения (6.15) применить к вершинам многоугольника, получается уравнение кривой Безье:

Кривая Безье

где Pi — радиус-вектор i-й вершины. Вершины многоугольника называются задающими (control vertices), как и сам многоугольник (control polygon). Из формулы (6.16) видно, что для кривой, заданной п + 1 точками, максимальная степень будет иn. Таким образом, степень кривой Безье определяется количеством задающих точек. Кривые Безье разных степеней с разным количеством задающих точек показаны на рис. 6.3.

Кривая Безье

Покажем теперь, что кривая Безье, заданная уравнением (6.16), удовлетворяет требованиям, перечисленным в начале раздела. Для начала проверим, что кривая проходит через первую и последнюю задающие точки. В этом легко убедиться, подставив в уравнение значения 0 и 1 параметра и. Раскроем суммирование следующим образом:

Кривая Безье

Рассчитаем значения Р(0) и Р(1):

Кривая Безье

Мы убедились, что кривая проходит через первую и последнюю задающие точки. Второе и третье свойства можно проверить дифференцированием уравнения кривой Безье, чем мы займемся в следующем разделе. Четвертое свойство проверяется путем рассмотрения двух кривых, определяемых уравнениями

Кривая Безье

и

Кривая Безье

Уравнения (6.17) и (6.18) можно интерпретировать следующим образом: кривая Р(u) проводится от точки Р0 к точке Рn, тогда как P'(v) проводится от Pn(=Qo) к P0(=Qn). Если мы введем новый параметр и и заменим v на (1 — и ), направление Р' изменится на противоположное (то есть кривая будет идти от Ро к Рn при изменении и от 0 до 1). Поэтому мы сможем сказать, что кривые Р и Р' идентичны, если Р'(1 - и) при разложении даст нам то же выражение, что и Р(u) с точностью до названий параметров. Мы получим выражение для Р' (1 - и), подставив (1 - и) вместо v в формулу (6.18).

Кривая Безье

Перепишем выражение (6.19), подставив в него i вместо (n - j):

Кривая Безье

Поскольку

Кривая Безье

эквивалентно

Кривая Безье

мы можем заключить, что формула (6.20) совпадает с (6.17).

Кривая Безье обладает еще одним важным свойством, помимо перечисленных выше, — выпуклостью оболочки (convex hull property). Выпуклой оболочкой кривой Безье является выпуклый многоугольник, получаемый соединением задающих точек (рис. 6.4). Обратите внимание, что на этом рисунке все кривые Безье полностью лежат внутри своих выпуклых оболочек.

Выпуклость оболочки кривой Безье обеспечивается тем, что значения сопрягающих функций лежат на отрезке [0,1], а их сумма равна 1 для любого и. Это утверждение легко проверить для кривой Безье, определяемой двумя задающими точками. Кривая, заданная точками Р0 и Р1, будет отрезком прямой, а ее выпуклой оболочкой будет тот же самый отрезок. Любую точку этой кривой можно получить сложением P0B0.1 + P1B1.1. Поскольку функции сопряжения В0.1 и B1.1 положительны и их сумма равна единице для любого и, точка, определяемая выражением P0B0.1 + P1B1.1 будет лежать на отрезке Р0Р1 и делить его в отношении B1.1:B0.1. Отрезок Р0Р1 в нашем случае представляет собой вырожденную выпуклую оболочку, поэтому мы можем сказать, что все точки кривой лежат внутри этой оболочки. Аналогичным образом можно проверить высказанное выше утверждение для кривой Безье, заданной тремя и более точками, как показал Фа- рин [48]. Выпуклость оболочки полезно использовать при вычислении точек пересечения кривых Безье. Оболочка кривой содержит ее целиком, поэтому кривые Безье не могут пересекаться, если не перекрываются их оболочки. В этом случае трудоемкое вычисление точки пересечения кривых Безье можно сразу же пропустить. Проверка перекрытия выпуклых оболочек требует гораздо меньших вычислительных затрат.

Кривая Безье

Смотрите также