8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 149 150 151 152 153 154 155 ... 365

\ Листинг 6.25. Вывод данных в графическое окно

% Отображение данных в графическое окно figure; % Создание окна % Построение окружностей

t = 0:pi/20:2*pi; % задание вектора параметра for i = 1:Ncircle

% Вычисление векторов, соответствующих параметрически

% заданным функциям, которые определяют окружности

х = Rcircle(i)*cos(t) + Xcircle(i);

у = Rcircle(i)*sin(t) + Ycircle(i);

plot fx, у) % построение окружности

hold on

end

% Вывод точки красным маркером plot(Xpoint, Ypoint, or) hold off

axis square % сохранение одинакового масштаба осей

Работа файл-функции point сопровождается теперь появлением графического окна с расположением кругов и точки, например, вызов

f = point(1, 1, [0 3 3], [2 -1 3.3], [-1 -2 2 ]);

приводит к появлению графика, изображенного на рис. 8.9.

-4-20246

Рис. 8.9. Графическое окно с расположением кругов и ючки


Список входных параметров в заголовке файл-функции может содержать комбинацию обязательных и произвольных аргументов. Например, заголовок файл-функции point может иметь такой вид:

function where = point (рх, ру, varargin)

В данном случае в массив ячеек упаковываются векторы из трех элементов с координатами центров и радиусами кругов, начиная с первой ячейки массива, а параметры рх и ру передают координаты заданной точки. Массив varargin всегда указывается последним!

Обратимся теперь к написанию файл-функций с переменным числом выходных аргументов. Продолжите работу с файл-программой point. Задача теперь состоит в том, чтобы point допускала следующие варианты обращения к ней.

1.£ = pointtpx, ру, [xl yl ri], [х2 у2 R2], ...). В f записывается ноль или единица, в зависимости от принадлежности точки какому-либо кругу.

2.[f, кс] = point(px, ру, [xi yi ri], [х2 у2 R2],...). В f записывается ноль или единица, а в Nc — число кругов, которым принадлежит точка.

3.[f, Nc, Num] = point(px, ру, [xl yl Rl], [x2 y2 R2 ],...). В ± записывается ноль или единица, в Ыс — число кругов, которым принадлежит точка, в массив Num— номера этих кругов в списке входных аргументов.

Произвольное число выходных аргументов возвращается файл-функцией в специальном массиве ячеек varargout, для чего следует предусмотреть операторы, записывающие выходные аргументы в соответствующие ячейки данного массива. Заголовок файл-функции с переменным числом входных и выходных аргументов в М-файле выглядит следующим образом:

function varargout = myfun(varargin)

Аргументы, указание которых обязательно, могут быть помещены в списки входных и выходных аргументов до varargin и varargout соответственно. Например, первый выходной аргумент функции point, принимающий значение ноль или единица в зависимости от попадания точки в круги, указывается всегда, поэтому имеет смысл выделить его в списке выходных аргументов. Ниже приведен заголовок файл-функции point, которая допускает три варианта вызова, перечисленные выше.

function [where, varargout] = point(varargin)

Внесите необходимые дополнения в текст файл-функции point (см. листинги 8.23—8.25).

1. Измените заголовок, предусмотрев один фиксированный выходной аргумент where и произвольное число дополнительных аргументов при помощи varargout.


j Листинг 8.26. Файл-функция points с переменным числом входных I аргументов

function [where, varargout] = point(varargin)

ft файл-функция определяет попадание точки с заданными

% координатами (рх, ру) в круги с центрами

% в (xl, yl), (х2, у2) и т. д. и радиусами Rl, R2 и т. д.

% Использование

% where = point(px, ру, [xl, yl, Rl], [x2, y2, R2],...) %where равно 1, если точка попала в какой-либо круг,

О — в противном случае % [where, NC] = point(px, ру, [xl, yl, Rl], [x2, y2, R2],...) ЪNC равно числу кругов, содержащих точку

3> [where, NC, NumsJ = point (рх, ру, [xl, yl, Rl] , [x2, y2, R2],...) ЬВ вектор Nums записываются номера кругов, содержащих точку

% Выделение координат точки из первых двух ячеек

Xpoint = varargin(l);

Ypoint = varargin(2);

% Нахождение числа заданных кругов

% (число ячеек varargin без первых двух)

Ncircle = length(varargin) — 2;

% Извлечение координат центров и радиусов кругов for i = 1:Ncircle

Xcircle(i) = varargin{i + 2}(1);

Ycircle(i) = varargin(i + 2} (2);

Rcircle(i) = varargin{i + 21(3); end

2.Перебирайте все круги в цикле for, запоминая число кругов и их номера, содержащих заданную точку (оператор break уже не нужен).

3.Запишите результаты в соответствующие ячейки массива в зависимости от числа выходных аргументов, с которыми была вызвана файл-функция (используйте nargout для определения их числа и оператор switch для заполнения требуемых ячеек).

Обратитесь к листингу 8.26 в случае возникновения вопросов. Листинг не содержит проверки числа и типа входных параметров и операторов вывода исходных данных в графическое окно. Данные блоки остаются без изменений (см. листинги 8.24 и 8.25).



0 ... 149 150 151 152 153 154 155 ... 365