Методы построения кривых Безье

Автор работы: Пользователь скрыл имя, 11 Ноября 2013 в 06:15, курсовая работа

Описание работы

Кривые Безье были разработаны независимо друг от друга двумя разными французскими учеными: Пьером Безье и Полем де Кастелье в 60-х годах прошлого века. Оба ученых производили исследования в этом направлении в целях нахождения способа компьютерного проектирования автомобильных кузовов, так как оба на момент открытия работали в разных автомобильных компаниях (Пьер – в «Рено», Поль – в «Ситроен»).

Содержание работы

Введение 4
Принцип построения кривых Безье 5
Основные методы построения Кривых Безье 6
Методы построения нерациональных кривых Безье 6
С использованием полиномов Бернштейна 6
Алгоритм Де Кастелье 8
Построение рациональных кривых Безье 9
Построение рациональной и нерациональной кривых Безье в системе компьютерной алгебры Wolfram Mathematica 8.0 12
Заключение 17
Список источников 18

Файлы: 1 файл

КР.doc

— 998.00 Кб (Скачать файл)

Manipulate[vesa={ves0,ves1,ves2,ves3,ves4,ves5,ves6,ves7};

Теперь, с помощью функции  Show[], добавим, непосредственно, график, и начнем его заполнять. В первую очередь, для наглядности, подпишем номера опорных точек. Для этого вызовем функцию Graphics[], которая используется в Mathematica для вывода различной графической информации, с опциями Red и Text[], определяющих цвет и тип выводимой графической информации, соответственно.

Отдельно остановимся на содержимом опции Text[]. Для того, чтобы для каждой точки вывести соответствующий ей номер, используем индексы элементов массива «optochki0», а также, чтобы не перекрыть точку ее номером, немного увеличим координаты начала каждой подписи. Для реализации этого используем четыре функции, две из которых заданы неявно. Функция Range[n] генерирует последовательность индексов, подписываемых точек (1…n). Неявно заданная в виде символа «#» функция Slot[], подставляет вместо символа «#» элементы, следующие после «&». Также неявно заданная, функция Map[] (/@), обеспечивает последовательную выборку индексов из функции Range[n] для функции Slot[]. И наконец, функция ToString[], преобразующая индексы из числового вида в строковый, для вывода, с помощью функции Text[] перед преобразованием индекс уменьшается на один, так как нумерация точек начинается с нуля. Все вместе это выглядит так:

Graphics[{Red,Text[ToString[#-1],optochki[[#]]+{1.5,0.2}]&/@Range[n]}]

Затем, продолжая заполнять график, добавленный функцией Show[], построим, непосредственно, сами кривые. Выведем их на экран, в качестве параметрических функций, зависящих от параметра , с помощью ParametricPlot[]:

ParametricPlot[{rat[optochki,vesa][t],nerat[optochki0][t]},{t,0,1}]

Использованные функции rat[] и nerat[] я инициализирую в конце программы, сейчас скажу лишь, что nerat[] – это нерациональная кривая Безье, а rat[], соответственно, рациональная.

Далее укажем некоторые параметры  графика, с помощью соответствующих опций:

 Axes®True,ImageSize®850,PlotRange®{{-45,45},{-20,20}}

Здесь опция «Axes®True» отображает оси координат, а «PlotRange» устанавливает их диапазон. «ImageSize®850» указывает размер графика.

В следующих девяти опциях задаем элементы контроля. «Locator» создает интерактивные, перетаскиваемые по графику, опорные точки, как для начальных координат «optochki0», так и для впоследствии измененных «optochki»:

{{optochki,optochki0},Locator}

Последующие опции элементов контроля типа «ползунки» указывают начальное значение и диапазон изменения веса для каждой опорной точки:

{{ves0,1},1,4},{{ves1,1},1,4},{{ves2,1},1,4},{{ves3,1},1,4},{{ves4,1},1,4},{{ves5,1},1,4},{{ves6,1},1,4},{{ves7,1},1,4}

Наконец, инициализируем, уже использованные в программе функции кривых rat[] и nerat[], с помощью встроенных функций построения кривых Безье «BezierFunction[]»:

Initialization¦(nerat[LS_]:=BezierFunction[optochki];

Table[{vesa[[i]],1},{i,1,n}];

rat[optochki_, vesa_]:=BezierFunction[optochki vesa];)

Промежуточная функция «Table» формирует двумерный массив из n элементов, первый параметр которых представляет собой элемент вектора весов, а второй – единицу. Это необходимо так как, функция «BezierFunction» строит кривую по координатам опорных точек, поэтому для рациональной кривой нужно добавлять веса точек в качестве множителя к опорным точкам.

Код законченной программы выглядит так:

DynamicModule[

{pts0,w0,w1,w2,w3,w4,w5,w6,w7,ww,n},

pts0={{-10.0,0.0},{-3.0,7.0},{1.1,-7.2},{4.3,-8.5},{-16.0,12.0},{-2.1,1.7},{-8.2,1.4},{12.2,5.4}};

n=Length[pts0];

Manipulate[ww={w0,w1,w2,w3,w4,w5,w6,w7};

  Show[{Graphics[{Red,Text[ToString[#-1],pts[[#]]+{1.2,0.2}]&/@Range[n]}],ParametricPlot[{fBez[pts,ww][t],f0Bez[pts0][t]},{t,0,1}]},Axes®True,PlotRange®{{-30,15},{-10,15}}],{{pts,pts0},Locator},{{w0,1},1,100},{{w1,1},1,100},{{w2,1},1,100},{{w3,1},1,100},{{w4,1},1,100},{{w5,1},1,100},{{w6,1},1,100},{{w7,1},1,100},Initialization¦(f0Bez[LS_]:=BezierFunction[pts];

    Table[{ww[[i]],1},{i,1,n}];

    fBez[pts_, ww_]:=BezierFunction[pts*ww];)]]

В качестве результата выполнения выводится график двух кривых с общими опорными точками, положение которых можно менять, перетаскиванием мышкой, меняя, соответственно форму кривых. Слева от графика выводятся «ползунки» изменения веса каждой из опорных точек, который влияет на форму лишь рациональной (синей) кривой (Рис 4.). Кривые, после запуска программы  совпадают, изменяя вес опорных точек для рациональной кривой можно добиться их расхождения и получить возможность сравнить свойства рациональной и нерациональной кривых Безье наглядно (Рис 5).

 

 


 

 

 

Заключение

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

При выполнении практической части, я  открыл новые, для меня, возможности  системы компьютерной алгебры Wolfram Mathematica 8.0, о которых даже не подозревал. Я научился создавать интерактивный интерфейс пользователя и узнал о множестве новых функций и их структуре.  Но главное, я узнал о роли кривых Безье в современном компьютерном проектировании, о том, насколько иногда важна форма кривой в проекте детали, для ее физических и эксплуатационных свойств.

 

Список источников

    1. 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
    2. О. А. Графский «Моделирование сплайнов» Хабаровск «ЦДО» 2010
    3. http://www.intuit.ru/department/mathematics/compgeom/5/5.html
    4. 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
    5. Н. Н. Голованов «Геометрическое моделирование» Москва «Физматлит» 2002
    6. 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
    7. http://tinyurl.com/6hk5sao

Информация о работе Методы построения кривых Безье