BC/NW 2016 № 2 (29): 8.1 

РАЗРАБОТКА АЛГОРИТМА И ПРОГРАММЫ,

РЕАЛИЗУЮЩИХ ТАЙМЕР ТРАЕКТОРИЙ ПОДВИЖНЫХ ОБЪЕКТОВ

Утенков Д.

Необходимо реализовать модуль программы на языке C++ в среде Qt Creator, осуществляющий перемещение объектов по карте в соответствии индивидуальным траекториям.

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

Также для проверки корректности работы алгоритма необходимо подсвечивать траекторию каждого объекта в виде ломаной прямой.

Анализ задания и постановка задачи

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

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

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

         Добавление объектов в приложение и на карту не входит в данную разработку.

         Результатом проектирования должна стать программа, которая могла бы передвигать заданные объекты с течением времени и отображать их на карте по программно-измененным координатам.

         Дизайн интерфейса программы не требует множества объектов на форме. Необходимы только поле для визуального отображения объектов на карте и две кнопки-переключатели – «Показать траектории» и «Моделировать».

Разработка алгоритма решения задачи

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

         Данные об объектах представляют собой массив структур Ship. В структуру Ship входят следующие данные:

1)  Ссылка на экземпляр класса cl_ship – указатель sh;

2)  Текущие координаты объекта Xi и Yi;

3)  Текущая скорость объекта Si;

4)  Массив структур MtrSp_Ti;

         Массив структур Mtr представляет собой массив точек траектории для одного объекта.

Для хранения траекторий объектов принято решение использовать массив структур. В структуре хранится три переменные:

1)  Координата точки траектории xi;

2)  Координата точки траектории yi;

3)  Скорость si, с которой объект следует в точку с координатами (xi, yi).

Массив траекторий – это совокупность массивов структур каждого объекта.

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

На рисунке 1 показан общий алгоритм работы программы.

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

Рис. 1. Алгоритм работы программы

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

Процедура «Отрисовка траекторий» отображает на карте ломаными линиями траектории объектов. Подробный алгоритм данной процедуры показан на рисунке 2. Его работа заключается в соединении, для каждого объекта по очереди, текущего местоположения объекта (представляется точкой T1 [Xi, Yi] ), с точкой траектории T2 [xi, yi]. Затем, в цикле, конец этой линии соединяется в последующими точками траектории, если они заданы.

Рис. 2. Алгоритм работы процедуры «Отрисовка траекторий

 

Процедура «Настройка таймера» включает  в себя объявление переменной типа QTimer и связывание одного из его сигналов с соответствующим слотом. После необходимых настроек производится запуск таймера с необходимым временным промежутком. В листинге 1 приведен один из вариантов реализации данной процедуры.

timer = new QTimer(this);

connect(timer, SIGNAL(timeout()), this, SLOT(on_TimerTimeout()));

timer->start(TimerConst);

Листинг кода 1. Процедура «Настройка таймера»

 

Процедура «Расчет координат, перемещение объекта list.at(i)» является основной частью данной работы. Ее цель – расчет дистанции до точки траектории, подсчет расстояния, которое будет пройдено объектом через заданный в таймере промежуток времени и расчет смещений dxi и dyi.

После расчета смещений необходимо учесть, в какой четверти находится точка траектории относительно объекта. В случае необходимости соответствующее смещение помножается на (-1).

Заключительным этапом процедуры является перезапись координат объекта и перемещение последнего на карте в нужном направлении.

Алгоритм данной процедуры представлен на рисунке 3.

 

Рис. 3. Алгоритм работы процедуры «Расчет координат, перемещение объекта list.at(i

Рис. 3. Алгоритм работы процедуры «Расчет координат, перемещение объекта list.at(i

 
Овал: КОНЕЦПодпись: Определение четверти в которой находится целевая точка отн. Текущей точки и коррекция смещенийПодпись: Перемещение объекта на рассчитанные смещенияПодпись: Подсчет дистанции, кол-ва необходимых тактов, смещений по осямРазработка программной реализации алгоритма

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

 

В таблице 1 приведены все объекты, которые находятся на форме приложения.

Таблица 1

Объект

Особые свойства

Назначение

QGraphicsView

---

Графический объект, содержащий в себе сцену, на которой находятся все объекты.

QButton

isCheckable

Кнопка, предназначенная для отображения траекторий объектов (Нажата = «Отображать», отжата = «Скрыть»)

QButton_2

isCheckable

Кнопка, предназначенная запуска алгоритма моделирования движения (Нажата = «Запустить алгоритм», отжата = «Приостановить алгоритм»)

 

 

На рисунке 4 изображено главное окно приложения. А на рисунке 5 показаны траектории для каждого объекта.

Рис. 4. Основное окно приложения

Рис. 5. Основное окно приложения с отображением траекторий объектов

Перейдем к реализации алгоритмов. Так как для разработки приложения используется среда QtCreator, то таймер реализован с помощью Qt-библиотеки <QTimer>. Среда разработки QtCreator также предоставляет возможность связать сигнал о том, что таймер отсчитал заданный временной промежуток, со слотом (простая процедура). Такие связки реализуются ключевым словом connect.

В результате в слот срабатывания таймера необходимо вставить алгоритм передвижения каждого объекта на индивидуальное расстояние. Также необходимо после каждого срабатывания таймера обновлять траектории.

Результаты тестирования

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

На рисунках 6 – 8 показаны моменты, заснятые в процессе моделирования движения объектов. На основании полученных результатов можно утверждать, что задачи выполнены, а программа работает корректно.

Рис. 6. Кадр №1. Состояние до моделирования

Рис. 7. Кадр №2. Моделирование движения по первым участкам траектории

Рис. 8. Кадр №3. Моделирование движения первого объекта по второму участку траектории, а второго объекта – по первому участку

Литература

1.     Онлайн - документация к среде разработки QtCreator http://doc.qt.io/;

2.     Шлее М. «Qt 5.3. Профессиональное программирование на C++»

3.     Жасмин БланшетМарк Саммерфилд «Программирование GUI на C++. Qt 5»

4.     Д. О. Рогозин, И. А. Шеремет, С. В. Гарбук, А. М. Губинский «Высокие технологии в США». Издательство Московского университета.

5.     ОАО «Концерн «Моринсис-Агат»» «Состояние, проблемы и перспективы создания корабельных информационн0-управляющих комплексо» Сборник докладов научно-технической конференции.