Дипломная работа





НазваниеДипломная работа
страница7/12
Дата публикации14.12.2014
Размер0.6 Mb.
ТипДиплом
100-bal.ru > Информатика > Диплом
1   2   3   4   5   6   7   8   9   ...   12

3.2 Структура программы


Программный код был написан на языке C#. Были реализованы различные классы и структуры, изображенные на рисунке 3.

c:\users\александр\desktop\диплом\classdiagram3.png

Рисунок 3 – Структура программы.

Класс Program

Является статическим классом, определяющим точку входа в приложение. Определяет свойства на уровне всего приложения. Содержит static void Main(), в которой создается экземпляр класса главного окна приложения. После создания вызывается метод

Application.Run(MF), который запускает главное окно программы, где MF – экземпляр главного окна.

Класс MainForm

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

private float[] whiteLight, sourceLight, lightPos – массивы, которые определяют настройки яркости и позицию источника освещения.

private float[] shadowM – матрица преобразования для реализации плоской тени.

private LoadData load – экземпляр класса-загрузчика данных о перемещении самолета по сцене.

static ThreeDSFile file – экземпляр класса-загрузчика трехмерной модели любого объекта из файла с расширением .3ds.

static Model model – хранит данные о модели самолета. Функционал программы позволяет пользователю самому выбирать необходимую модель, которая соответствует задаче.

private Deviation dev – экземпляр класса, который вычисляет и рисует отклонения самолета от глиссады.

private LoadProperty loadProperty – осуществляет загрузку настроек из xml-файла.

private Property property – хранит в себе основные настройки приложения.

private Explosion burst – используется для рендеринга модели микровзрыва.

public MainForm()

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

private void Form1_Load(object sender, EventArgs e)

Функция вызывается непосредственно перед отрисовкой главной формы, содержит в себе единовременное определение конеткста устройства, производит настройку всех необходимых конвейеров. Инициализируется библиотека Glut. Здесь объектно-видовая и модельная матрицы очищаются, становясь единичными. Включается настройка проверка глубины, необходимая для корректного отображения взаимного расположения объектов на сцене. Также задается матрица перспективной проекции. Данный режим позволяется более реалистично изображать модели, визуально искажая их размеры. Отдаленные объекты имеют меньшие размеры, чем те, которые расположенные рядом с камерой. В Form1_Load происходит настройка всех параметров освещения, положения источника света. Вызывает метод loadModel(), Begin(). Задается матрица проекции на плоскость поверхности сцены. Инициализируется объект, отвечающий за модель микровзрыва и вычисление его параметров.

private void Draw()

Функция отрисовки объектов. При каждой перерисовке формы вызывается этот метод.

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

private void Begin()

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

private void loadModel()

Метод, в котором загружается модель самолета.

private void loadToolStripMenuItem_Click

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

void DrawGround(float x, float y, float len, float width)

Функция отрисовки поверхности сцены.

void DrawRect(float x, float y, float len, float width)

Функция отрисовки ВПП.

private void ShowDisplay_MouseMove(object sender, MouseEventArgs e)

Функция реализует возможность вращения сцены с помощью манипулятора (мышь). Камера перемещается по сфере, в центре которой либо самолет, либо торец ВПП.

Класс MainForm содержит также стандартные процедуры, отвечающие заданным событиям, таким как движения мыши, нажатие кнопок мыши. Каждое такое событие соответствующим образом обрабатывается.

Класс CalcBurst

Класс реализует алгоритм вычисления скорости в заданной точке микровызрыва.

float V0, H0, R0

V0 - скорость в центральной части микровзрыва, [м/с],

H0 - высота центральной части, [м],

R0 - радиус вихря, [м].

public float Wx, Wz - разложение радиальной скорости параллельно и перпендикулярно оси ВПП.

public float Wy - вертикальная скорость ветра в искомой точке.

public float WR - радиальная скорость ветра в искомой точке.

float Dx, Dy, Dz – координаты центра микровзрыва.

Float CIR - циркуляционная сила вихря.

public CalcBurst(float V0_, float H0_, float R0_, float Dx_, float Dy_, float Dz_)

Конструктор класса.

public float Sign(float A, float B) – функция, вычисляющая знак А относительно B.

public void VV(float Xg, float Yg, float Zg) – функция вычисления составляющих WX, WY, WZ.

public float STR(float Y_, float R_) - метод вычисления функции потока STR.

public void WAP(float Y_, float R_, out float WR_, out float WY_) - вычисление составляющих WR, WY на основе функции STP.

Class Particle

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

public Particle() конструктор класса.

public void Calculate() функция вычисления координат каждой частицы, составляющей микровзрыв. Создается экземпляр класса CalcBurst. Вычисляются скорости.

Class Explosion

Класс, реализующий модель микровзрыва. Создается система частиц, при первом вызове в память видеокарты передается описание, как отрисовывать частицу. Это повышает скорость выполнения операции отображения всей системы. Для каждой частицы выбирается случайная точка из области микровзрыва, из которой будет высчитываться координаты всех положений частицы.

private float[] position – координаты микровзрыва.

private int MAX_PARTICLES = 50000 максимальное количество частиц.

private int _particles_now – текущее количество частиц, величина передается из файла настроек.

private bool isStart – индикатор. Показывает, произошло ли вычисление параметров микровзрыва.

private Particle[] ParticleArray – массив частиц. Хранит в себе все данные о частицах.

private bool isDisplayList – индикатор. Определяет, создан ли список отображения частицы. Необходим для улучшения быстродействия.

public Explosion(float x, float y, float z, float power, int particle_count) – конструктор класса.

public void SetNewPosition(float x, float y, float z) – функция. Вызывается для того, чтобы задать новую позицию микровзрыва.

private void CreateDisplayList() – создание списка отображения.

public void Boooom() - метод, в котором происходит создание массива частиц, которые составляют визуальную модель микровзрыва.

Вызывается процедура CreateNewParticle(), включается индикатор начала взрыва.

public Particle CreateNewParticle() – процедура создания частицы со случайными координатами.

public void Render() – метод отрисовки микровзрыва. Происходит вызов списка отображения для каждой частицы.

Class Deviation

Класс описывает глиссаду, отклонения, плоскости. Также отвечает за их отрисовку. Экземпляр класса создается при загрузке программы.

public Deviation() – конструктор класса.

public void Calculate() – функция вычисляет основные параметры отклонения от номинальной траектории, глиссадной и курсовой плоскостей, координаты номинальной траектории.

public void Render(bool blGLide, bool blDev, bool blScale, float transparency) – метод, отвечающий за отрисовку элементов, описанных выше. На вход получает индикаторы включения дополнительных опций.

Class InstantData

Класс описывает составной элемент класса ForXML.

public double t - момент времени кадра.

public double x, public double y, public double z - координаты центра масс самолета. Начало координат расположено в центре торца взлетно-посадочной полосы (ВПП). x - продольная координата, y - высота, z - боковое отклонение от осевой линии ВПП.

public double vx, public double vy, public double vz - скорости по соответствующим осям координат.

public double theta, public double psi, public double gamma – угловые координаты (в радианах): theta - тангаж, угол поворота вокруг оси z, psi - рыскание/курс, угол поворота вокруг оси y, gamma - крен, угол поворота вокруг оси x. Положительное направление – против часовой стрелки, если смотреть с положительного направления соответствующей оси.

public double wtheta, public double wpsi, public double wgamma - соответствующие угловые скорости.

Class ForXML

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

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


Class LoadData

Класс описывает загрузку данных из файла. Файл данных формируется во время решения задачи о посадки самолета с различными начальными данными.

public ForXML forXML – экземпляр класса ForXML, используется для хранения в памяти данных.

private void ReadPO (string filename) - создаются и инициализируются переменные, необходимые для десериализации. На входе получает имя файла, из которого будут извлекаться данные. Данный параметр может быть получен либо из файла с настройками приложения, либо имя файла пользователь укажет сам. Вызывается из MainForm.Begin().

Class Property

Класс описывает структуру данных, в которой хранятся параметры анимации.

Class LoadProperty

Класс описывает загрузку настроек из файла.

public Property Load() – результатом выполнения данного метода является экземпляр класса Property, в котором хранятся десереализованные настройки.

Вызывается в MainForm. Form1_Load().

public void WriteProperty(Property pr) – функция создания файла с настройками, если он отсутствует в корневой директории программы.

Class Lib

В данном классе собраны вспомогательные структуры и методы.

struct CVertex3f – структура вершины, характеризуется тремя координатами.

struct Triangle – структура треугольного полигона, хранит в себе номера вершин из списка.

struct CFace – структура грани, хранит в себе номера вершин из списка.

struct TexCoord – структура текстурных координат.

struct Vector – структура вектора в трехмерном пространстве, реализованы перегруженные методы сложения векторов, умножения на скаляр.

public void gltGetPlaneEquation() – функции вычисления матрицы тени. На входе получает координаты трех точек плоскости, позицию источника света.

public void gltGetNormalVector() – функция вычисления вектора нормали к плоскости.

public void gltSubtractVectors() – функция нахождения разности двух векторов.

public void gltVectorCrossProduct() – используется для нахождения векторного произведения.

public void gltNormalizeVector() – функция нормализации вектора.

Class MaterialFaces

Класс создает соответствие грани и ее материала.

Class Material

Класс используется для наложения текстуры на грань модели.

public void BindTexture() – функция наложения текстуры. Если загружаемая модель содержит в своем файле описания текстуры, то вызывается этот метод.

Class ThreeDSFile

Класс описывает загрузку трехмерной модели из файла .3ds.

Реализует вложенный класс ThreeDSChunk(), который удобно использовать при дальнейшем чтении данных из файла.

void ProcessChunk() – чтение Chunk.

void ProcessMaterialChunk - чтение Chunk, хранящего информацию о материалах.

void ProcessTexMapChunk - чтение Chunk с данными о текстурной карте.

void ProcessColorChunk - чтение Chunk с цветом модели.

Triangle[] ReadIndices – функция загрузки треугольных полигонов. Использует структуру Triangle.

Vector[] ReadVertices() – функция загрузки вершин. Использует структуру Vector.

Interface IRenderable

Интерфейс, который описывает метод Render().

Class Entity

Класс, который отвечает за сборку трехмерной модели. Реализует интерфейс IRenderable.

public void CalculateNormals () – функция вычисления нормалей ко всем полигонам объекта. Используются структуры Vector и Triangle.

public void Render () – метод, к котором происходит отрисовка составных частей модели.

Class Model

Класс описывает и отображает все части модели.

public void Render () – модель может состоять из нескольких частей, например, самолет состоит из крыльев, фюзеляжа и шасси. Данная функция вызывает метод отрисовки для каждой составной части трехмерной модели.

1   2   3   4   5   6   7   8   9   ...   12

Похожие:

Дипломная работа iconДипломная работа
Мамзеров Д. В., навигация и интерфейс в средах виртуальной реальности, дипломная работа
Дипломная работа iconДипломная работа по теме: “ Интерактивная база данных по дендроклиматологии” Работу
Моя дипломная работа очень актуальна, потому что дендроклиматология – малоизученная и малоизвестная область биологии. Дендроклиматология...
Дипломная работа iconДипломная работа содержит 104 листа, 6 таблиц, 35 рисунков. Тема:...
Данная дипломная работа посвящена проблемам разработки и внедрения устройств связи высокочастотного и сверхвысокочастотного диапазона....
Дипломная работа iconНазвание организации
Заголовок «Дипломная работа» или «Курсовая работа»: Times New Roman, 14 (вопреки П. 113), по центру. Затем – 2 пустые строки
Дипломная работа iconРеферат. Содержание
Дипломная работа (далее просто работа) выполняется на листах формата А4 с размерами полей: сверху – 20 мм, снизу – 20мм, справа –...
Дипломная работа icon2 требования к содержанию работы
Дипломная работа (далее просто работа) выполняется на листах формата А4 с соблюдением следующих размеров полей: правое – 10 мм, верхнее...
Дипломная работа iconДипломная работа

Дипломная работа iconРеферат. Содержание
Дипломная работа (далее просто работа) выполняется на листах формата А4 с размерами полей: сверху – 20 мм, снизу –20мм, справа- 15мм,...
Дипломная работа iconДипломная работа пгу 030501

Дипломная работа iconКнига 1
Объем работы – реферат от 12 до 25 печатных листов, курсовая работа – от 20 до 30 страниц, дипломная работа 60-70 страниц компьютерного...
Дипломная работа iconТребования к дипломной работе учащихся 10 11-х классов
Дипломная работа заключительная работа учебно-исследовательского характера, выполняемая оканчивающими университеты, экономические,...
Дипломная работа iconЛатинские заимствования в современном русском литературном языке (дипломная работа)

Дипломная работа iconДипломная работа Создание программы помогающей изучать английский язык

Дипломная работа iconДипломная работа на тему: «Совершенствование организации поддержки...
Дипломная работа «Совершенствование организации поддержки и развития малого предпринимательства в муниципальном районе на примере...
Дипломная работа iconДипломная работа
Соответствие современной интернет-рекламы психологическим особенностям подростков
Дипломная работа iconДипломная работа не менее 65 страниц без приложения
Курсовая работа выполняется на одной стороне листа белой бумаги формата А4 (210 Х 297 мм). Иллюстрированный материал (таблицы, схемы,...


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск