16 МВ оперативной памяти;
операционная система Microsoft Windows 95;
4 МВ на жестком диске.
Постановка задачи.Разработать раздел графической библиотеки, описывающий платоновы тела и функции для работы с ними, а также средство работы с ней. Программный продукт должен осуществлять мониторинг вращения графического объекта (платонова тела) вокруг осей координат (OX, OY, OZ).
Подход к решению задачи.Подход к решению задачи основан на объектно-ориентированной методологии. Но следует отметить, что объектно-ориентированное программирование можно эффективно использовать, если ему предшествуют объектно-ориентированный анализ задачи и объективно-ориентированное проектирование программного комплекса. Без объектно-ориентированного проекта попытки применения объектно-ориентированного программирования являются по меньшей мере малоэффективными и весьма трудоемкими.
Исходная задача разбивается на следующие подзадачи:
разработка интерфейса программы;
разработка класса многогранников;
разработка класса функций, позволяющих производить преобразование многогранников в пространстве;
Выбор программной среды, инструментальных средств разработки.В качестве программной среды выбран язык программирования Microsoft Visual C++ 5.0, поскольку он основан на новейших технологиях программирования (например: С++, программирование графического интерфейса Windows, фундаментальные классы фирмы Microsoft (Microsoft Foundation Classes) и генераторы кода Wizard).
Microsoft Visual C++ обеспечивает несколько различных путей написания программ для GUI Windows (graphical user interface). Во-первых, можно писать программы GUI на С и С++, напрямую обращаясь к функциям, которые обеспечиваются находящимся внутри Win32 программным интерфейсом приложений (API), и является частью операционных систем Windows 95 и Windows NT. Однако, используя этот подход, необходимо множество строк кода перед тем, как появится возможность сосредоточиться на задаче, которая является особенной в приложении.
Во-вторых, можно писать программы для GUI Windows на С++, используя МFC (Microsoft Foundation Classes). MFC обеспечивает большой набор написанных классов, как и код поддержки, который может выполнять много стандартных задач при программировании для Windows (таких, как создание окон с обработкой сообщений). Также можно использовать MFC, чтобы быстро добавить к вашим программам такие сложные элементы, как панель инструментов, разделенные окна представлений. MFC может упростить программы GUI и сделать работу при программировании значительно проще.
В-третьих, можно писать GUI Windows программы на С++, используя и MFC и мастер-блоки Microsoft Wizard. Можно использовать AppWizard, чтобы сгенерировать основные исходные файлы для разнообразных типов программ GUI. Затем можно использовать интсрумент ClassWizard, чтобы создать большую часть кода, необходимого для порождения классов; определить функции-члены для обработки сообщений или настройки поведения MFC; управлять блоками диалога и выполнить другие задачи. Код, сгенерированный с использованием мастер-блоков Wizard, полностью использует MFC. Причем, мастер-блоки Wizard не ограничиваются только генерацией оболочек простых программ, а, напротив, может быть использован для создания программ, содержащих большой набор сложных компонентов.
Используя этот третий подход, можно получить пользу не только от кода, уже написанного в MFC, но и от сгенерированного исходного кода, который использует MFC и решает множество задач программирования. MFC и мастер-блоки Wizard облегчают усилия по созданию визуального интерфейса программы и помогают убедиться, что этот интерфейс согласуется с описаниями (guidelines) Microsoft.
Разработка программы велась на базе третьего и самого высокоуровневого способа написания программ для GUI Windows.
Разработка функциональной структуры программного продукта, требований к отдельным подсистемам, системных соглашений.Функциональная структура программного продукта содержит следующие классы:
CpolyhedronApp – основной класс приложения, наследуемый от CWinApp
CmainFraim – класс окна, наследуемый от CframeWnd и контролирующий все свойства и особенности окна приложения
CpolyhedronDoc – класс документа приложения, наследуемый от CDocument. Документ – это совокупность всех или части данных, используемых приложением, в том числе значения параметров, указываемых пользователем и т.д. Приложение может иметь несколько документов, хотя в нашем случае документ всего один.
CpolyhedronView – класс, позволяющий отображать содержимое класса CPolyhedronDoc. Наследуется от Cview. В нашем случае служит в том числе и для отображения платоновых тел по параметрам из CpolyhedronDoc.
CpolyhedronAction – класс, содержащий функции для создания и действий над платоновыми телами.
CpolySet, CaboutDlg – классы, наследуемые от Cdialog и служащие для построения и работы с диалоговым окном настроек программы и диалоговым окном About.
Подробное дерево классов программного продукта с перечислением всех функций и переменных прилагается.
Системные соглашения:
Задание всех параметров требуемых в техническом задании операций, таких как координаты точек, уравнения прямых и т.п. ведет к значительному усложнению работы с программой и требует дополнительных знаний и усилий от пользователя. Всвязи с этим вводятся ограничения на производимые операции: например, вращение вокруг линии реализуется только вокруг координатных осей. Но результатом введения подобных ограничений является то, что операции вращения вокруг точки и облета тела сводятся к уже реализованному вращению вокруг линии.
На примере облета тела: при допущении, что облет тела производится по окружности заданного радиуса, существуют два принципиальных варианта облета: с камерой, направленной постоянно на тело, и с камерой, направленной по касательной к траектории движения. Первый из этих вариантов сводится к вращению тела вокруг собственной оси на определенном расстоянии от камеры при расположении тела по центру экрана, второй – к вращению тела вокруг собственной оси при расположении тела с краю экрана так, что видна лишь его часть.
В связи с вышеизложенным операции вращения вокруг точки и облета тела не представляют интереса и не будут реализованы. Также становятся ненужными некоторые параметры из предусмотренных ранее, которые также не будут реализованы.
Ввод параметра расстояния до камеры позволяет зрительно задать длину ребра тела, и вместе с тем расширяет возможности программы. Всвязи с этим параметр длины ребра тела в программе заменен вышеуказанным параметром.
В
связи с изменением набора функций и параметров программы, а также введением дополнительных элементов интерфейса, таких как панель инструментов, изменен первоначальный проект интерфейса. Подробное его описание содержится в руководстве пользователя.
Выбранные програмные средства позволяют моделировать движение тела за пределами видимого пространства, тем самым ограничения на выход тела за пределы экрана представляется лишним и суживающим возможности программы. Контроль входных данных не будет заключаться в недопущении этого, однако будет производиться контроль, предотвращающий появление ошибок.
Структура диалогового интерфейса программного продукта показана на рис. 4.6.1.
рис. 4.6.1. Структура диалогового интерфейса.
Интерфейс представляет собой стандартное окно Windows, состоящее из панели меню, панели интсрументов и окна представления. На панели меню представлено меню Polyhedron. Это меню представляет собой список из 5 правильных многогранников и пункта Settings, открывающего меню параметров программы. Выбранный многогранник выделяется в этом меню галочкой. На панели инструментов имеется 3 кнопки. Первая кнопка осуществляет запуск движения многогранника, вторая – его остановку, а третья – непосредственное открытие меню параметров Settings.
Выдача результатов осуществляется в окне представления. Результатом работы программы является движение платонова тела с учетом заданных пользователем параметров.
Описания алгоритмов решения функциональных задач.Реализация 3-хмерной графики с помощью библиотеки OpenGL базируется на основе принципов аффинных преобразований в пространстве. Также очень важно понятие камеры – образно говоря, некого виртуального окна в трехмерном пространстве. Все то, что отображается в графическом окне приложения, мы видим посредством камеры. Еще одно важное понятие – это понятие матрицы, описывающей объекты в пространстве – фактически, некой трехмерной модели пространства. На основе этих понятий решается основная функциональная задача проекта – вращение платоновых тел.
Алгоритм решения этой задачи строится следующим образом:
Вначале двигаем камеру на заданное расстояние “к пользователю” по оси OZ для того, чтобы иметь возможность смотреть на платоновое тело “со стороны”, т.к. изначально камера находится в начале координат, где впоследствии и создается тело. Затем сдвигаем начало координат на заданное расстояние относительно заданной оси – оси вращения – для того, чтобы ось вращения была от тела удалена, и создаем платоновое тело. Решение функциональной задачи создания платонового тела интереса не представляет, т.к. с помощью библиотеки OpenGL это делается вызовом всего лишь одной определенной функции. Тело создается в начале координат. После создания платонового тела оно поворачивается относительно оси вращения на определенный угол, значение которого постоянно увеличивается или уменьшается в зависимости от направления вращения. Так как данная последовательность действий выполняется в цикле, тело постоянно сдвигается на все больший (меньший) угол, чем и достигается вращение, в то время как все остальные параметры остаются неизменными.
Все процедуры сдвига начала координат, поворота и т.п. достигаются, как это и было описано ранее, с помощью аффинных преобразований, путем умножения матрицы, описывающей трехмерное пространство, на матрицы поворота, сдвига и т.п. Для каждого такого действия предусмотрены функции библиотеки OpenGL.
... представляют собой числа с плавающей точкой. Наличие различных форматов позволяет библиотеке OpenGL принимать данные пользователя в его собственном формате данных. Некоторые команды библиотеки OpenGL допускают использование 8 различных типов данных в качестве своих параметров. Буквы, используемые в качестве суффиксов для того, чтобы определить эти типы данных для реализации ISO С библиотеки ...
... , комментарии в формате XML. Переняв многое от своих предшественников — языков С++, Delphi, Модула и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++) или вывода типов (реализовано в .NET Framework 3.0). C# ...
... согласно заданному алгоритму. Все ошибочные ситуации были рассмотрены, ошибки – устранены. 4. Применение программы 4.1 Назначение программы Программа предназначена для создания и редактирования сложных графических эффектов частиц. В процессе разработки была обеспечена реализация программой следующего набора функций: - управление динамическим набором эмиттеров (систем частиц); - ...
... не обо всех знаю. Скептики, возможно, не поверят мне, когда я скажу, что на Delphi можно одинаково хорошо писать как приложения к корпоративным базам данных, так и, к примеру, игровые программы. Тем не менее, это так. Во многом это объясняется тем, что традиционно в среде Windows было достаточно сложно реализовывать пользовательский интерфейс. Событийная модель в Windows всегда была сложна ...
0 комментариев