пз. Курсовая работа по специальным главам математики Тема Реализация наивного байесовского алгоритма и его исследование
Скачать 188.2 Kb.
|
Министерство науки и высшего образования Российской Федерации Муромский институт (филиал) федерального государственного бюджетного образовательного учреждения высшего образования «Владимирский государственный университет имени Александра Григорьевича и Николая Григорьевича Столетовых» (МИ ВлГУ) Факультет ИТР Кафедра ФПМ КУРСОВАЯ РАБОТА по специальным главам математики Тема: Реализация наивного байесовского алгоритма и его исследование при решении задач классификации (оценка) Члены комиссии (подпись) (Ф.И.О.) (подпись) (Ф.И.О.) Руководитель Еремеев С.В. (фамилия, инициалы) (подпись) (дата) Студент ПМИ-119 (группа) Бобров И.С. (фамилия, инициалы) (подпись) (дата) Муром 2022 Содержани ВВЕДЕНИЕ 4 1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ 5 1.1 Постановка задачи 5 1.2 Трёхмерная графика 5 1.3 OpenGL 6 1.4 Общая структура файла .dxf 6 2 МАТЕМАТИЧЕСКОЕ ОПИСАНИЕ 8 2.1 Описание пространственных объектов 8 2.2Построение куба 9 3 ПРОЕКТИРОВАНИЕ СТРУКТУРЫ ПРОГРАММЫ 11 4 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ 14 4.1 Структура файла .dxf 14 4.2 Реализация считывания данных из файла 15 4.3 Визуализация 3D-модели 15 ЗАКЛЮЧЕНИЕ 18 Список используемой литературы 19 ВВЕДЕНИЕ 4 1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ 5 1.1 Постановка задачи 5 1.2 Трёхмерная графика 5 1.3 OpenGL 6 1.4 Общая структура файла .dxf 6 2 МАТЕМАТИЧЕСКОЕ ОПИСАНИЕ 8 2.1 Описание пространственных объектов 8 2.2Построение куба 9 3 ПРОЕКТИРОВАНИЕ СТРУКТУРЫ ПРОГРАММЫ 11 4 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ 14 4.1 Структура файла .dxf 14 4.2 Реализация считывания данных из файла 15 4.3 Визуализация 3D-модели 15 ЗАКЛЮЧЕНИЕ 18 Список используемой литературы 19 ВВЕДЕНИЕВ современном мире человек часто сталкивается с трехмерной компьютерной графикой. Широкое применение компьютерная графика находит при создании спецэффектов в кинематографе, компьютерных играх, моделировании физических процессов. Визуализация трехмерной модели на мониторе компьютера позволяет удобно работать с ней, видоизменять, накладывать текстуры, добавлять внешние эффекты, которые будут взаимодействовать с моделью. Для написания графических программ существуют два основных стандарта в области программирования компьютерной графики: Direct3D и OpenGL. В данной работе будет использоваться стандарт OpenGL, библиотека SharpGL, на языке программирования C#. Будет реализована программа, позволяющая визуализировать 3D-модель из файла формата .dxf. 1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ1.1 Постановка задачиСтоит задача в реализации программы, способной визуализировать трехмерный объект. В качестве визуализирующей библиотеки выбрана библиотека OpenGL. Задачи: Загрузка 3Д модель из файла формата .dxf Визуализация модели Возможность вращения модели 1.2 Трёхмерная графикаТрехмерная графика – это графика, в которой используется 3-мерное представление геометрических фигур (часто декартовых), хранящихся в компьютере для целей расчетов и рендеринга двумерных изображений. Такие картинки могут быть сохранены для последующего просмотра или отображены в режиме реального времени. Трехмерная компьютерная графика опирается на многие из тех же алгоритмов, что и двухмерная компьютерная векторная в каркасной модели, и двухмерная компьютерная растровая в окончательном отображаемом изображении. В приложениях компьютерной графики 2D-программы могут применять 3D-методы для получения аналогичных эффектов (к примеру, освещение), а 3D могут использовать 2D-методы рендеринга. Трехмерную графику часто называют 3D-моделями. Помимо визуализированного изображения, модель содержится в графическом файле данных. Однако есть различия: трехмерная модель - это математическое представление какого-либо трехмерного объекта. Она технически не является графикой, пока не отображается. Она может отображаться визуально в виде двумерного изображения посредством процесса, называемого 3D-рендерингом, или использоваться в неграфических компьютерных симуляциях и вычислениях. 1.3 OpenGLOpen Graphics Library – это спецификация, определяющая программный интерфейс для написания приложений, которые используют двумерную или трехмерную графику. Так же OpenGL независима от языка программирования, его привязка есть ко многим популярным языкам программирования, таким как С++, С#, Java, Python и другим. Рендеринг в OpenGL основан на полигонах, задаваемых вершинами и нормалями. Например, для рендеринга одной стороны куба мы задаём 4 вершины и нормаль к стороне. Основные возможности OpenGL: Набор базовых примитивов: точки, линии, многоугольники и т.п. Видовые и координатные преобразования Удаление невидимых линий и поверхностей (z-буфер) Использование сплайнов для построения линий и поверхностей Наложение текстуры и применение освещения Добавление специальных эффектов: тумана, изменение прозрачности, сопряжение цветов, устранение ступенчатости. 1.4 Общая структура файла .dxfФайл представляет собой обычный текстовый файл типа .dxf в кодах ASCII, в котором находится текстовая информация в специально заданном формате. Файл .dxf организован следующим образом: Раздел заголовка (header) – в данном разделе файла dxf содержится общая информация о модели. Каждый параметр имеет имя и переменной и соответствующее ей значение. Раздел таблиц (tables) – в данном разделе содержатся определения именованных элементов. Таблица типов линий Таблица слоев Таблица типов шрифтов Таблица видов Раздел блоков (blocks) – в данном разделе содержатся графические примитивы определений блоков, которые описывают примитивы, входящие в состав каждого блока изображения. Раздел примитивов (entities) – в данном разделе содержатся графические примитивы модели, включая любые ссылки на блоки. Вывод по первому разделу: поставлена задача, разобрано понятие «трёхмерная графика», расписаны основные возможность библиотеки OpenGL, и рассмотрена структура файла, выступающего в качестве входных данных. 2 МАТЕМАТИЧЕСКОЕ ОПИСАНИЕМатематическое обеспечение систем компьютерной графики – это совокупность методов представления и манипулирования множеством геометрических элементов. Методы базируются на свойствах векторного, аффинного и евклидова пространства. В векторном пространстве присутствуют объекты двух типов: векторы и скаляры. В аффинном пространстве к ним добавляется еще один объект – точка. Евклидово пространство отвечает за понятие расстояния. 2.1 Описание пространственных объектовДля описания пространственных объектов используются такие элементы: вершины; векторы; полилинии; полигоны; полигональные поверхности(рис.1) Рисунок 1. Элементы построения 3D объектов Элемент вершина является главным элементом описания. При использовании трехмерной декартовой системы координат вершины определяются тремя координатами x, y, z. Каждый объект однозначно определяется координатами собственных вершин. Вершина может моделировать отдельный точечный объект, размер которого не имеет значения, а также может использоваться в качестве конечной точки для линейных объектов и полигонов. Двумя вершинами задается вектор. Несколько векторов составляют полилинию. Полилиния может моделировать отдельный линейный объект, а также представлять собой контур полигона. Полигон моделирует плоский объект. Один полигон может описывать плоскую грань объемного объекта. Несколько граней составляют объемный объект в виде полигональной поверхности - многогранник или незамкнутую поверхность (полигональную сетку). Полигон – это минимальная поверхность для визуализации. Это основная часть любого объекта, которая, прежде всего, образует его форму и формирует сетку. Полигоны создаются на основе точек и ребер, которые ограничивают данную плоскость. Полигональная сетка - это совокупность вершин, рёбер и граней, которые определяют форму многогранного объекта в трёхмерной компьютерной графике и объёмном моделировании. Гранями обычно являются треугольники и четырёхугольники. 2.2Построение кубаЧтобы понять структуры данных, которые используются в векторной полигональной модели возьмем куб и рассмотрим, как можно организовать описание такого объекта. На рисунке ниже представлен куб, и две его плоскости. Для его построения необходимо определить координаты точек для каждой плоскости. Пусть точка O будет началом координат, тогда для нее будут координаты O(0,0,0). Размерность будет условной — 1 на 1 на 1. Найдем точки для плоскости A и плоскости B: Точки для плоскости A- A0(1;0;0), A1(1;0;1), A2(1;1;1), A3(1;1;0) Точки для плоскости B- B0(1;1;0), B1(1;1;1), B2(0;1;1), B3(0;1;0) Рисунок 2. Пример построения куба Найдя все точки и построив между ними плоскости, получим простейшую куб, который состоит из шести полигонов. Вывод по разделу 2: в разделе были описаны стандартные элементы построения: точка, вектор, полилиния, полигон и полигональная поверхность. Разобрано построение куба в пространстве. 3 ПРОЕКТИРОВАНИЕ СТРУКТУРЫ ПРОГРАММЫИсходя из поставленной задачи, должна быть реализована программа, способная открывать файла формата .dxf, который выберет пользователь. Так же должна быть возможность видоизменения 3D-модели, ее вращения и масштабирования. Ниже представлена UML-диаграмма, показывающая, работу системы и взаимодействия пользователя. Пользователь может выбрать файл с 3D-моделью и изменить параметры отрисовки этой модели. Система считывает и обрабатывает данные из файла, применяет настройки отрисовки и визуализирует 3D-модель. Рисунок 3. UML-диаграмма вариантов использования Внутренняя структура программы выглядит следующим образом (рис.4). Есть две основные формы- UserForm и RenderForm. UserForm открывает файл и получает из него данные. Передаёт полученные данные в RenderForm. Перед визуализацией данные необходимо обработать, разделить координаты каждой точки, для этого используется класс Model. После чего 3D-модель визуализируется. Рисунок 4. Диаграмма классов Перед реализацией приложения необходимо построить его структуру. Для начала должны быть реализованы блоки выбора файла. Блок выбора нужен для выбора файла формата .dxf с разными 3D-моделями В блоке чтения файла и блоке обработки файла происходит считывание и обработка данных из файле. Структура файла формата .dxf такова, что в нем записаны координаты точек, которые обозначены своими метками. В данном блоке записываются координаты точек в свои переменные. Последний блок- отрисовка 3D-модели. В нем происходит визуализация модели с использованием инструментов библиотеки OpenGL. Рисунок 5. Структура программы. Вывод по разделу 3: в данном разделе было определено взаимодействие пользователя с приложением и описана структура программы 4 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ4.1 Структура файла .dxfДля чтения и записи данных из файла был написан класс Model.cs. Структура файла .dxf выглядит следующим образом: на каждую точку координаты (x, y, z) есть свои метки, после которых следует значение точки. Для координаты X – это значения в пределах от 10 до 18. Для Y – от 20 до 28. Для Z – от 30 до 36. На рисунке 4 видны метки, за которыми следуют координаты. Из чего мы получаем четыре точки: A1(0.093616; 0.00000; 3.035281); A2(0.141425; 0.51421; 2.99133); A3(-0.273266; -0.088110; 2.785832); A4(-0.273266;-0.088110;2.785831) Рисунок 6. Пример данных в файле .dxf 4.2 Реализация считывания данных из файлаНиже представлен код чтения каждой строки файла и занесение координат в переменные. while ((line = reader.ReadLine()) != null) { int code = -1; try { code = Int32.Parse(line.Trim()); } catch (Exception e) { code = -1; } if (code != -1) { string data = reader.ReadLine(); data = data.Replace('.', ','); if (code >= 10 && code <= 18) { x.Add(float.Parse(data)); } else if (code >= 20 && code <= 28) { y.Add(float.Parse(data)); } else if (code >= 30 && code <= 36) { z.Add(float.Parse(data)); } } } На данный момент реализовано открытие одного файла по нажатию на кнопку на главной форме приложения. 4.3 Визуализация 3D-моделиВ файле SharpGLForm.cs реализована визуализация модели с помощью инструментов библиотеки OpenGL. Так как каждые четыре точки относятся к своему блоку в структуре файла, необходимо их отделить для корректного построения полигона. Задаётся цвет модели, позиция камеры и вращение. public partial class SharpGLForm : Form { public Model m; float rotation = 0.0f; Random rnd = new Random(); public SharpGLForm(Model m) { this.m = m; InitializeComponent(); } private void openGLControl_OpenGLDraw(object sender, RenderEventArgs e) { // Возьмём OpenGL объект OpenGL gl = openGLControl.OpenGL; // Очищаем буфер цвета и глубины gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); // Загружаем единичную матрицу gl.LoadIdentity(); gl.Rotate(rotation, 0.0f, 1.0f, 1.0f); int max = m.x.Count; for (int i = 0; i < m.x.Count(); i = i + 4) { gl.Begin(OpenGL.GL_POLYGON); gl.Color((float)i / (float)max, (float)i / (float)max, (float)i / (float)max); for (int j = 0; j < 4; ++j) { gl.Vertex(m.x[i + j], m.y[i + j], m.z[i + j]); } gl.End(); } rotation -= 1f; } // Эту функцию используем для задания некоторых значений по умолчанию private void openGLControl_OpenGLInitialized(object sender, EventArgs e) { // Возьмём OpenGL объект OpenGL gl = openGLControl.OpenGL; // Фоновый цвет gl.ClearColor(0.0f, 0.25f, 0.25f, 0); } // Данная функция используется для преобразования изображения // в объёмный вид с перспективой private void openGLControl_Resized(object sender, EventArgs e) { // Возьмём OpenGL объект OpenGL gl = openGLControl.OpenGL; // Зададим матрицу проекции gl.MatrixMode(OpenGL.GL_PROJECTION); // Единичная матрица для последующих преобразований gl.LoadIdentity(); // Преобразование gl.Perspective(60.0f, (double)Width / (double)Height, 0.01, 100.0); // Данная функция позволяет установить камеру и её положение gl.LookAt( 5, 6, -7, // Позиция самой камеры 0, 1, 0, // Направление, куда мы смотрим 0, 1, 0); // Верх камеры // Зададим модель отображения gl.MatrixMode(OpenGL.GL_MODELVIEW); } private void openGLControl_Load(object sender, EventArgs e) { } } Результат работы программы показан на рисунке 7. Рисунок 7. Результат работы программы. Вывод по разделу 4: более подробно рассмотрена структура файла формата .dxf. Было реализовано чтение файла одного файла , хранящего координаты 3D-модель, обработка данных в файле, а так же визуализация. Реализовано вращение объекта. ЗАКЛЮЧЕНИЕПроектирование приложения, визуализирующего 3D-модель объекта, позволило приобрести практические навыки в использовании стандарта OpenGL. Рассмотрены основные возможности библиотеки SharpGL. Описано построение 3D объектов. Так же в курсовой работе была изучена структура файла формата .dxf, использующегося в качестве входных данных. Таким образом, в процессе написания курсового проекта было спроектировано и реализовано приложение, которое читает файл и визуализирует 3D объект, состоящий из полигонов. Так же добавлено вращение объекта. Список используемой литературы1. Боресков, А. В. Программирование компьютерной графики. Современный OpenGL / А. В. Боресков. — Москва : ДМК Пресс, 2019. — 372 c. — ISBN 978-5-97060-779-4. — Текст : электронный // Цифровой образовательный ресурс IPR SMART : [сайт]. — URL: https://www.iprbookshop.ru/124734.html (дата обращения: 14.10.2022). — Режим доступа: для авторизир. пользователей 2. Васильев, С. А. OpenGL. Компьютерная графика : учебное пособие / С. А. Васильев. — Тамбов : Тамбовский государственный технический университет, ЭБС АСВ, 2012. — 81 c. — Текст : электронный // Цифровой образовательный ресурс IPR SMART : [сайт]. — URL: https://www.iprbookshop.ru/63931.html (дата обращения: 20.12.2022). — Режим доступа: для авторизир. Пользователей 3. Компьютерная графика : учебное пособие / Д. В. Горденко, Д. Н. Резеньков, С. В. Сапронов, Н. В. Гербут. — Москва : Ай Пи Ар Медиа, 2022. — 91 c. — ISBN 978-5-4497-1694-1. — Текст : электронный // Цифровой образовательный ресурс IPR SMART : [сайт]. — URL: https://www.iprbookshop.ru/122430.html (дата обращения: 23.06.2022). — Режим доступа: для авторизир. пользователей. - DOI: https://doi.org/10.23682/122430 |