x1 = 0:0.01:10;
x2 = 0:10;
y1 = sin(x1); y2 = sin(x2);
plot (x1, y1, 'r--', x2, y2, 'k*'), grid xlabel(‘x’), ylabel(‘sin(x)’) title(‘Sine plotting’)
Рис. 3.1
Развернутое управление выводом графиков (толщина линий, размер и вид шрифта и др.) можно получить с помощью дескрипторов – графических указателей. Дескрипторы можно создать функциями plot, figure, axes, text либо получить по имеющимся графическим объектам – gcf, gca. Просмотр и изменение параметров графиков осуществляется функциями get и set.
Вывод линии в трехмерной плоскости осуществляется функцией plot3(). Для вывода поверхностей можно применять функции mesh(), surf(). Пример программы для вывода сетчатой поверхности приведен далее, соответствующий график показан на рис. 3.2.
x = -2:0.2:2; y = -4:0.4:4;
[X,Y] = meshgrid(x, y); % создание сетки для построения поверхности
Z = sin(X-1).^2 + sin(Y+1).^2 + 4;
21
mesh(X,Y,Z), grid
colormap([0.5 0.5 0.5]) % установка цвета поверхности title('meshed surface')
xlabel('x'), ylabel('y'), zlabel('height')
Рис. 3.2
Для ввода графической информации с помощью мыши предусмотрена функция ginput(). Другие функции ввода с помощью мыши позволяют создать более удобный для пользователя интерфейс:
menu() – создание меню и передача управления пользователю для выбора; msgbox() – создание окна для вывода сообщения;
inputdlg() – создание окна диалога – формы для ввода данных.
5. ТРЕБОВАНИЯ К ВХОДНЫМ И ВЫХОДНЫМ ДАННЫМ ПРОГРАММЫ
Программные модули при выполнении взаимодействуют с оператором (пользователем) и (или) другими программными модулями. При формировании данных для пользователя обычно учитываются требования понятности и удобства представления информации.
22
Для взаимодействия с другими программными модулями необходимо детальное и точное согласование формата входных и выходных данных. Обычно процедура согласования программных модулей оформляется протоколами информационного взаимодействия, в которых разработчики указывают полный состав, порядок следования, форматы, вид и расширение файлов
ипрочую информацию. Существуют и стандартные протоколы, одним из примеров которых (для передачи навигационной информации) является протокол NMEA.
National Marine Electronics Association (NMEA) – Национальная ассоци-
ация морской электроники, разработала специальный протокол для поддержания совместимости морского навигационного оборудования различных производителей. Этот NMEA-протокол описывает данные, полученные с GPS-приемников, но и измерения сонаров, радаров, электронных компасов, барометров и других навигационных устройств, используемых в морской технике. Все NMEA-сообщения состоят из последовательного набора данных, разделенных запятыми. Каждое отдельное сообщение не зависит от других и является полностью «завершенным». NMEA-сообщение включает заголовок, набор данных, представленных ASCII-символами, и поле для проверки достоверности переданной информации.
Заголовок стандартных NMEA-сообщений состоит из 5 символов, из которых два первых определяют тип сообщения, а оставшиеся три – его название. Каждое NMEA-сообщение начинается с символа «$» и обычно ограничено 80 символами.
Уточним для поставленной задачи формат и вид входных и выходных данных:
–координаты промежуточных точек (пунктов подзарядки) должны вводиться из файла, формат определяет разработчик (рекомендуется задавать данные в текстовом файле в виде таблицы координат; можно задавать также столбец с номером точки);
–координаты начальной и конечной точек должны задаваться с клавиатуры;
–прочие исходные данные (скорость объекта, время работы батареи
ипр.) можно считать условно постоянными и задавать внутри программы;
–выходные данные должны выводиться на экран и в файл в составе:
1) матрица координат, включающая начальную, промежуточные и конечную точки,
23
2)матрицы смежности неориентированного графа,
3)вспомогательных массивов для вычисления минимального пути,
4)последовательности вершин минимального пути,
5)последовательности NMEA-сообщений о маршруте объекта;
6)график с отображением графа и минимального пути. Сообщение NMEA имеет следующий формат:
«$UTHDG,XX,Y.Y,DD.DD,S1,Z.Z,S2», без пробелов, где XX – часы (це-
лое число), Y.Y – минуты (вещественное число), DD – расстояние до следующей точки; Z.Z – угол направления в градусах;
S1 – сигнал наличия поворота (символ), возможные значения: ‘T’ – есть поворот, ‘N’ – нет поворота;
S2 – сигнал окончания движения (символ), возможные значения: ‘E’ – конец движения, ‘N’ – движение не окончено.
Угол направления (азимута) отсчитывается от оси OX в декартовой системе координат, диапазон – от 0 до 360º.
6. ТИПОВОЙ ВАРИАНТ ЗАДАНИЯ НА КУРСОВОЙ ПРОЕКТ
Разработать программу, выполняющую следующие действия:
–формирование массива данных в виде неориентированного графа;
–поиск оптимальной траектории;
–расчет маршрута и отображение результатов в графике и специальном формате NMEA-сообщений.
Исходные данные (по вариантам в соответствии с таблицей)
Характеристики подвижного объекта
|
Скорость, км/ч |
|
Время работы |
Время зарядки на з/п, |
|
|
|
|
|
|
аккумулятора, ч |
мин |
|
|
|
|
|
|
|
|
|
|
|
|
Описание территории |
||
Координаты начальной точки: |
Координаты конечной точки: |
|||||
Набор координат точек (заправочных пунктов): |
||||||
8–10 узлов сетки с шагом 1 (–10 <= X <= 10 и –10 <= Y <= 10) |
||||||
Масштаб сетки: |
|
|
км. |
|
|
|
Задание
1. Занести в массив информацию о начальной, конечной точках и наборе заправочных пунктов.
24
Варианты заданий
|
Скорость, |
Время работы |
Время |
Начальная |
Конечная |
Масштаб |
|
Вариант |
аккумулятора, |
зарядки, |
|||||
км/ч |
точка |
точка |
сетки, км |
||||
|
ч |
мин |
|||||
|
|
|
|
|
|||
1 |
16 |
6.5 |
15 |
(–9; 7) |
(7; –6) |
25 |
|
2 |
16 |
6 |
27 |
(5; 5) |
(–8; –9) |
30 |
|
3 |
18 |
5 |
25 |
(6; –7) |
(–7; 6) |
20 |
|
4 |
18 |
6 |
30 |
(–7; –7) |
(5; 6) |
25 |
|
5 |
20 |
5 |
17 |
(10; –8) |
(–8; 8) |
30 |
|
6 |
20 |
4.5 |
15 |
(–5; –5) |
(4; 6) |
20 |
|
7 |
22 |
4.5 |
20 |
(10; 10) |
(–6; –7) |
30 |
|
8 |
22 |
4 |
17 |
(–9; 7) |
(8; –5) |
20 |
|
9 |
16 |
5.5 |
30 |
(4; 10) |
(–8; –9) |
20 |
|
10 |
16 |
4.5 |
20 |
(–5; 6) |
(4; –10) |
20 |
|
11 |
18 |
3.5 |
27 |
(–3; 9) |
(10; 8) |
15 |
|
12 |
18 |
4 |
15 |
(7; 8) |
(–9; –6) |
20 |
|
13 |
18 |
4.5 |
30 |
(–9; –8) |
(10; 9) |
20 |
|
14 |
19 |
5 |
25 |
(8; –5) |
(–8; 5) |
30 |
|
15 |
19 |
5.5 |
15 |
(–6; 6) |
(5; –5) |
15 |
|
16 |
19 |
6.5 |
30 |
(–7; 9) |
(9; –6) |
25 |
|
17 |
20 |
3.5 |
30 |
(–10; –10) |
(10; 8) |
40 |
|
18 |
20 |
4 |
17 |
(6; 10) |
(–8; –5) |
25 |
|
19 |
17 |
5 |
22 |
(–9; 9) |
(7; –7) |
20 |
|
20 |
17 |
5.5 |
15 |
(8; –8) |
(–7; 6) |
20 |
|
21 |
17 |
4.5 |
25 |
(7; 5) |
(–8; –6) |
30 |
|
22 |
17 |
6 |
20 |
(–7; 7) |
(7; –7) |
25 |
|
23 |
19 |
4 |
23 |
(4; 10) |
(–4; –9) |
20 |
|
24 |
21 |
3.5 |
15 |
(–4; –8) |
(8; 4) |
15 |
|
25 |
21 |
5 |
25 |
(–5; –8) |
(9; 9) |
25 |
2.Построить массив возможных перемещений между точками с учетом ограничения работы аккумулятора (квадратный массив, содержащий 1 и 0 – соответственно, перемещение возможно и невозможно) (матрица смежности).
3.Построить матрицу длин перемещений.
4.Определить вектор, состоящий из номеров точек, соответствующих минимальному пути от начальной до конечной точки.
5.Определить последовательность углов направлений и моментов времени для оптимальной траектории и сформировать NMEA-сообщения.
6.Построить график с указанием графа перемещений и оптимальной траектории.
7.Вывести результаты расчетов (пп. 1–5) на экран и в файл.
25