Разработка программного модуля визулизации орбит ИСЗ с помощью библиотеки OpenSceneGraph

Библиотека OpenSceneGraph: операции над графом сцены и пересылка. Визуализация базовых фигур. Математические расчеты элементов орбиты спутника. Создание сферы и наложение текстуры Земли. Создание основного класса программы. Режим слежения за спутником.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 07.08.2018
Размер файла 3,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Разработка программного модуля визулизации орбит ИСЗ с помощью библиотеки OpenSceneGraph

Оглавление

  • Введение
    • 1 Постановка задачи и теоретическое обоснование работы
    • 1.1 Постановка задачи работы
    • 1.2 Язык программирования C++
  • 2 Графическая библиотека OpenSceneGraph
    • 2.1 Основные черты библиотеки OpenSceneGraph
    • 2.2 Граф сцены
    • 2.3 Операции над графом сцены и пересылка
    • 2.4 Обход графа сцены
    • 2.5 Компоненты библиотеки OpenSceneGraph
    • 2.6 Машина состояний
    • 2.7 Атрибуты и режимы
    • 2.8 Класс osg::Camera
    • 2.9 Классы Geode и Drawable
    • 2.10 Визуализация базовых фигур
  • 3 Разработка программного модуля
    • 3.1 Математические расчеты элементов орбиты спутника
    • 3.2 Создание сферы и наложение текстуры Земли
    • 3.3 Создание основного класса программы
    • 3.4 Модель спутника
    • 3.5 Траектория движения спутника и отображение орбиты
    • 3.6 Вращение Земли
    • 3.7 Режим слежения за спутником
    • 3.8 Изменение параметров орбиты с помощью клавиш управления
    • 3.9 Отображение текущих параметров орбиты
  • 4 Результаты работы программы
    • 4.1 Изменение параметров орбиты и изменение ракурса
    • 4.2 Режим слежения за спутником с отображенной и скрытой орбитой
  • Заключение
    • Список использованных источников
  • Приложение

Введение

Искусственный спутник Земли - космический летательный аппарат, вращающийся вокруг Земли по геоцентрической орбите. Искусственные спутники стали неотъемлемой частью современного мира. Спутники создаются для решения различных задач, таких как передача данных с целью прогнозирования погоды, наблюдение климата Земли, разведка, связь, проведение научных экспериментов, навигация и так далее. Существует программное обеспечение, которое работает с данными со спутников, например, ПО, работающее с навигационными спутниками, которое на основе полученных данных позволяет строить заданный маршрут и отображать расположение транспортного средства на карте. Также, существует программное обеспечение, позволяющее наблюдать за положением искусственного спутника Земли в режиме реального времени, такое например, как интернет-ресурс stuffin.space или heavens-above.com.

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

Таким образом, цель дипломной работы заключается в том, чтобы исследовать возможность использования языка C++ в сочетании с графической библиотекой OpenSceneGraph для создания прототипа приложения, которое будет отображать траекторию движения спутника вокруг Земли в трехмерном пространстве, а также предоставлять пользователю функционал для изменения начальных данных спутника, таких как высота запуска и начальная скорость запуска, чтобы перестраивать траекторию движения спутника.

Объектном дипломной работы являются методы графического отображения в трёхмерном пространстве данных, предметом работы - программное обеспечение, реализующее эти методы на заданном языке программирования.

Теоретические и практические вопросы, лежащие в основе дипломной работы, рассмотрены в большом количестве источников различного характера. К таким источникам относятся учебные и учебно-методические пособия, специальные издания и электронные источники информации. Язык программирования C++ рассматривается в книгах С. Мейерса и Б. Страуструпа, а также в интернет-источниках [3] и [5]. Вопросы, связанные с компьютерной графикой и библиотекой OpenSceneGraph изложены в работах Р. Вонга и К. Киана [13, 14], а также в источниках [1] и [8]. Способы вычисления элементов орбиты описывается в работе М. Ф. Субботина [12] и в источниках [2], [4], [5], [9] и [10]. Пояснительная записка к дипломной работе состоит из введения, четырех разделов, заключения, списка использованных источников и приложений. В первом разделе выполняется постановка задачи, формулируются требования к создаваемому программному обеспечению, описывается язык программирования C++, возможности его применения, его основные особенности и недостатки.

Во втором разделе описывается графическая библиотека OpenSceneGraph версии 3.0 и принципы ее применения.

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

В четвертом разделе приведены результаты работы созданной программы. Заключение содержит обобщенные результаты дипломной работы, выводы по работе и рекомендации по использованию ее результатов.

1. Постановка задачи и теоретическое обоснование работы

1.1 Постановка задачи работы

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

Для запуска спутника требуется рассчитать траекторию его движения по орбите. С развитием информационных технологий появилась возможность не только автоматического расчета элементов орбиты, но и ее визуализации в трехмерном пространстве, а также визуализация движения спутника по заданной орбите и примерное местонахождение Спутника относительно Земли. Для решения этих задач можно использовать язык программирования C++, так как он является мощным средством разработки программных приложений, в сочетании с какой-либо программной системой или библиотекой отображения компьютерной графики.

Таким образом, задача дипломной работы заключается в создании прототипа программного обеспечения на языке C++, позволяющего графически отображать орбиту спутника, его движение по орбите, и позволяющего взглянуть на Земной шар из постоянно меняющихся координат спутника.

Требуется создать удобный для пользователя интерфейс и возможность управления обзором отображаемых данных, в том числе с помощью «Мыши». Также необходимо обеспечить пользователя инструментами для редактирования элементов орбиты спутника, например, с помощью определенных клавиш. Так как значение элементов орбиты будет редактироваться пользователем, требуется отображать текущие данные орбиты искусственного спутника Земли.

1.2 Язык программирования C++

1.2.1 Основные особенности языка

C++ - язык программирования общего назначения с уклоном в сторону системного программирования [11]. Данный язык поддерживает такие парадигмы программирования, как процедурное и модульное программирование, абстракция данных, объектно-ориентированное программирования, обобщенное программирование.

На C++ разрабатывается программное обеспечение для многих областей. С его помощью создаются различные прикладные приложения, видеоигры, операционные системы, драйвера и т.д. Существует несколько реализаций языка программирования C++ -- как бесплатных, так и коммерческих. Их производят проекты: GNU, Microsoft и Embarcadero (Borland). Проект GNU -- проект разработки свободного программного обеспечения (СПО).

Язык C++ создавался таким образом, чтобы он был совместим с языком C. Более того, С является его подмножеством [11]. Это выразилось в сохранении синтаксиса C. Однако, в отличии от него, в C++ большое внимание уделено объектно-ориентированному и обобщенному программированию. C++ не включает в себя высокоуровневые типы данных и операции, однако, если пользователю понадобится такой тип, он может создать его при помощи средств языка.

В этом языке реализована защита от случайной порчи данных с помощью сокрытия данных и проверки типов, которые основываются на анализе программы во время компиляции. Эти инструменты свободно используются, не оказывая влияние на затрачиваемые ресурсы и время выполнения программы.

1.2.2 Достоинства языка программирования C++

C++ -- чрезвычайно мощный язык, содержащий средства создания эффективных программ практически любого назначения, от низкоуровневых утилит и драйверов до сложных программных комплексов самого различного назначения. В частности, поддерживаются различные стили и технологии программирования, включая традиционное директивное программирование, ООП, обобщённое программирование, метапрограммирование (шаблоны, макросы).

Предсказуемое выполнение программ является важным достоинством для построения систем реального времени. Весь код, неявно генерируемый компилятором для реализации языковых возможностей (например, при преобразовании переменной к другому типу), определён в стандарте. Также строго определены места программы, в которых этот код выполняется. Это даёт возможность замерять или рассчитывать время реакции программы на внешнее событие.

Автоматический вызов деструкторов объектов при их уничтожении, причём в порядке, обратном вызову конструкторов [3]. Это упрощает (достаточно объявить переменную) и делает более надёжным освобождение ресурсов (память, файлы, семафоры и т. п.), а также позволяет гарантированно выполнять переходы состояний программы, не обязательно связанные с освобождением ресурсов (например, запись в журнал).

Пользовательские функции-операторы позволяют кратко и ёмко записывать выражения над пользовательскими типами в естественной алгебраической форме.

Язык поддерживает понятия физической (const) и логической (mutable) константности. Это делает программу надёжнее, так как позволяет компилятору, например, диагностировать ошибочные попытки изменения значения переменной. Объявление константности даёт программисту, читающему текст программы дополнительное представление о правильном использовании классов и функций, а также может являться подсказкой для оптимизации. Перегрузка функций-членов по признаку константности позволяет определять изнутри объекта цели вызова метода (константный для чтения, неконстантный для изменения). Объявление mutable позволяет сохранять логическую константность при использовании кэшей и ленивых вычислений.

Используя шаблоны, возможно создавать обобщённые контейнеры и алгоритмы для разных типов данных, а также специализировать и вычислять на этапе компиляции.

Возможность имитации расширения языка для поддержки парадигм, которые не поддерживаются компиляторами напрямую. Например, библиотека Boost.Bind позволяет связывать аргументы функций.

Возможность создания встроенных предметно-ориентированных языков программирования. Такой подход использует, например библиотека Boost.Spirit, позволяющая задавать EBNF-грамматику парсеров прямо в коде C++.

Используя шаблоны и множественное наследование можно имитировать классы-примеси и комбинаторную параметризацию библиотек. Такой подход применён в библиотеке Loki, класс SmartPrt которой позволяет, управляя всего несколькими параметрами времени компиляции, сгенерировать около 300 видов «умных указателей» для управления ресурсами.

Кроссплатформенность: стандарт языка накладывает минимальные требования на ЭВМ для запуска скомпилированных программ. Для определения реальных свойств системы выполнения в стандартной библиотеке присутствуют соответствующие возможности (например, std::numeric_limits <T>). Доступны компиляторы для большого количества платформ, на языке C++ разрабатывают программы для самых различных платформ и систем.

Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы [6]. Ни одна из языковых возможностей, приводящая к дополнительным накладным расходам, не является обязательной для использования -- при необходимости язык позволяет обеспечить максимальную эффективность программы.

Имеется возможность работы на низком уровне с памятью, адресами.

Высокая совместимость с языком Си, позволяющая использовать весь существующий Си-код (код на Си может быть с минимальными переделками скомпилирован компилятором C++; библиотеки, написанные на Си, обычно могут быть вызваны из C++ непосредственно без каких-либо дополнительных затрат, в том числе и на уровне функций обратного вызова, позволяя библиотекам, написанным на Си, вызывать код, написанный на С++).

1.2.3 Недостатки языка C++

Отчасти недостатки C++ унаследованы от языка-предка -- Си, -- и вызваны изначально заданным требованием возможно большей совместимости с Си. Это такие недостатки, как синтаксис, провоцирующий ошибки:

Операция присваивания обозначается как «=», а операция сравнения как «==». Их легко спутать, при этом операция присваивания возвращает значение, поэтому присваивание на месте выражения является синтаксически корректным, а в конструкциях цикла и ветвления появление числа на месте логического значения также допустимо, так что ошибочная конструкция оказывается синтаксически правильной. Типичный пример подобной ошибки:

if (x=0) {операторы}

Здесь в условном операторе по ошибке написано присваивание вместо сравнения. В результате, вместо того, чтобы сравнить текущее значение x с нулём, программа присвоит x нулевое значение, а потом интерпретирует его как значение условия в операторе if. Так как нуль соответствует логическому значению «ложь», блок операторов в условной конструкции не выполнится никогда. Ошибки такого рода трудно выявлять, но во многих современных компиляторах предлагается диагностика некоторых подобных конструкций [3].

Операции присваивания (=), инкрементации (++), декрементации (--) и другие возвращают значение. В сочетании с обилием операций это позволяет, хотя и не обязывает, создавать трудночитаемые выражения. Наличие этих операций в Си было вызвано желанием получить инструмент ручной оптимизации кода, но в настоящее время оптимизирующие компиляторы обычно генерируют оптимальный код и на традиционных выражениях. С другой стороны, один из основных принципов языков Си и C++ -- позволять программисту писать в любом стиле, а не навязывать «хороший» стиль.

Макросы (#define) являются мощным, но опасным средством. Они сохранены в C++ несмотря на то, что необходимость в них, благодаря шаблонам и встроенным функциям, не так уж велика. В унаследованных стандартных Си-библиотеках много потенциально опасных макросов.

Некоторые преобразования типов неинтуитивны. В частности, операция над беззнаковым и знаковым числами выдаёт беззнаковый результат.

C++ позволяет пропускать break в ветви оператора switch с целью последовательного выполнения нескольких ветвей. Такой же подход принят в языке Java. Есть мнение, что это затрудняет понимание кода. Например, в языке C# необходимо всегда писать либо break, либо использовать goto case N для явного указания порядка выполнения.

Препроцессор, унаследованный от Си, очень примитивен. Это приводит с одной стороны к тому, что с его помощью нельзя (или тяжело) осуществлять некоторые задачи метапрограммирования, а с другой, вследствие своей примитивности, он часто приводит к ошибкам и требует много действий по обходу потенциальных проблем. Некоторые языки программирования (например, Scheme и Nemerle) имеют намного более мощные и более безопасные системы метапрограммирования (также называемые макросами, но мало напоминающие макросы Си/C++).

Плохая поддержка модульности (по сути, в классическом Си модульность на уровне языка отсутствует, её обеспечение переложено на компоновщик). Подключение интерфейса внешнего модуля через препроцессорную вставку заголовочного файла (#include) серьёзно замедляет компиляцию при подключении большого количества модулей (потому что результирующий файл, который обрабатывается компилятором, оказывается очень велик). Эта схема без изменений скопирована в C++. Для устранения этого недостатка, многие компиляторы реализуют механизм прекомпиляции заголовочных файлов (англ. Precompiled header).

К собственным недостаткам C++ можно отнести:

Сложность и избыточность, из-за которых C++ трудно изучать, а построение компилятора сопряжено с большим количеством проблем. В частности:

Многие конструкции С++ позволяют делать то же самое, что и конструкции Си, также присутствующие в С++. Это иногда сбивает с толку новичков. Например, приведение типов при помощи dynamic_cast позволяет привести указатель или ссылку строго в пределах иерархии классов. Это делает код более надёжным, декларативным и позволяет находить приведения в пределах иерархии при помощи инструментов типа grep. Однако вследствие требования высокой степени совместимости с Си старое приведение типов всё ещё поддерживается.

Иногда шаблоны приводят к порождению кода очень большого объёма. Для снижения размера машинного кода можно специальным образом подготавливать исходный код. Другим решением является стандартизованная ещё в 1998 году возможность экспорта шаблонов. Некоторые авторы считают, что её трудно реализовать и поэтому она доступна не во всех компиляторах. «Раздувание» машинного кода вследствие использования шаблонов часто преувеличивается, и современные компиляторы во многих случаях успешно устраняют это явление.

Метапрограммирование на основе шаблонов C++ сложно и при этом ограничено в возможностях. Оно состоит в реализации средствами шаблонов C++ интерпретатора примитивного функционального языка программирования, выполняющегося во время компиляции. Сама по себе данная возможность весьма привлекательна, но такой код весьма трудно воспринимать и отлаживать. Менее распространённые языки Lisp/Scheme, Nemerle имеют более мощные и одновременно более простые для восприятия подсистемы метапрограммирования. Кроме того, в языке D реализована сравнимая по мощности, но значительно более простая в применении подсистема шаблонного метапрограммирования.

Явная поддержка функционального программирования присутствует только в будущем стандарте c++0x. Данный пробел устраняется различными библиотеками (Loki, Boost), использующими средства метапрограммирования для расширения языка функциональными конструкциями (например, поддержкой лямбд/анонимных методов), но качество подобных решений значительно уступает качеству встроенных в функциональные языки решений. Такие возможности функциональных языков, как сопоставление с образцом, вообще крайне сложно эмулировать средствами метапрограммирования.

Некоторые считают недостатком языка C++ отсутствие встроенной системы сборки мусора. С другой стороны, средства C++ позволяют реализовать сборку мусора на уровне библиотеки Противники сборки мусора полагают, что RAII является более достойной альтернативой. С++ позволяет пользователю самому выбирать стратегию управления ресурсами.

1.2.4 Новые возможности по сравнению с C

Нововведениями C++ в сравнении с Си являются:

· поддержка объектно-ориентированного программирования;

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

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

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

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

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

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

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

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

· дополнения к стандартной библиотеке.

Язык C++ во многом является надмножеством Си. Новые возможности C++ включают объявления в виде выражений, преобразования типов в виде функций, операторы new и delete, тип bool, ссылки, расширенное понятие константности, подставляемые функции, аргументы по умолчанию, переопределения, пространства имён, классы (включая и все связанные с классами возможности, такие как наследование, функции-члены, виртуальные функции, абстрактные классы и конструкторы), переопределения операторов, шаблоны, оператор ::, обработку исключений, динамическую идентификацию и многое другое. Язык C++ также во многих случаях строже относится к проверке типов, чем Си [11].

В C++ появились комментарии в виде двойной косой черты (//), которые были в предшественнике Си -- языке BCPL.

Некоторые особенности C++ позднее были перенесены в Си, например ключевые слова const и inline, объявления в циклах for и комментарии в стиле C++ (//). В более поздних реализациях Си также были представлены возможности, которых нет в C++, например макросы vararg и улучшенная работа с массивами-параметрами.

1.2.5 Объектно-ориентированное программирование (ООП) в C++

Объектно-ориентированное программирование (ООП) -- подход к программированию, при котором основными концепциями являются понятия объектов и классов [7].

Класс -- это определяемый разработчиком тип данных. Тип данных характеризуется:

- способом хранения и представления этих данных;

- назначением этих данных (профилем их использование);

- набором действий, которые над этими данными могут производиться.

Например, тип int предназначен для хранения целых чисел и подразумевает ряд операций над ними (+,-,*,/,% и пр.).

Класс -- это тип, описывающий устройство объектов, их поведение и способ представления.

Объект -- сущность обладающая определённым поведением и способом представления, т. е. относящееся к классу (говорят, что объект -- это экземпляр класса, если он к нему относится).

Класс можно сравнить с чертежом, согласно которому создаются объекты. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области решаемой задачи.

Описание класса начинается со служебного слова class, вслед за которым указывается имя класса. Затем в блоке следует описание класса и после закрывающей скобки блока ставится точка с запятой.

Описание класса состоит из полей и методов.

Поля (или свойства, в рамках C++ это можно считать синонимом) описывают то, какие данные смогут хранить экземпляры класса (т.е. объекты). Конкретные значения сохраняются уже внутри объектов. Поля объявляются в теле класса.

К полям внутри класса можно обращаться непосредственно по именам полей.

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

Методы объявляются в теле класса. Описываться могут там же, но могут и за пределами класса (внутри класса в таком случае достаточно представить прототип метода, а за пределами класса определять метод поставив перед его именем -- имя класса и оператор ::).

Методы и поля входящие в состав класса называются членами класса. При этом методы часто называют функциями-членами класса.

Пример:

class Complex {

double img;

double real;

};

В примере описан класс Complex с двумя полями img и real.

1.2.6 Абстракция данных

Абстракция данных -- это выделение существенных характеристик объекта, которые отличают его от прочих объектов, четко определяя его границы [7].

Абстракция данных в ООП предусматривает выделение характеристик, существенных в рамках решаемой задачи и рассматриваемой предметной области.

Например, создавая программу для автоматизации работы склада, важно учитывать вес контейнера, размер контейнера, его положение на складе, но совсем не важен цвет контейнера.

Вес, размер и положение -- это поля будущего объекта-контейнера.

Методы, которые к этому объекту смогут применяться возможны такие: создать в программе новый объект-контейнер, переместить объект на указанную позицию, удалить объект со склада, пометив занятое им место как свободное.

1.2.7 Ключевые черты ООП

Инкапсуляция -- это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик -- пользователь класса должен видеть и использовать только интерфейсную часть класса (т. е. список декларируемых свойств и методов класса) и не вникать в его внутреннюю реализацию [7]. Поэтому данные принято инкапсулировать в классе таким образом, чтобы доступ к ним по чтению или записи осуществлялся не напрямую, а с помощью методов. Принцип инкапсуляции (теоретически) позволяет минимизировать число связей между классами и, соответственно, упростить независимую реализацию и модификацию классов.

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

Полиморфизм -- это явление, при котором функции (методу) с одним и тем же именем соответствует разный программный код (полиморфный код) в зависимости от того, в каком контексте он вызывается (объектами какого класса или с какими параметрами).

1.2.8 Уровни доступа к членам класса

По уровню доступа все члены класса делятся на открытые (public), закрытые (private) и защищённые (protected).

Перед объявлением членов внутри класса ставятся соответствующие ключевые слова. Если такое слово не поставлено, то считается, что член объявлен с уровнем private. В примере выше класса Complex, соответственно, оба поля имеют уровень доступа private.

Члены объявленные как private доступны только внутри класса.

Члены объявленные как protected доступны внутри класса и внутри всех его потомков.

Члены объявленные как public доступны как внутри, так вне класса (в том числе в потомках).

Методы объявленные в открытой части класса называются его интерфейсом

Пример объявления различных уровней доступа:

class Complex {

private: // Закрытая часть класса, её элементы доступны только внутри класса

double img;

public: // Открытая часть класса, её элементы доступны везде

double real;

double getImg() { // Через этот метод мы сможем получить значение закрытого поля

return img; // Поле закрытое, но метод открытый

};

};

Все методы класса, находящиеся в его открытой части (с уровнем доступа public) называют интерфейсом класса

Интерфейс предназначен для взаимодействия класса с остальной программой. Зная методы интерфейса и их назначение можно использовать класс, не вникая в его внутреннее устройство. Соответственно, интерфейс реализует принцип инкапсуляции.

1.2.9 Конструктор и деструктор

При создании объектов одной из наиболее широко используемых операций, является инициализация элементов данных объекта. Чтобы упростить процесс инициализации элементов данных класса, C++ использует специальную функцию, называемую конструктором, которая запускается для каждого создаваемого вами объекта. Также C++ обеспечивает функцию, называемую деструктором, которая запускается при уничтожении объекта.
Конструктор представляет собой метод класса, который облегчает вашим программам инициализацию полей при создании объекта класса.

Конструктор имеет такое же имя, как и сам класс.

Конструктор не имеет возвращаемого значения (по сути, результатом его работы является ссылка на созданный объект).

Каждый раз, когда программа создает объект, C++ вызывает конструктор класса, если подходящий (с соответствующими параметрами) конструктор существует.

Конструкторы относят к интерфейсу класса, чтобы с их помощью можно было создавать объекты данного класса из внешней части программы [7].

Конструктор по умолчанию -- это конструктор без параметров. Если он не задан явно и при этом не создано других конструкторов с параметрами, то конструктор по умолчанию создастся автоматически. При этом все свойства нового объекта не будут никак проинициализрованы (получат «мусорные» значения из памяти).

Часто при создании нового объекта бывает удобным инициализировать его поля теми же значениями, что уже имеются у какого-то существующего объекта того же типа. Проще говоря, создавая новый объект порой удобно создать его как копию уже существующего.

Конструктор, который в качестве аргумента принимает другой объект того же типа -- называется копирующим конструктором [7].

Обычно аргумент копирующего конструктора объявляется как ссылка на константу, чтобы копия никак не влияла на оригинал.

Копирующий конструктор создаётся по умолчанию, если не задан явно. В поля нового объекта он копирует значения соответствующих полей объекта-аргумента.

В некоторых случаях это приводит к серьезным проблемам. Например, если объект-аргумент имеет поля, хранимые в динамической памяти, то в создаваемый объект будут скопированы адреса динамической памяти, и изменение полей нового объекта, повлечёт аналогичные изменения в исходном объекте (по сути два объекта будут хранить в своих полях ссылки на одну и ту же область динамической памяти).

После того, как вы по ходу программы убирается необходимость пользоваться некоторым объектом, для него автоматически вызывается специальный метод-деструктор, если он описан в классе.

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

Деструктор имеет такое же имя, как и класс, но с символом тильды (~) в качестве префикса. Деструктор не имеет возвращаемого значения и не имеет аргументов. Деструктор в классе всегда один (его нельзя перегружать). По умолчанию деструктор не создаётся, если он требуется, то его надо описывать явно.

1.2.10 Наследование

Когда объявляется класс-наследник, то сразу после его имени ставится двоеточие и указывается уровень (или способ) наследования (public, private, protected), а затем имя класса родителя [11]. Уже потом открывается блок с описанием класс-наследника.

Те члены, что в родителе были protected и public, становятся private в потомке.

Те члены, что в родители были protected и public становятся protected в потомке. Такой вариант используется редко.

Те члены, что в родители были protected и public, остаются, соответственно, protected и public в наследнике, сохраняя свой уровень доступа.

Если уровень явно не указан, то происходит private-наследование.

Можно говорить о том, что public-наследование -- это наследование интерфейса, а private-наследование -- это наследование реализации (т.е. все элементы наследуются, но становятся закрытыми от доступа извне).

1.2.11 Статические члены класса

Члены класса, объявленные с модификатором доступа static, называются статическими членами класса. Статические поля и методы доступны без создания объекта данного класса.

Доступ к статическому элементу осуществляется с использованием оператора принадлежности :: , а не через имя экземпляра класса с точкой.

Статические методы могут вызывать и использовать только другие статические методы и статические переменные. Из статического метода нельзя выполнять вызов не статического метода класса.

Статическую переменную можно рассматривать как аналог глобальной переменной, которая связана с конкретным классом.

Часто статические переменные называют переменными класса, а «не статические» переменные -- переменными экземпляра. Для статических переменных могут использоваться указатели.

1.2.12 Указатель this

Указатель this -- это константный указатель на текущий объект (т. е. на объект, к которому применяется вызываемый метод). Этот указатель существует всюду внутри класса, его не надо как-то явно объявлять, к нему можно обращаться внутри любого метода класса.

Например, в классе есть поле с именем f и есть метод, который к этому свойству должен обращаться, но в котором имеется локальная переменная с тем же именем f. Указатель this поможет одновременно использовать поле и локальную переменную: через указатель поле будет доступно как this->f.

1.2.13 Перегрузка операторов

В С++ можно создавать методы со специальными именами вида: operator *, где * -- это один из существующих операторов языка (например, +, -, /, *, = и т.д.).

При создании такого метода, говорят, что оператор * был перегружен, т.е. теперь его можно использовать для взаимодействия с объектами создаваемого класса. Перегружать можно многие, но не любые операторы.

Вызывать этот метод можно обращаясь к нему по указанному символу (в данном случае, *). При этом аргументом метода будет считаться объект стоящий справа от символа, а вызываться метод будет для объекта, стоящего слева от символа.

Так, например, удобно для объектов своего класса использовать символ + в качестве метода, складывающего объекты, вместо именованного метода (например, sum).

Перегрузка операторов, как и перегрузка функций в целом, реализует принцип полиморфизма.

2 Графическая библиотека OpenSceneGraph

2.1 Основные черты библиотеки OpenSceneGraph

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

OpenSceneGraph основан на низкоуровневом OpenGL API. По сути, OSG является промежуточным программным обеспечением, которое было создано для повышения уровня абстракции и облегчения использования низкоуровневого OpenGL [13].

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

OSG поддерживает OpenGL от 1.0 до 4.2, включая OpenGL ES 1.1 и 2.0, а также поддерживает большое количество 2D изображений и 3D форматов, многопоточность и многопроцессорность.

2.2 Граф сцены

Граф сцены (scene graph) - это общая структура данных, которая определяет пространственное и логическое представление графической сцены. Обычно представляется как граф с иерархичной структурой, который содержит набор графических узлов, включая корневой и несколько групповых узлов, каждый из которых может иметь набор дочерних узлов, и несколько листовых узлов, которые не имеют дочерних элементов и образуют нижний уровень дерева. Граф сцены не допускает направленного цикла (где некоторые узлы связаны в замкнутую цепь) или изолированных элементов, которые не имеют дочерних узлов или родителя, внутри себя [13].

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

Понятие графа сцены широко применяется во многих современных программах и приложениях, таких, например, как AutoCAD, Maya, CorelDraw, VRML, Open Inventor и, собственно, OpenSceneGraph.

2.3 Операции над графом сцены и пересылка

Применение операций к графу сцены требует некоторого способа пересылки операции, основанного на типе узла. Например, в случае визуализации узел трансформации группы накапливал бы информацию о трансформации с помощью умножения матриц, смещения векторов, кватернионов или углов Эйлера. После чего листовой узел отправляет объект на визуализацию. В некоторых реализациях визуализация может осуществляться напрямую, что вызывает используемый API -- такой, как DirectX или OpenGL. Но, поскольку API используемой реализации обычно приводит к сложностям в переносе на другие платформы, можно разделять граф сцены и систему визуализации. Чтобы совершить этот вид пересылки, могут быть применены несколько подходов [8].

В объектно-ориентированных языках, таких как C++, это легко осуществить с помощью виртуальных функций, каждая из которых представляет операцию, которую можно применить к узлу. Виртуальные функции просты в написании, но обычно нет возможности добавлять новые операции без доступа к исходному коду. В качестве альтернативы может быть использован шаблон проектирования «Посетитель». Но этот подход не лишён того же недостатка из-за невозможности добавлять новые виды узлов.

Другие методы используют RTTI (Run-Time Type Information, информацию времени выполнения о типах). Операция может быть выполнена в виде класса, который передаётся в текущий узел; затем он запрашивает информацию о типе узла с использованием RTTI и осуществляет поиск корректной операции в массиве функций обратного вызова или функторов. Это требует того, чтобы ассоциативный массив типов функций обратного вызовы или функторов был инициализирован во время исполнения программы, но предоставляет большую гибкость, скорость и расширяемость. Существуют разновидности этих методов, и новые методы могут предлагать дополнительные преимущества. Одним из таких вариантов является перестроение графа сцены во время каждой из исполняемых операций. Это приводит к снижению скорости и созданию хорошо оптимизированного графа сцены. Это показывает, что хорошая реализация графа сцены сильно зависит от приложения, в котором он используется.

2.4 Обход графа сцены

Обход графа сцены -- ключевой момент в достижении быстродействия применения операций к графам сцены. Обход обычно состоит из произвольного начального узла (часто это корневой узел графа сцены), применения операции или операций (зачастую операции обновления и визуализации применяются одна за другой) и рекурсивного движения вниз по графу сцены (дереву) к дочерним узлам, пока не будет достигнут листовой узел [8]. После этого многие средства для управления графами сцены осуществляют обход дерева в обратном направлении, применяя аналогичную операцию. Например, рассмотрим операцию визуализации, которая принимает информацию: во время рекурсивного нисходящего обхода иерархии графа сцены вызывается операция, предшествующая визуализации. Если узел является узлом трансформации, он добавляет собственную информацию о трансформации к текущей матрице трансформации. После того как операция заканчивает обход всех узлов-потомков, она вызывает операцию, следующую за визуализацией, поэтому узел трансформации может отменить трансформацию. Этот подход радикально сокращает число необходимых умножений матриц.

Некоторые операции графа сцены в действительности более эффективны, когда обход узлов осуществляется в различном порядке, например, когда некоторые системы применяют перестроение графа сцены, чтобы преобразовать его в более пригодный для разбора формат или дерево.

В двумерном случае, например, граф сцены обычно осуществляет визуализацию, начиная с корневого узла, а затем и рекурсивную визуализацию всех дочерних узлов. Листовые узлы представляют наиболее близкие к наблюдателю объекты. Поскольку визуализация происходит от заднего плана к переднему, когда более близкие объекты перекрывают дальние, этот процесс также известен, как «алгоритм живописца». В трёхмерных системах, которые часто используют буферы глубины, более эффективно сначала рисовать наиболее близкие объекты, поскольку удалённые объекты зачастую требуют только отсечения вместо визуализации, потому что они перекрываются более близкими объектами.

2.5 Компоненты библиотеки OpenSceneGraph

Для описания компонентов, которые содержит OpenSceneGraph, необходимо определить некоторые термины.

Визуализация (рендеринг) - это процесс, с помощью которого компьютер создает изображения из моделей.

Front-end - это пользовательский интерфейс, back-end - внутренняя реализация программы.

GUI - известная аббревиатура, которая расшифровывается как Graphical user interface (графический пользовательский интерфейс). Это разновидность пользовательского интерфейса, в котором все элементы интерфейса, отображенные на экране, выполнены в виде графических изображений.

Основная функциональность OSG состоит из четырех библиотек:

· Библиотека OpenThreads. Библиотека многопоточности OpenThreads позволяет абстрагироваться от операционной системы и писать единый код для всех платформ;

· Библиотека osg. Эта библиотека предоставляет базовые инструменты для построения графов сцены, таких как узлы, геометрические объекты, отображения текстур, а также связанные с ними инструменты и методы управления. Она так же содержит набор математических классов, которые используются для реализации векторных и матричных операций, используемых в двумерных и трехмерных пространствах.

· Библиотека osgDB. Данная библиотека предоставляет механизмы для чтения и записи 2D- и 3D-файлов, а также содержит класс, который предоставляет доступ к файлам данных и потоковым операциям ввода-вывода. Она также содержит механизм для динамической загрузки и выгрузки сегментов графа сцены.

· Библиотека osgUtil. Это большой набор утилит для обработки графа сцены и модификации геометрии в ней.

OSG предоставляет богатые возможности. Тем не менее разработчики обычно нуждаются в наследовании своих специализированных узлов от классов корневых узлов OSG. Более того, наследуемая функциональность обычно не принадлежит ядру OSG и более предпочтительно сделать их доступными как дополнительные поддерживаемые библиотеки. NodeKit это библиотека которая расширяет существующую функциональность ядра OSG специализированными Node, StateAttribute, или Drawable объектами, и добавляет поддержку этих новых классов в формат файла .osg вместе с оболочкой OSG [13].

OSG содержит следующие NodeKits:

· osgAnimation. Эта библиотека предоставляет целый ряд утилит общего назначения для различных анимаций. Она использует общие шаблоны для создания нескольких видов ключевых кадров и каналов анимации;

· osgFX. Данная библиотека включает инструменты для реализации специальных эффектов в трехмерном пространстве и содержит несколько полезных классов эффектов;

· osgGA. Эта библиотека является абстрактным пользовательским интерфейсом поверх различных оконных систем. Она помогает обрабатывать интерактивные события от периферийных устройств, таких, например, как клавиатура или мышь;

· osgManipulator дополняет граф сцены для поддержки трехмерных интерактивных манипуляций, таких как перемещение, поворот и масштабирование узлов трансформации;

· osgParticle. С ее помощью можно визуализировать взрывы, огонь, дым и другие эффекты на основе частиц;

· osgShadow предоставляет инструменты для различных способов визуализации теней;

· osgTerrain обеспечивает поддержку географического ландшафта используя поле высоты и данные изображения;

· osgText. Библиотека osgText определена в пространстве имен osgText. В этом пространстве имен находится небольшое количество полезных классов для загрузки шрифтов и отображения строк текста;

· osgViewer - это библиотека, с помощью которой визуализируется back-end в сочетании с какой-либо оконной системой. osgViewer поддерживает ряд оконных систем, таких как Win32, X11, Carbon и Cocoa, а также многие другие известные инструменты GUI.

· osgVolume включает в себя методы, позволяющие визуализировать объемные модели;

· osgWidget. С помощью этой библиотеки можно создавать 2D виджеты параллельно с виджеты параллельно с 3D изображениями;

· osgQt. Эта библиотека позволяет добавлять и использовать виджеты Qt.

2.6 Машина состояний

Машина состояний предоставляет разработчикам контроль над текущими и сохраненными состояниями визуализации [13]. Однако, она может быть непригодна для непосредственного использования в структуре графа сцены. По этой причине, OpenSceneGraph использует класс osg::StateSet для инкапсуляции машины состояний OpenGL и управляет операциями добавления или удаления различных наборов состояний визуализации графа сцены.

Экземпляр класса osg::StateSet содержит подмножество различных состояний OpenGL и может быть применен к объекту класса osg::Node или osg::Drawable с помощью функции setStateSet(). Например, можно добавить новый набор состояний к переменной узла:

osg::StateSet *stateset = new osg::StateSet;

Node->setStateSet(stateset);

Однако, более безопасным способом является использование метода getOrCreateStateSet(), который гарантирует, что текущий набор состояний всегда возвращается и автоматически присоединяется к узлу или доступному объекту, если необходимо:

osg::StateSet* stateset = node->getOrCreateStateSet();

Класс osg::Node или osg::Drawable управляет экземпляром класса osg::StateSet с помощью «умного указателя» osg::ref_ptr <>. Это означает, что набор состояний может быть общим для нескольких объектов сцены, и он будет удален, когда ни один из объектов больше не будет к нему обращаться.

2.7 Атрибуты и режимы

библиотека операция визуализация программа

OSG определяет класс osg::StateAttribute для записи атрибутов состояния отображения. Это виртуальный базовый класс, который может быть унаследован для реализации различных атрибутов визуализации, таких как свет, материалы и т.д.

Режимы визуализации представляются как переключатели, которые можно включить или отключить. Кроме того, они содержат переменную перечисления, которая используется для указания типа режими OpenGL. Потому что просто нет необходимости создавать базовый класс StateMode для режимов визуализации. Иногда режим визуализации связан с атрибутом, например, Mode GL_LIGHTING позволяет передавать переменные в конвеер OpenGL и отключает освещение сцены в противоположном направлении.

Класс osg::StateSet делит атрибуты и режимы на две группы: текстурные и нетекстурные. Он включает в себя несколько методов для добавления нетекстурных атрибутов и режимов к самому состоянию:

1. Метод setAttribute() добавляет объект класса osg::StateAttribute к набору состояний [14]. Атрибуты одного типа не могут сосуществовать в одном наборе.

Текущий набор будет просто перезаписан новым.

2. Метод setMode() присоединяет переменную перечисления режима к набору состояний и устанавливает его значение в osg::StateAttribute::ON или osg::StateAttribute::OFF, что означает включение или выключение режима.

3. Метод setAttributeModes() присоединяет атрибут визуализации и связанный с ним режим к набору состояний и одновременно устанавливает значение переключателя (ON по умолчанию).

2.8 Класс osg::Camera

Разработчики, которые пишут программы с использованием библиотеки OpenGL, часто используют функции glTranslate() и glRotate() для перемещения сцены, и функцию glLookAt() для перемещения камеры, хотя все они могут быть заменены на glMultMatrix(). Фактически, эти функции делают одно и то же - вычисление матрицы модели для преобразования данных из мировых координат в экранные. Аналогично, OpenSceneGraph предоставляет класс osg::Transform, который может добавлять или устанавливать свою собственную матрицу к текущей матрице представления модели при размещении в графе сцены. Но обычно работают с матрицей модели, используя классы osg::MatrixTransform и osg::PositionAttitudeTransform и управляя матрицей просмотра с помощью класса osg::Camera.

Класс osg::Camera является одним из самых важных классов в ядре библиотек OpenSceneGraph[13]. Этот класс может быть использован в качестве группового узла графа сцены, но он намного больше, чем просто узел.

Класс osg::Camera управляет матрицей просмотра и матрицей проекции. Связанные с этим методы включают в себя:

1. Методы setViewMatrix() и setViewMatrixAsLookAt(), которые устанавлявают матрицу просмотра, используя переменную класса osg::Matrix или классические переменные eye, center и up.

2. Метод setProjectionMatrix(), который принимает в качестве параметра переменную класса osg::Matrix для указания матрицы проекции.

3. Другие полезные методы, включая setProjectionMatrixAsFrustrum(), SetProjectionMatrixAsOrtho(), SetProjectionMatrixAsOrtho2D(), и seyProjectionMatrixAsPerspective(), которые используются для установки вида изображения. Они работают также, как функции OpenGL (glOrtho(), gluPerpective(), и т.д.).

4. Метод setViewport() может определять размеры окна с помощью osg::Viewport.

2.9 Классы Geode и Drawable

Класс osg::Geode соответствует листовому узлу графа сцены. У него нет дочерних узлов, но он всегда содержит геометрическую информацию для визуализации. Данные геометрии, которые нужно отрисовать, хранятся в наборе объектов класса osg::Drawable, управляемых классом osg::Geode. Неинтерактивный класс osg::Drawable определяется как чисто виртуальный класс. Он включает несколько подклассов для визуализации моделей, изображений и текстов. Общее название этих отображаемых элементов - drawables (рисунки). Класс osg::Geode предоставляет несколько методов для прикрепления и отсоединения drawables, а также для сбора информации о них:

- метод addDrawable() принимает указатель на osg::Drawable в качестве параметра и присоединяет к экземпляру класса osg::Geode. Все графические объекты, добавленные таким образом, управляются с помощью «умного» указателя osg::ref_ptr<>;

- методы removeDrawable() и removeDrawables() отсоединяют один или несколько объектов из текущего экземпляра класса osg::Geode, и уменьшать количество оставшихся ссылок на объекты на соответствующее значение. Метод removeDrawable() принимает в качестве параметра указатель на osg::Drawable, а метод removeDrawables() принимает два параметра: индекс начального элемента и количество элементов для удаления;

- метод getDrawable() возвращает указатель на объект класса osg::Drawable, хранящийся под индексом, указанным в качестве параметра;

- метод getNumDrawables() возвращает количество присоединенных объектов класса osg::Drawable.

2.10 Визуализация базовых фигур

OpenSceneGraph предоставляет класс osg::ShapeDrawable, который наследуется от базового класса osg::Drawable, чтобы быстро создавать основные геометрические фигуры с помощью простых параметров. Экземпляр osg::ShapeDrawable всегда включает в себя объект osg::Shape, чтобы хранить специальный геометрический тип и параметры.

Метод setShape() обычно используется для выделения и установления фигуры. Например:

shapeDrawable->setShape(new osg::Box(osg::Vec3(1, 0, 0), 10, 10, 5));

Этот код будет создавать параллелепипед с центром в точке (1, 0, 0) в локальной системе координат, длина и ширина которого равны 10, а высота - 5. Здесь класс osg::Vec3 представляет собой трехэлементный вектор в OSG. Другие предопределенные классы, такие как osg::Vec2 и osg::Vec4, также помогут при определении вершин, цветов, нормалей и текстурных координат.

Наиболее часто используемыми базовыми фигурами являются: osg::Box, osg::Capsule, osg::Cone, osg::Cylinder и osg::Sphere. Их свойства и размеры могут быть четко определены путем передачи параметров в конструктор.

3 Разработка программного модуля

3.1 Математические расчеты элементов орбиты спутника

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

...

Подобные документы

  • Изучение моделирования и визуализации трехмерных динамических сцен в пакете 3Ds Max на примере создания анимированной сцены, содержащей мышь, стул, чашку, чайную ложку и море. Создание материалов, камер и анимации, постановка света и визуализация сцены.

    курсовая работа [1,2 M], добавлен 26.02.2012

  • Построение динамической трехмерной сцены, включающей заданные тело и поверхность определенного вида средствами графической библиотеки. Наложение текстур на тела, поверхности с помощью функции SetupTextures. Графическое представление тела с текстурой.

    курсовая работа [582,9 K], добавлен 24.12.2010

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

    курсовая работа [3,1 M], добавлен 14.08.2015

  • Реализация программы в виде класса, используя для хранения информации контейнеры стандартной библиотеки шаблонов (STL) языка C++. Создание новой базы данных. Вывод информации о всех компьютерах. Удаление элементов контейнера, их поиск по критериям.

    курсовая работа [97,4 K], добавлен 10.01.2015

  • Структурная диаграмма программного модуля. Нахождение суммы элементов, находящихся над главной диагональю. Реализация программного модуля: код программы; описание использованных операторов и функций. Особенности тестирования программного модуля.

    курсовая работа [146,6 K], добавлен 01.09.2010

  • Последовательность построения поверхностей, картографирования значений глубин и сравнения полученных моделей при помощи модуля Geostatistical Analyst. Визуализация рельефа и создание 3D-моделей местности в ArcGIS. Создание видео-обзора 3D-поверхностей.

    курсовая работа [5,5 M], добавлен 23.04.2012

  • Возможности библиотеки OpenGL, создание матрицы и эффекта тумана. Разработка процедуры визуализации трехмерной модели "Корабль", интерфейса пользователя и подсистемы управления событиями. Логическая структура и функциональная декомпозиция проекта.

    курсовая работа [507,2 K], добавлен 02.07.2011

  • Разработка программ средствами библиотеки tkinter на языке Python. Изучение основы работы в текстовом редакторе Word. Описание авторской идеи анимации. Использование базовых команд и конструкций. Процесс проектирования и алгоритм разработанной программы.

    контрольная работа [125,3 K], добавлен 11.11.2014

  • Создание программы, с помощью библиотеки OpenGL рисующей проволочный чайник с поворотом рисунка вокруг осей X, Y, Z. Построение отрографической проекции. Установка области отображения. Функция обработки сообщений с клавиатуры. Главный цикл приложения.

    контрольная работа [151,2 K], добавлен 21.01.2011

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

    курсовая работа [1,1 M], добавлен 11.12.2010

  • Информационные и коммуникационные технологии в школьном обучении, сравнительный анализ технических и программных средств; Maple - язык и его синтаксис. Создание библиотеки процедур с помощью программы Maple к уроку информатики по теме "Кодирование звука".

    дипломная работа [351,4 K], добавлен 26.04.2011

  • Определение программного модуля. Принципы использования dll-библиотеки. Преимущества и недостатки использования dll-библиотек. Описание коэффициентов моделей. Разработка структуры классов. Реализация библиотеки классов в среде разработки MS Visual Studio.

    дипломная работа [676,6 K], добавлен 16.06.2015

  • Особенности работы с библиотеками. Создание и удаление библиотек, страниц и элементов. Выбор размера чертежа и установка рамки, режим печати. Создание списка элементов. Экспорт чертежей в файлы других форматов. Клавиатурные комбинации программы sPIan 5.0.

    реферат [2,7 M], добавлен 30.10.2011

  • Создание программного модуля, выполненного на языке программирования VBA (Visual Basic for Applications) и позволяющего во введенном массиве символов удалить все повторные вхождения этих символов. Разработка пользовательского интерфейса. Код программы.

    курсовая работа [317,4 K], добавлен 11.10.2012

  • Обзор технологии OpenStack, область ее применения. Реализация библиотеки классов. Реализация базовых классов и интерфейсов архитектуры. Создание виртуального сервера. Интеграция разработанной библиотеки классов и архитектура проектного решения.

    дипломная работа [1,0 M], добавлен 09.08.2016

  • Структурная диаграмма программного модуля. Разработка схемы программного модуля и пользовательского интерфейса. Реализация программного модуля: код программы; описание использованных операторов и функций. Вид пользовательской формы с заполненной матрицей.

    курсовая работа [215,3 K], добавлен 01.09.2010

  • Описание разрабатываемой программы с точки зрения пользователя и программиста. Поэтапная разработка программной системы. Создание базы данных в Access. Разработка структуры классов. Создание структуры для хранения данных. Проектирование интерфейса.

    курсовая работа [1,4 M], добавлен 07.08.2013

  • Описание пакета прикладной программы Net Beans 8.1. Разработка пользовательского интерфейса апплета. Создание рамочных окон на базе фреймов библиотеки java.swing. Изменение цвета текстовых данных. Проектирование и создание инфологической модели апплета.

    контрольная работа [1,8 M], добавлен 11.07.2016

  • Создание приложения, которое на вход получает компьютерную структуру, обрабатывает ее и выводит на экран. Краткое описание используемых пространств имен и классов. Файлы программного модуля Beta. Пример его работы, порядок подключения к Веб-странице.

    дипломная работа [1,3 M], добавлен 06.07.2015

  • Написание программы вывода графика функции с помощью точек и линий, модификация программы. Программа вывода каркаса вращающегося тора относительно своей оси с одновременным движением по заданной траектории. Создание эффекта сползания текстуры с цилиндра.

    контрольная работа [433,2 K], добавлен 01.12.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.