5. Разработка технического задания на программу
5.1. Назначение и область применения.
Программа предназначена для разбиения конструкций сеткой на плоские конечные элементы.
5.2. Описание объектов проектирования.
Конструкция представлена в виде плоской фигуры, которую в дальнейшем разбивают на плоские конечные элементы. Разбиение производится с определенной погрешностью, которую задает пользователь.
5.3. Требования к Программе.
Разработку и тестирование программы провести на ЭВМ класса Intel® Pentium® с использованием в среде программирования Qt Creator.Программа должна разбивать заданные фигуры на плоские элементы.
5.4. Этапы Разработки.
Исследование объекта проектирования - 1 марта 2012г.;
|
|
Разработка математического обеспечения – 15 апреля 2012г.;
|
|
Разработка схемы алгоритма программы – 30 апреля 2012 г.;
|
|
Разработка структуры программы – 15 мая 2012г.;
|
|
Выбор языка программирования, составление и отладка программы – 20 мая 2012г.;
|
|
Оформление дипломного проекта – 30 мая 2012г.;
6. Разработка математического обеспечения
Разработка математического обеспечения для разбиения конструкций сеткой на плоские конечные элементы
Разбиение конструкций сеткой на плоские конечные элементы осуществляется в два этапа.
Подготовка данных.
На шаге подготовки находится корневой элемент древа разбиения. Он имеет максимальный размер. Его стороны имеют координаты (minX,minY)(minX,maxY)(maxX,minY)(maxX,maxY).
Находится он путем перебора всех вершин и нахождением минимальных и максимальных координат. После чего максимальное значение изменяется, чтобы полученный элемент стал иметь стороны одинаковой длины.
Рекурсивное разбиение.
Если квадрат необходимо разбить, то он разбивается на 4 одинаковых квадрата, с координатами:
(minX,minY)(minX,maxY/2)(maxX/2,minY)(maxX/2,maxY/2)
(maxX/2,minY)(maxX/2,maxY/2)(maxX,minY)(maxX,maxY/2)
(minX,maxY/2)(minX,maxY)(maxX/2,maxY/2)(maxX/2,maxY)
(maxX/2,maxY/2)(maxX/2,maxY)(maxX,maxY/2)(maxX,maxY)
Для разбиения используется две проверки:
Пересекает ли отрезок разбиваемой фигуры с отрезком квадрата разбиения
Лежит ли точка в фигуре
Для того чтобы выяснить пересекаются ли два отрезка используется следующая формула:
Отрезки пересекается, если выполняются следующие условия:
Для выяснения, лежит ли точка в фигуре используется следующий алгоритм:
Считаются площади треугольников образованных точкой и сторонами фигуры. Для этого вычисляются векторные произведения:
, где - вершина фигуры, O — определяемая точка.
Если все z-компоненты векторов -положительны — точка лежит внутри фигуры.
Если все z-компоненты векторов -неотрицательны — точка лежит внутри фигуры или на её границе.
Разбиение конструкций сеткой на объемные конечные элементы осуществляется в два этапа.
1) Разбиение основания призмы на плоские конечные элементы.
2) Экструзия плоских элементов.
- определяется шаг разбиения h=H/N,
где H — высота конструкции,
N — желаемое число элементов.
- циклическое создание объёмных элементов (N раз):
- копируются двумерные элементы и сдвигаются на шаг h.
- добавляются вертикальные рёбра.
- формируются трёхмерные элементы из 2х плоских и соответствующих вертикальных рёбер.
- добавляются трёхмерные элементы в трёхмерную сетку.
- повтор цикла.
7. Разработка алгоритмов программы
Разработка алгоритмов разбиение конструкций на плоские конечные элементы
Рис. 19. Алгоритм разбиения фигуры на плоские конечные элементы.
Рис. 20. Процедура деления на плоские конечные элементы.
Б. КОНСТРУКТИВНО-ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ
Технология отладки программы
2. Подготовка отладки
Отладка – это процесс поиска и исправления ошибок, приводящих к не правильной работе приложения. Отладка делится на два этапа: отладка синтаксиса и отладка семантики. Синтаксическая ошибка - это нарушение правил записи на данном языке программирования. Эти ошибки обычно диагностируются трансляторами, и их исправление трудностей не вызывает. Специальной подготовки программы для отладки синтаксиса не требуется. В среде Qt Creator при запуске программы на компиляцию выдается номер и пояснение очередной найденной ошибки, а курсор указывает на строчку, в которой эта ошибка находится. При этом от программиста требуется лишь исправить ее и снова запустить программу на компиляцию. Семантическая (смысловая) ошибка - это применение операторов, которые не дают нужного эффекта (разного рода описки: a+b вместо a-b). Эти ошибки ЭВМ самостоятельно найти, естественно, не может. Основа отладки - это отладка семантики. Из вышесказанного ясно, что основным инструментом отладки служат тесты и отладочные печати. Подготовка тестов и расстановка отладочных печатей - это такой же необходимый этап, как и само программирование.[9]
3. Тесты
Тест - это просчитанный вручную или другим способом пример, промежуточные и конечные результаты которого используются для контроля правильности программы. Тесты должны быть, с одной стороны, достаточно просты, чтобы их можно было легко просчитать вручную, с другой - достаточно сложны, чтобы комплексно проверить программу.
Тесты составляются после разработки схемы, но до программирования, так как составление тестов помогает выявить многие ошибки в алгоритмизации. Количество тестов и их сложность зависят от программы. Комплект тестов должен быть таким, чтобы все ветви схемы были пройдены по крайней мере по одному разу. Кроме того, обязательно нужны тесты, контролирующие предельные и вырожденные случаи.
Тест состоит из исходных данных и тех значений, которые должны выдать отладочные печати при работе по этому тесту. Эти значения должны быть записаны в точности в том виде, в котором их должна выдать ЭВМ. Эти значения могут быть получены любым путем, не обязательно тем, который реализован в программе.
Несовпадение результатов программы с результатами тестов - признак наличия ошибки. Но иногда и неправильная программа может дать по нескольким тестам правильные результаты, поэтому необходимо контролировать и промежуточные результаты, чтобы не упустить взаимное уничтожение ошибок в данном варианте работы программы. Если есть возможность, то тестовые результаты лучше получать путем, отличным от реализованного в программе, так как, проводя ручные вычисления по программе, можно не заметить ошибки в алгоритмизации, которые затем не выявит и отладка, ибо мы не будем ожидать от программы неправильных результатов.[9]
4. Пошаговое выполнение программы
При пошаговом выполнении программы код выполняется строчка за строчкой. В среде QT возможны следующие команды пошагового выполнения:
Step Into – если выполняемая строчка кода содержит вызов функции, процедуры, то происходит вызов, и программа останавливается на первой строчке вызываемой функции, процедуры.
Step Over – если выполняемая строчка кода содержит вызов функции, процедуры или метода, то происходит вызов и выполнение всей функции и программа останавливается на первой строчке после вызываемой функции.
Step Out – предназначена для выхода из функции в вызывающую функцию. Эта команда продолжит выполнение функции и остановит выполнение на первой строчке после вызываемой функции.
Пошаговое выполнение до сих пор является мощным методом автономного тестирования и отладки небольших программ. [9].
5.Контрольные точки
Контрольная точка (breakpoint, точка останова, точка прерывания) – точка программы, которая при ее достижении посылает отладчику сигнал. По этому сигналу выполнение отлаживаемой программы временно приостанавливается.
Чтобы ввести точку прерывания, необходимо в окне редактора кода щелкнуть мышью левее кода требуемой строки, появится красная точка.
Теперь, если запустить приложение на выполнение и начнать с ним работу, произойдет прерывание выполнения программы в месте, где была установлена точка. Когда выполнение в контрольной точке останавливается, отлаживаемая программа переходит в режим остановки(break mode). Режим приостановки выполнения можно представить как пребывание программы в неком ожидании. В этом режиме все элементы, например функции, переменные и объекты, сохраняются в памяти, но их перемещения и активность приостанавливаются. Во время режима приостановки выполнения можно произвести поиск ошибок и нарушений целостности данных, проверив положения элементов и их состояние.
Преимущество точек прерывания заключается в том, что их можно одновременно указать несколько в разных местах кода, в том числе и в разных модулях программы. Приложение будет выполняться до тех пор, пока управление не перейдет к первой встретившейся в программе точке прерывания.
Контрольные точки предоставляют мощное средство, позволяющее приостанавливать выполнение программы в том месте и в то время, когда это необходимо. Вместо того чтобы перемещаться по коду от строки к строке или от инструкции к инструкции, можно разрешить выполнение программы до тех пор, пока она не достигнет точки остановки, а затем начать поиск и устранение ошибок. Для того чтобы убрать точку прерывания, достаточно просто щелкнуть на ней мышью.[9].
|
|
|