Главная » Просмотр файлов » Пояснительная записка

Пояснительная записка (1234703), страница 5

Файл №1234703 Пояснительная записка (Триангуляция со сгущением областей с входящим углом) 5 страницаПояснительная записка (1234703) страница 52020-10-06СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 5)

}

nn++;

current.push_back(h);

if(fabs(h) == fabs(arc/2)){

current.push_back(arc);

}

if(h != 0){

mathPrevious.push_back(h/2);

mathPrevious.push_back(arc*3/4);

}

}

else if(h - 3*angle <= arc){

if(tt == 0){

angle = fabs((arc - h)/3);

}

if(fabs(h - angle) > fabs(arc - pi/18000)) break;

current.push_back(h);

mathPrevious.push_back(h - angle/2);

if(tt == 2){

current.push_back(arc);

}

tt++;

}

else{

current.push_back(h);

mathPrevious.push_back(h - angle/2);

}

p.setPen(QPen(Qt::black, 4, Qt::SolidLine));

p.drawPoint(width()/2 + x*cos(h), height()/2 + x*sin(h));

if(i == 0){

}

}

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

.

Во втором условии вычисляются углы для области, угол которой больше значения переменной angle, но меньше, значения той же переменной, умноженной на два:

.

В третьем условии вычисляются углы для той области, которая образуется между границей области третьим с конца узлом (то самое условие, благодаря которому исключается возможность появления острых треугольников см. глава 2):

.

Далее высчитываются все прочие углы, не попавшие в данные условия. После вычисления всех углов, располагающихся на данной линии уровня происходит их отрисовка.

3.4 Реализация алгоритма соединения узлов

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

int hh = 0;

double backZ = 0;

for(int j = 0; j < halfPrevious.size(); j++){// CYCLE FOR TRIANGULATING NODES

if(i == 0) break;

QVector <double> minimum;

double min = 100;

double minZ = 0;

for(int z = 0; z < current.size(); z++){// CYCLE FOR CALCULATING MIN

minimum.push_back(fabs(halfPrevious[j] - current[z]));

if(min > minimum[z]){

min = minimum[z];

minZ = z;

}

}

int g = minZ;

p.setPen(QPen(Qt::red, 1, Qt::SolidLine));

if( abs( minZ - backZ ) > 1 ) {

p.drawLine(width()/2 + xPrevious*cos(previous[hh]), height()/2 + xPrevious*sin(previous[hh]), width()/2 + x*cos(current[minZ - 1]), height()/2 + x*sin(current[minZ - 1]));

}

backZ = minZ;

p.drawLine();

p.drawLine();

hh++;

}

Реализация алгоритма соединения узлов происходит следующим образом:

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

for(int j = 0; j < halfPrevious.size(); j++){

...

}

– в объявленном цикле задается вектор, в котором будут храниться значения минимумов

QVector <double> minimum;

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

for(int z = 0; z < current.size(); z++){

...

}

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

– проверяется условие на взаимодействие каждого узла предыдущей линии уровня с каким-либо узлом текущей линии уровня (см. глава 2).

int g = minZ;

if(abs( minZ - backZ ) > 1){

...

}

backZ = minZ;

– рисуются линии от каждой пары соседних узлов предыдущей линии уровня с тем узлом текущей линии уровня, в котором вычислена минимальная разница между счетчиками j и z.

ЗАКЛЮЧЕНИЕ

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

Суть МКЭ заключается в разбиении конкретной области на определенное число элементов [34]. Каждый элемент называется конечным элементом, а совокупность всех элементов – сеткой.

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

Программа была реализована на языке С++ с использованием объектно-ориентированного программирования (ООП). В качестве компилятора был выбран Qt.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1 Сиддхартха Рао Освой самостоятельно С++ за 21 день: Учеб. пособие. – 7-е изд., 2013. – 401 с.

2 Парата С. Язык программирования С++. Лекции и упражнения. 5-е издание. – М.: Издательский дома «Вильямс», 2007. – 237 с.

3 Herb S., Andrei A. C++ Coding Standarts // Tutorial. 2010. Vol. 1.

4 Bjarne S. Programming. Principles and Practice Using C++ // Tutorial. 2014. Vol. 2. N.1.

5 Эккель Б. Философия С++. Введение в стандартый С++. Том 1. 2-е издание. – СПб.: Изд-во Питер, 2004.

6 Stanley B.L., Josee L., Barbara M. C++ Primer // Turorial. 2013. Vol. 5.

7 Scott M. Effective C++. 55 Specific Ways to Improve Your Programs and Designs // Adv. Eng. Software. 2008. Vol. 1.

8 David V., Nicolai M. J. C++ Templates The Complete Guide // Tutorial. 2010. Vol. 5.

9 Anthony W. C++ Concuerrency in action. Practical Multithreading // Tutorial. 2012. Vol. 1.

10 Макс Шлее Профессиональное программирование на С++. Qt 4.5. (В подлиннике). – СПб.: Изд-во БХВ-Петербург, 2012. – 832 с.

11 Марк Саммерфилд Qt Профессиональное программирование (High tech). – СПб.: Изд-во Символ-Плюс, 2011.

12 Боровский А.Н. Практическое программирование на С++. Qt 4.7. / А.Н. Боровский. – СПб.: Изд-во БХВ-Петербург, 2012. – 315 с.

13 Бланшет М., Саммерфилд М. Программирование GUI на С++. Qt 4.8 / Второе изд. – М.: Изд-во Кудиц-пресс, 2008. – 714 с.

14 Вержибичкий, В.М. Основы численных методом / В.М. Вержибицикий. – М.: Высшая школа, 2002. – 333 с.

15 Корн, Г. Справочник по математике (для научных работников и инженеров) / Г.Корн, Т. Корн. – М.: Наука, 1973. 219 с.

16 Ю.В. Немировский, С.Ф. Пятаев Автоматизированная триангуляция многосвязных областей со сгущением и разрежением узлов

17 Построение вычислительной сетки: [Электронный ресурс]. URL: http://dolivanov.ru/node/64 (Дата обращения: 10.06.2016).

18 Скворцов А.В. Алгоритмы построения и анализа триангуляции // А.В. Скворцов, Н.С. Мирза. – Томск: Изд-во Том. ун-та, 2006.

19 Вычислительная геометрия: Триангуляция: [Электронный ресурс]. URL: http://rain.ifmo.ru/cat/data/theory/math/triangulation-2008 (Дата обращения 15.06.2016).

20 Скворцов А.В. Триангуляция Делоне и ее применение // А.В. Скворцов. – Томск: Изд-во Том. Ут-та, 2002.

21 Shapiro M. A note on Lee and Schachter’s algorithm for Delaunay triangula-tion // Inter. Jour. of Comp. and Inf. Sciences. 1981. Vol. 10. N. 6.

22 Lawson C. Software for C surface interpolation // Mathematical Software III. NY: Academic Press. 1977.

23 Lee D., Schachter B. Two algorithms for constructing a Delaunay triangula-tion // Int. Jour. Comp. and Inf. Sc. 1980. Vol. 9. N. 3.

24 Скворцов А.В., Костюк Ю.Л. Эффективные алгоритмы построения триангуляции Делоне// Геоинформатика. Теория и практика. Вып. 1. Томск: Изд-во Том. ун-та, 1998. – 592 с.

25 Sloan S.W. A fast algorithm for constructing Delaunay triangulations in the plane // Adv. Eng. Software. 1987. Vol. 9. N. 1.

26 Watson D.F. Computing the n-dimensional Delaunay tessellation with appli-cation to Voronoi polytopes // The Computer Journal. 1981. Vol. 24. N. 2.

27 Guibas L., Stolfi J. Primitives for the manipulation of general subdivisions and the computation of Voronoi diagrams // ACM Transactions on Graphics. Vol. 4. N. 2. 1985.

28 Разделяй-и-властвуй [Электронный ресурс]. URL:

http://algolist.manual.ru/maths/geom/convhull/divide_conquer.php (Дата обращения 18.06.2016).

29 McCullagh M.J., Ross C.G. Delaunay triangulation of a random data set for isarithmic mapping // The Cartographic Journal. 1980. Vol. 17. N. 2.

30 Обзор алгоритмов триангуляции неявно заданной поверхности [Электронный ресурс]. URL:

https://ea1d20cee84f16acd35e7269e98d85dd78c284cb.googledrive.com/host (Дата обращения 2.06.2016).

31 Построение триангуляции Делоне (модели TIN) [Электронный ресурс]. URL: http://lektsii.com/1-74022.html (Дата обращения 10.06.2016).

32 Lewis B., Robinson J. Triangulation of planar regions with applications // The Computer Journal. 1978. Vol. 21. N. 4.

33 Теорема коснусв. Доказательство теоремы косинусов [Электронный ресурс]. URL: https://www.calc.ru/Teorema-Kosinusov-Dokazatelstvo-Teoremy-Kosinusov.html (Дата обращения 18.06.2016).

34 Метод конечных элементов в композитной отрасли [Электронный ресурс]. URL: http://mastermodel.ru/articles/metod-konechnyh-elementov-v-kompozitnoy-otrasli (Дата обращения 19.06.2016).

35 Гопкало, В.Н. Выпускная квалификационная работа. Общие требования и правила оформления: методическое пособие. / В.Н. Гопкало, О.А. Графский – Хабаровск: изд-во ДВГУПС, 2014. – 41 с.

ПРИЛОЖЕНИЕ А

(справочное)

Реализация алгоритма плоской триангуляции

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include "QPainter"

#include "QVector"

#include "math.h"

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

}

MainWindow::~MainWindow()

{

delete ui;

}

void MainWindow::paintEvent(QPaintEvent *)

{

QPainter p(this);

double x = 0;

double xPrevious = 0;

double pi = acos(-1.0);

double length = ui->lineEdit->text().toDouble();

double arc1 = ui->lineEdit_2->text().toDouble();

double count = ui->lineEdit_3->text().toInt();

double arc = -arc1*pi/180;

double angle = 0;

double n = 1;

double m = 0;

double power = 0;

double t = 1;

double step = 0;

QVector <double> previous;

QVector <double> mathPrevious;

QVector <double> halfPrevious;

QVector <double> current;

previous.clear();

mathPrevious.clear();

halfPrevious.clear();

current.clear();

for(int i = 0; i < count; i++){// CYCLE FOR DRAWING AND TRIANGULATING EACH LINE OF LEVEL

halfPrevious = mathPrevious;

mathPrevious.clear();

previous = current;

current.clear();

int tt = 0;

int nn = 0;

power = pow(count, 2);

m = length/power;

xPrevious = x;

x = m*n;

t++;

n = pow(t, 2);

step = (x - m*pow(t - 2, 2));

angle = acos((2*pow(x, 2) - pow(step, 2))/(2*pow(x, 2)));

p.setPen(QPen(Qt::red, 1, Qt::SolidLine));

//p.drawArc(width()/2 - x, height()/2 - x, 2*x, 2*x, 0, arc1*16);

p.drawLine(width()/2, height()/2, width()/2 + x, height()/2);

p.drawLine(width()/2, height()/2, width()/2 + x*cos(arc), height()/2 + x*sin(arc));

p.setPen(QPen(Qt::black, 4, Qt::SolidLine));

p.drawPoint(width()/2 + x*cos(arc), height()/2 + x*sin(arc));

p.drawPoint(width()/2, height()/2);

p.drawPoint(width()/2 + x, height()/2);

for(double h = 0; h > arc; h -= angle){// CYCLE FOR CONNECTING NODES, LOCATED ON THE SAME LINE OF LEVEL AND MATH ANGLES

if (h == arc) break;

p.setPen(QPen(Qt::red, 1, Qt::SolidLine));

if(fabs(angle) >= fabs(arc)){

angle = fabs(arc);

p.drawLine(width()/2 + x*cos(h), height()/2 + x*sin(h), width()/2 + x*cos(arc), height()/2 + x*sin(arc));

current.push_back(h);

current.push_back(arc);

mathPrevious.push_back(arc/2);

}

else if(fabs(angle) <= fabs(arc) && fabs(arc) <= fabs(2*pi/3)){

if(nn == 0){

angle = fabs(arc/2);

}

Характеристики

Тип файла
Документ
Размер
2,56 Mb
Высшее учебное заведение

Список файлов ВКР

Триангуляция со сгущением областей с входящим углом
Егорчатоов А
Антиплагиат
Чертежи
Классификация сеток.vsd
Результат работы.vsd
Соединение узов.vsd
Таблица.vsd
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7041
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее