на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Разработка подсистемы визуализации моделей и их модификации
p align="left">Концепция графического интерфейса GDI+ несколько отличается от концепции «классического» графического интерфейса GDI, с которым привыкли иметь дело разработчики приложений Microsoft Windows.

Прежде всего, это касается класса Graphics, реализующего в себе как свойства контекста отображения, так и инструменты, предназначенные для рисования в этом контексте [4].

Для того чтобы приложение могло что-нибудь нарисовать в окне, оно должно, прежде всего, получить или создать для этого окна объект класса Graphics. Далее, пользуясь свойствами и методами этого объекта, приложение может рисовать в окне различные фигуры или текстовые строки.

3. ОБЗОР ЯЗЫКОВ ВЫСОКОГО УРОВНЯ

На сегодняшний день существуют множество языков программирование, но самые популярные из них это - С++, и С#. Рассмотрим их более детально.

3.1 Язык высокого уровня С++

Страуструп начал работать над «Си с классами» в 1979 году. Идея создания нового языка принадлежит Страуструпу. Он обнаружил, что язык моделирования Симула (Simula) имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно.

В то же время язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения. Страуструп начал работать в «Bell Labs» над задачами теории очередей (в приложении к моделированию телефонных вызовов). Попытки применения существующих в то время языков моделирования оказались неэффективными. Вспоминая опыт своей диссертации, Страуструп решил дополнить язык Си (преемник BCPL) возможностями, имеющимися в языке Симула. Язык Си, будучи базовым языком системы UNIX, на которой работали компьютеры «Bell» является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы с классами и объектами. В результате, практические задачи моделирования оказались доступными для решения как с точки зрения времени разработки (благодаря использованию Симула-подобных классов) так и с точки зрения времени вычислений (благодаря быстродействию Си). В начале в Си были добавлены классы (с инкапсуляцией), производные классы, строгая проверка типов, inline-функции и аргументы по умолчанию. Разрабатывая Си с классами (позднее С++), Страуструп также написал программу Cfront, транслятор, перерабатывающий исходный код Си с классами в исходный код простого Си. Новый язык, неожиданно для автора, приобрел большую популярность среди коллег и вскоре Страуструп уже не мог лично поддерживать его, отвечая на тысячи вопросов.

В 1983 г. произошло переименование языка из Си с классами в С++ по соображениям маркетинга. Кроме того, в него были добавлены новые возможности, такие как виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). Его первый коммерческий выпуск состоялся в октябре 1985 г.. В 1985 г. вышло первое издание «Языка программирования С++», обеспечивающее первое описание этого языка, что было чрезвычайно важно из-за отсутствия официального стандарта. В 1989 г. состоялся выход С++ версии 2.0. Его новые возможности включали множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищённые члены. В 1990 г. вышло «Комментированное справочное руководство по C++», положенное впоследствии в основу стандарта. Последние обновления включали шаблоны, исключения, пространства имён, новые способы приведения типов и булевский тип. Стандартная библиотека С++ также развивалась вместе с ним. Первым добавлением к стандартной библиотеке С++ стали потоки ввода/вывода, обеспечивающие средства для замены традиционных функций Си printf и scanf. Позднее самым значительным развитием стандартной библиотеки стало включение в неё Стандартной библиотеки шаблонов.

После многих лет работы совместный комитет ANSI-ISO стандартизировал С++ в 1998 г. (ISO/IEC 14882:1998). В течение нескольких лет после официального выхода стандарта комитет обрабатывал сообщения об ошибках и в итоге выпустил исправленную версию стандарта С++ в 2003 году.

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

- поддержка объектно-ориентированного программирования через классы;

- поддержка обобщённого программирования через шаблоны;

- дополнения к стандартной библиотеке;

- дополнительные типы данных;

- исключения;

- пространства имён;

- встраиваемые функции;

- перегрузка операторов;

- перегрузка имён функций;

- ссылки и операторы управления свободно распределяемой памятью.

3.2. Язык высокого уровня С#

C# - язык программирования, сочетающий объектно-ориентированные и аспектно-ориентированные концепции. Разработан в 1998--2001 годах группой инженеров под руководством Андерсa Хейлсбергa в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET. Компилятор с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств вроде Visual Studio.

C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к С++ и Java. Язык имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку операторов, указатели на функции-члены классов, атрибуты, события, свойства, исключения, комментарии в формате XML. Переняв многое от своих предшественников -- языков С++, Delphi, Модула и Smalltalk -- С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++) или вывода типов (реализовано в .NET Framework 3.0). C# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает FCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR.

Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем. (Однако эта закономерность будет нарушена с выходом C# 3.0, представляющим собой расширения языка, не опирающиеся на расширения платформы .NET.) CLR предоставляет C#, как и всем другим .NET-ориентированным языкам, многие возможности, которых лишены «классические» языки программирования. Например, сборка мусора не реализована в самом C#, а производится CLR для программ, написанных на C# точно так же, как это делается для программ на VB.NET, J# и др [4].

4 ПОСТРОЕНИЯ КРИВОЛИНЕЙНЫХ ПОВЕРХНОСТЕЙ

Существуют два метода построения криволинейных поверхностей: первый это - сплайн Безье, второй - канонические сплайны. Рассмотрим более детально способы построения каждого их них.

4.1 Сплайн Безье

Кривыме Безьем были разработаны в 60-х годах XX века независимо друг от друга Пьером Безье (Bezier) из автомобилестроительной компании «Рено» и Полем де Кастелье (de Casteljau) из компании «Ситроен», где применялись для проектирования кузовов автомобилей. Впервые кривые были представлены широкой публике в 1962 году французским инженером Пьером Безье, который, разработав их независимо от де Кастелье, использовал их для компьютерного проектирования автомобильных кузовов. Кривые были названы именем Безье, а именем де Кастелье назван разработанный им рекурсивный способ определения кривых (алгоритм де Кастелье). Впоследствии это открытие стало одним из важнейших инструментов систем автоматизированного проектирования и программ компьютерной графики [1].

Кривая Безье -- параметрическая кривая, задаваемая выражением

где -- функция компонент векторов опорных вершин, а - базисные функции кривой Безье, называемые также полиномами Бернштейна.

где n -- степень полинома, i -- порядковый номер опорной вершины.

Сплайны Безье бывают:

1) линейные кривые - при n = 1 кривая представляет собой отрезок прямой линии, опорные точки P0 и P1 определяют его начало и конец. Кривая задаётся уравнением:

2) квадратные кривые Безье (n = 2) задаётся 3-я опорными точками: P0, P1 и P2.

3) кубические кривые Безье (n = 3) описывается следующим уравнением:

Четыре опорные точки P0, P1, P2 и P3, заданные в 2-х или 3-мерном пространстве определяют форму кривой [2].

Рисунок 4.1 - Кубическая кривая Безье (n = 3)

Линия, берёт начало из точки P0 направляясь к P1 и заканчивается в точке P3 подходя к ней со стороны P2. То есть кривая не проходит через точки P1 и P2, они используются для указания её направления. Длина отрезка между P0 и P1 определяет, как скоро кривая повернёт к P3.

В матричной форме кубическая кривая Безье записывается следующим образом:

где называется базисной матрицей Безье:

Построение кривых.

1) Линейные кривые. Параметр t в функции, описывающей линейный случай кривой Безье, определяет, где именно на расстоянии от P0 до P1 находится B(t). Например, при t = 0,25 значение функции B(t) соответствует четверти расстояния между точками P0 и P1. Параметр t изменяется от 0 до 1, а B(t) описывает отрезок прямой между точками P0 и P1.

Рисунок 4.2 - Линейные кривые

2) Квадратные кривые. Для построения квадратных кривых Безье требуется выделение двух промежуточных точек Q0 и Q1 из условия, чтобы параметр t изменялся от 0 до 1:

Точка Q0 изменяется от P0 до P1 и описывает линейную кривую Безье.

Точка Q1 изменяется от P1 до P2 и также описывает линейную кривую Безье.

Точка B0 изменяется от Q0 до Q1 и описывает квадратную кривую Безье.

Рисунок 4.3 - Квадратные кривые

3) Кривые высших степеней. Для построения кривых высших порядков соответственно требуется и больше промежуточных точек. Для кубической кривой это промежуточные точки Q0, Q1 и Q2, описывающие линейные кривые, а также точки R0 и R1, которые описывают квадратные кривые:

Рисунок 4.4 - Кривые высших степеней

Для кривых четвертой степени это будут точки Q0, Q1, Q2 и Q3, описывающие линейные кривые, R0, R1 и R2, которые описывают квадратные кривые, а также точки S0 и S1, описывающие кубические кривые Безье:

Рисунок 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.

Страницы: 1, 2, 3



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.