Методы построения кривых Безье
Министерство образования и науки Российской Федерации
Допускаю к защите
Руководитель_________
____________________
Курсовая работа
по дисциплине Компьютерная геометрия и графика на тему «Методы построения кривых Безье»
Выполнил студент:
Преподаватель:
группа
подпись
подпись
Ф.И.О.
Ф.И.О.
Курсовой проект защищен
с оценкой______________
Иркутск, 2011
Оглавление
Введение
Кривые Безье были разработаны независимо друг от друга двумя разными французскими учеными: Пьером Безье и Полем де Кастелье в 60-х годах прошлого века. Оба ученых производили исследования в этом направлении в целях нахождения способа компьютерного проектирования автомобильных кузовов, так как оба на момент открытия работали в разных автомобильных компаниях (Пьер – в «Рено», Поль – в «Ситроен»). При этом открытие Де Кастелье было сделано раньше (1959 г.), однако компания «Ситроен» долго это скрывала, в качестве производственной тайны. Поэтому, впервые представив, Кривые Безье в 1962 году, Пьер стал обладателем патента и увековечил свое имя в их названии [1].
Принцип построения кривых Безье
Прежде чем приступить к описанию методов построения кривых Безье, считаю необходимым описать главный принцип или идею всех методов построения.
Кривая Безье строится с помощью, так называемых, контрольных точек. Из всех контрольных точек кривая, обычно, проходит лишь через две – опорные или узловые точки. Остальные контрольные точки не лежат на самой кривой, но их положение определяет ее кривизну – кривая как бы «стремиться» пересечься с ними, но, выгибаясь дугой, так и не «дотягивается». Эти точки называются управляющими. Таким образом, кривая непрерывно заполняет отрезок между опорными точками, изгибаясь в направлении управляющих точек, поэтому изменение положения любой из контрольных точек меняет изгиб кривой.
Такой принцип построения позволяет интуитивно определять внешний вид кривой по положению контрольных точек, что позволяет реализовать интерактивность и наглядность при подборе кривой нужной формы, а это, в свою очередь, позволяет наиболее быстро, просто и относительно точно реализовать представляемую кривую. Кроме того, представление кривой в виде контрольных точек позволяет, при ее трансформации (изменения формы, масштаба или пересчета в другой системе координат), не преобразовывать кривую полностью, а лишь преобразовать контрольные точки, а затем построить по ним новую кривую. Это существенно уменьшает количество необходимых расчетов. Именно поэтому кривые Безье нашли широкое применение в системах автоматизированного проектирования, графических редакторах и других представлениях двумерной и трехмерной графики на компьютере, например, при представлении шрифтов формата TrueType [1][2].
Математически, построение кривой Безье сводится к поиску таких функций для опорных точек , не зависящих от , и имеющих вид полиномов по , что кривая обладает основными свойствами кривой Безье, а именно:
- Кривая проходит через две контрольные точки, которые являются ее началом и концом, т. е. .
- Масштабирование и изменение пропорций кривой не нарушает ее стабильности, т. е. кривая не зависит от выбора декартовой системы координат в или, другими словами, она инвариантна относительно движений пространства («аффинно-инвариантна»).
- Если все контрольные точки лежат в одной плоскости, то кривая плоская и всегда располагается внутри фигуры, образованной линиями, соединяющими эти точки.
Что равносильно следующему:
- , для любой точки
- , для любого
- , для любого и , для любого
Нахождение таких функций и
реализуется в различных
Основные методы построения Кривых Безье
Существует несколько основных методов построения кривых Безье. Каждый из них имеет свои преимущества и недостатки, а также удобен и рационален при различных требованиях к точности и сложности кривой. Но, кроме методов построения, существуют и разные виды кривых Безье (я не имею ввиду подразделение по степени полинома), для которых существуют свои способы построения. Так по информации, необходимой для построения, различают два вида кривых: «Обычные» - нерациональные и рациональные кривые Безье.
Методы построения нерациональных кривых Безье
С использованием полиномов Бернштейна
Этот метод реализован в виде частного случая многочленов или полинома Бернштейна, при котором его коэффициенты – векторные. Упомянутый полином, был описан задолго до открытия самих кривых (в 1912 году) Российским ученым Сергеем Натановичем Бернштейном, при доказательстве аппроксимационной теоремы Вейерштрасса [4][5].
Для нахождения нужных функций используется базис Бернштейна - система из полинома степени , задаваемых формулами , где . Графически, это выглядит так:
Задаются коэффициенты при равными коэффициентам бинома Ньютона . А из этого следует, что . Так как функции Бернштейна удовлетворяют рекуррентному соотношению , с его помощью можно вычислить соответствующие функции, например , , . Тогда, если дана контрольная точка , то кривая Безье, определяемая этими точками : . Степень полинома также называют степенью кривой Безье [3][5].
Преимущества построения кривой Безье с использованием полиномов Бернштейна:
- Кривая является полиномиальной, а следовательно, бесконечно гладкой по всей своей длине.
- Построение не требует сложных вычислений. Полиномы Бернштейна зависят лишь от числа опорных точек, но не от их координат, поэтому кривая легко пересчитывается при любом изменении опорных точек.
Алгоритм Де Кастелье
Этот алгоритм построения кривых Безье был разработан их «первооткрывателем» Полем Де Кастелье, который, как я уже упоминал, придумал его в 1959 году, с целью применения в проектировании кузовов машин компании «Ситроен», в которой он тогда работал. В этом алгоритме, тоже используется базис Бернштейна, а также, выведенная в предыдущем методе, рекуррентная формула[6][5].
Подставим в базис Бернштейна рекуррентную формулу , выделив крайние точки и учитывая, что и , получим
где , . Продолжив этот процесс разложения и , придем к равенствам . Обозначив через , а через , получим рекуррентное соотношение . Эта формула позволяет вычислить любую точку кривой Безье, следовательно саму кривую Безье можно определить, как линию, точки которой определяются этим уравнением. Вычисления по этому уравнению производятся по характеристическим точкам и не требуют подсчета функций Бернштейна. Величины и t единственным образом задают точку на кривой [5].
Стоит заметить, что с геометрической точки зрения, при реализации алгоритма Де Кастелье происходит разбиение отрезков ломаной линии, которую образуют контрольные точки, в заданном соотношении. Причем, полученные в результате разбиения точки, образуют новую ломаную, которая снова разбивается. Процесс повторяется до тех пор, пока ломаная не превратится в линию, тогда, разбив эту линию мы получим точку кривой Безье. Таким образом, меняя параметр , влияющий на соотношение разбиения отрезков ломаной, представленного как , мы можем получить все точки кривой [6].
Преимущества построения кривой Безье по алгоритму Де Кастелье:
- Поскольку, в конечном результате, в рекуррентной формуле не используется многочлен Бернштейна, алгоритм Де Кастелье имеет более высокую вычислительную устойчивость.
- Задание рекуррентной формулой не самой кривой, а ее точек позволяет значительно расширить функциональные возможности алгоритма. В частности, путем разбиения можно увеличить количество опорных точек с сохранением формы кривой, что впоследствии расширяет возможности в изменении формы кривой, а также увеличивает ее гладкость. Также можно уменьшить количество контрольных точек и тем самым уменьшить расчеты для их построения. Кроме того, разбиение позволяет разделить кривую на две или более отдельных кривых, управляемых своими опорными и управляющими точками.
Построение рациональных кривых Безье
Рассмотренные выше способы построения кривой Безье, позволяют управлять ее формой с помощью изменения положения опорных точек, причем, чем больше этих точек, тем в большей степени мы можем управлять кривой. Но имея в качестве средств управления только опорные точки, иногда очень сложно построить кривые заданной формы. Поэтому был введено еще одно средство управления формой кривой – вес опорной точки. Влияние веса точки на форму кривой отличается от аналогичного влияния положения опорной точки. Так при смещении опорной точки все точки кривой передвигаются на разные величины в направлении смещения. При изменении веса опорной точки, точки кривой смещаются по направлению к этой точке, если вес увеличился или в противоположную сторону, если вес уменьшился [7].
Кривые Безье, в которых каждой опорной точке присвоен дополнительный параметр – ее вес, получили название рациональных. Способ построения рациональных кривых Безье основан на алгоритме Де Кастелье, но прежде, необходимо представить сам алгоритм в так называемой операторной форме или операторных обозначениях.
Для опорных точек и параметра определим оператор правого сдвига , действующий на кривые вида , где - гладкие функции от . Тогда можно найти по формуле: . Аналогично, для кривых вида , определим оператор левого сдвига по формуле: .
Тогда на множестве кривых, для которых определен оператор или , имеем и . Тогда их степени и , где число повторений и .
Тогда, кривая Безье с опорными точками , может быть задана в виде а также в виде .
В итоге, в операторных обозначениях, можем записать алгоритм Де Кастелье как , поскольку , т. е. если расписать:
Теперь для опорных точек зададим веса , тогда , где а . Оператор действует одновременно и на сами точки и на их веса .
Согласно биному Ньютона рациональную кривую Безье можно представить в виде . В случае равных весов точек , знаменатель становится постоянным, а кривая превращается из рациональной в нерациональную кривую Безье [7].
Преимущества построения рациональной кривой Безье:
- Рациональная кривая Безье способна точно (а не приблизительно) представлять собой дуги кривых второго порядка. Это бывает важно при проектировании деталей, в которых требуется, чтобы та или иная кривая в точности являлась дугой, например, эллипса, параболы или гиперболы (поскольку от этого зависят физические свойства той детали, в описании которой участвует данная кривая).
- Как я уже упоминал, дополнительный параметр опорной точки – вес, позволяет добиться совершенно новых форм кривых, невозможных при использовании нерациональных кривых Безье с любым количеством опорных точек.
Построение рациональной и нерациональной кривых Безье в системе компьютерной алгебры Wolfram Mathematica 8.0
Чтобы наглядно убедиться в большей «гибкости» рациональных кривых Безье, по сравнению с нерациональными, я решил реализовать на практике программу по построению этих кривых в одной системе координат. При этом обеспечить возможность изменения положения опорных точек и изменения величины веса опорных точек рациональной кривой, посредством взаимодействия с графиком и интуитивно-понятными элементами интерфейса. Для большей наглядности, опорные точки у двух кривых будут общие.
В качестве средства реализации программы я выбрал систему компьютерной алгебры Wolfram Mathematica 8.0, так как я уже ознакомился с седьмой версией этой системы во время занятий компьютерной геометрией и графикой в этом семестре и знаю, что в ней есть все необходимые функции для создания интерактивных графиков.
Несмотря на то, что координаты опорных точек будут меняться непосредственным взаимодействием с графиком, считаю целесообразным задать некое их значение сразу, которое они примут при запуске программы. Это предотвратит появление всех точек в начале координат, а следовательно, сделает более наглядным влияние их положения на форму кривой уже при запуске программы.
Количество опорных точек, я думаю, лучше будет установить достаточно, но не слишком, большим, например, равным восьми. Это предоставит возможность разнообразно изменять форму кривой, сделает ее боле гладкой, а также одновременно продемонстрирует, что, несмотря на большое количество опорных точек, «гибкость» нерациональной кривой значительно уступает таковой у рациональной кривой.
Координаты восьми опорных точек задам с помощью массива «optochki0» :
optochki0={{-2,-5},{-7,15},{1,
Так как я планирую создать именно интерактивный график, в котором параметры координат опорных точек и их веса будут меняться в реальном времени, всю программу я считаю нужным включить во встроенную функцию Dynamic[], которая будет обновлять график при малейшем изменении координат опорных точек или их веса.
Чтобы оставить возможность добавления
контрольных точек в
Dynamic[
n=Length[optochki0];
Функция Dynamic[], хоть и позволяет обновлять график при изменении параметров координат опорных точек или их веса, само это изменение не обеспечивает, поэтому, с этой целью, подключаем дополнительную функцию Manipulate[], которая позволяет интерактивно менять различные параметры, добавляя для этого специальные элементы контроля. Сразу включим в эту функцию параметры, которые мы будем менять – веса точек, в виде вектора текстовых названий этого параметра для каждой точки:
Manipulate[vesa={ves0,ves1,
Теперь, с помощью функции Show[], добавим, непосредственно, график, и начнем его заполнять. В первую очередь, для наглядности, подпишем номера опорных точек. Для этого вызовем функцию Graphics[], которая используется в Mathematica для вывода различной графической информации, с опциями Red и Text[], определяющих цвет и тип выводимой графической информации, соответственно.
Отдельно остановимся на содержимом опции Text[]. Для того, чтобы для каждой точки вывести соответствующий ей номер, используем индексы элементов массива «optochki0», а также, чтобы не перекрыть точку ее номером, немного увеличим координаты начала каждой подписи. Для реализации этого используем четыре функции, две из которых заданы неявно. Функция Range[n] генерирует последовательность индексов, подписываемых точек (1…n). Неявно заданная в виде символа «#» функция Slot[], подставляет вместо символа «#» элементы, следующие после «&». Также неявно заданная, функция Map[] (/@), обеспечивает последовательную выборку индексов из функции Range[n] для функции Slot[]. И наконец, функция ToString[], преобразующая индексы из числового вида в строковый, для вывода, с помощью функции Text[] перед преобразованием индекс уменьшается на один, так как нумерация точек начинается с нуля. Все вместе это выглядит так:
Graphics[{Red,Text[ToString[#-
Затем, продолжая заполнять график, добавленный функцией Show[], построим, непосредственно, сами кривые. Выведем их на экран, в качестве параметрических функций, зависящих от параметра , с помощью ParametricPlot[]:
ParametricPlot[{rat[optochki,
Использованные функции rat[] и nerat[] я инициализирую в конце программы, сейчас скажу лишь, что nerat[] – это нерациональная кривая Безье, а rat[], соответственно, рациональная.
Далее укажем некоторые параметры графика, с помощью соответствующих опций:
Axes®True,ImageSize®850,
Здесь опция «Axes®True» отображает оси координат, а «PlotRange» устанавливает их диапазон. «ImageSize®850» указывает размер графика.
В следующих девяти опциях задаем элементы контроля. «Locator» создает интерактивные, перетаскиваемые по графику, опорные точки, как для начальных координат «optochki0», так и для впоследствии измененных «optochki»:
{{optochki,optochki0},Locator}
Последующие опции элементов контроля типа «ползунки» указывают начальное значение и диапазон изменения веса для каждой опорной точки:
{{ves0,1},1,4},{{ves1,1},1,4},
Наконец, инициализируем, уже использованные в программе функции кривых rat[] и nerat[], с помощью встроенных функций построения кривых Безье «BezierFunction[]»:
Initialization¦(nerat[LS_]:=
Table[{vesa[[i]],1},{i,1,n}];
rat[optochki_, vesa_]:=BezierFunction[
Промежуточная функция «Table» формирует двумерный массив из n элементов, первый параметр которых представляет собой элемент вектора весов, а второй – единицу. Это необходимо так как, функция «BezierFunction» строит кривую по координатам опорных точек, поэтому для рациональной кривой нужно добавлять веса точек в качестве множителя к опорным точкам.
Код законченной программы выглядит так:
DynamicModule[
{pts0,w0,w1,w2,w3,w4,w5,w6,w7,
pts0={{-10.0,0.0},{-3.0,7.0},{
n=Length[pts0];
Manipulate[ww={w0,w1,w2,w3,w4,
Show[{Graphics[{Red,Text[
Table[{ww[[i]],1},{i,1,n}];
fBez[pts_, ww_]:=BezierFunction[pts*ww];)
В качестве результата выполнения выводится график двух кривых с общими опорными точками, положение которых можно менять, перетаскиванием мышкой, меняя, соответственно форму кривых. Слева от графика выводятся «ползунки» изменения веса каждой из опорных точек, который влияет на форму лишь рациональной (синей) кривой (Рис 4.). Кривые, после запуска программы совпадают, изменяя вес опорных точек для рациональной кривой можно добиться их расхождения и получить возможность сравнить свойства рациональной и нерациональной кривых Безье наглядно (Рис 5).
Заключение
Во время выполнения данной курсовой работы я узнал о различных способах построения самых распространенных в компьютерной графике кривых – кривых Безье. Открыл для себя различные преимущества и недостатки разных способов построения и ситуации, в которых можно применять тот или иной способ. Разбирая алгоритмическую основу построений этих кривых, я значительно расширил свои знания о способах представления кривых в двумерном пространстве и узнал о выдающихся ученых – математиках, внесших более чем значительный вклад в развитие этого направления.
При выполнении практической части, я открыл новые, для меня, возможности системы компьютерной алгебры Wolfram Mathematica 8.0, о которых даже не подозревал. Я научился создавать интерактивный интерфейс пользователя и узнал о множестве новых функций и их структуре. Но главное, я узнал о роли кривых Безье в современном компьютерном проектировании, о том, насколько иногда важна форма кривой в проекте детали, для ее физических и эксплуатационных свойств.
Список источников
- http://ru.wikipedia.org/wiki/%
D0%9A%D1%80%D0%B8%D0%B2%D0%B0% D1%8F_%D0%91%D0%B5%D0%B7%D1% 8C%D0%B5 - О. А. Графский «Моделирование сплайнов» Хабаровск «ЦДО» 2010
- http://www.intuit.ru/
department/mathematics/ compgeom/5/5.html - http://ru.wikipedia.org/wiki/%
D0%91%D0%B5%D1%80%D0%BD%D1%88% D1%82%D0%B5%D0%B9%D0%BD,_%D0% A1%D0%B5%D1%80%D0%B3%D0%B5%D0% B9_%D0%9D%D0%B0%D1%82%D0%B0% D0%BD%D0%BE%D0%B2%D0%B8%D1%87 - Н. Н. Голованов «Геометрическое моделирование» Москва «Физматлит» 2002
- http://ru.wikipedia.org/wiki/%
D0%94%D0%B5_%D0%9A%D0%B0%D1% 81%D1%82%D0%B5%D0%BB%D1%8C%D0% B6%D0%BE,_%D0%9F%D0%BE%D0%BB% D1%8C - http://tinyurl.com/6hk5sao

- Методы построения организационно производственных структур
- Методы построения отчета о прибылях и убытках в российской и международной практике
- Методы построения рейтинговой оценки и раскрытие их на конкретных примерах
- Методы построения решений системы линейных неравенств
- Методы построения системы управления
- Методы построения типологических групп (основные понятия кластерного анализа)
- Методы построения эмпирического знания в теории и методике физического воспитания
- Методы получения фенола
- Методы получения фуллеренов
- Методы получения фуллеренов и углеродных нанотрубок
- Методы портфельного анализа
- Методы портфельного анализа в управлении организацией
- Методы постоянного улучшения продукции (молоко)
- Методы построения алгоритмов поиска дефектов