Смекни!
smekni.com

Разработка подсистемы визуализации моделей и их модификации (стр. 5 из 5)

Рисунок 4.5 - Кривые четвертой степени

Благодаря простоте задания и возможности удобно манипулировать формой, кривые Безье нашли широкое применение в компьютерной графике для моделирования гладких линий. Поскольку кривая полностью определяется своей выпуклой оболочкой из опорных точек, последние могут быть отображены и использоваться для наглядного управления формой линии. Кроме того, аффинные преобразования кривой (перенос, масштабирование, вращение) также легко могут быть осуществлены путём применения трансформаций к опорным точкам. Наличие выпуклой оболочки значительно облегчает задачу о точках пересечения кривых Безье: если не пересекаются выпуклые оболочки, то не пересекаются и сами кривые .

Наибольшее значение имеют кубические кривые Безье [1]. Кривые высших степеней при обработке требуют большего объёма вычислений и для практических целей используются реже. Для построения сложных по форме линий отдельные кривые Безье могут быть последовательно соединены друг с другом в сплайн Безье. Для того чтобы обеспечить гладкость линии в месте соединения двух кривых, смежные опорные точки обеих кривых должны лежать на одной линии [4]. Существует три программного метода построения:

a) public void DrawBezier(Pen, Point, Point, Point, Point);

b) public void DrawBezier(Pen, PointF, PointF, PointF, PointF);

c) public void DrawBezier(Pen, float, float, float, float, float, float, float, float);

Рисунок 4.6 - Программная реализация

4.2 Кубические сплайны

В отличие от только что описанных кривых линий Безье, линии кубического сплайна (cardinal spline) проходит через все заданные точки [3]. Построение осуществляется по шагам приведенным ниже: запишем для удобства Si(x) в виде:

тогда

.
Для выполнения условия непрерывности

Отсюда получаем формулы для вычисления коэффициентов сплайна:

Рисунок 4.1 - Пример кубического сплайна

Если учесть, что c0 = cn = 0, то вычисление с можно провести с помощью метода прогонки для трехдиагональной матрицы. Существует два программного метода построения кубических сплайнов: метод DrawCurve и DrawClosedCurve [3]. Первый из этих методов рисует незамкнутую кривую линию (открытый сплайн), а второй — замкнутую (закрытый сплайн).

a) public void DrawCurve(Pen, Point[]);

b) public void DrawCurve(Pen, PointF[]);

Рисунок 4.2 - Пример закрытого сплайна


ВЫВОДЫ

В результате выполнения НИРС, были изучены: возможность создание универсального хранилища данных, принципы графического построения объектов рисования, способы реализации криволинейных поверхностей, а также сделан ряд выводов.

1) Что касается выбора библиотеки визуализации, то можно остановиться на GDI+, поскольку две остальные предназначены для выполнения куда белее сложных задач, к примеру, написания компьютерных игр, или каких либо других сложных графических комплексов. Ещё одним аргументом GDI+, является, проста в использовании, и реализации;

2) Проанализировав языки высоко уровня можно сказать что язык С# наиболее подходит для выполнения нашей задачи, так как он обладает высоким быстродействием, простотой написания кода, возможностью подключения всех трёх библиотек визуализации;

3) C# решает проблему построения криволинейных поверхностей, используя два вида сплайнов: Безье и кубические;

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


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Лебедев С. А., Мельников В. А. Общее описание методов раскроя. М., 1999;

2. Глушкова В.М. Кройка и Шитьё. М., 1995;

3. Юрьев А.А. Системы визуального моделирования. Д.,2005

4. Шрус О.В. Калмыга В.Г. Основы языков программирования. М., 2002

5. Краинберг А. Управляемый DirectX, 856с., том 2.

6. SiliconGraphics Help 3.1 - “OpenGL”. 1250c.