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

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

ячейкаlj

ячейка 2J

3j

ячейка 4J

ячейка 5J

ячейка fij

рх

PY

[xl yl Rl]

[x2 y2 R2]

[x3 y3 R3]

[x4 y4 R4]

Рис. 8.8. Хранение аргументов в varargin

Массив varargin является единственным входным аргументом файл-функции, ее заголовок выглядит так:

function where = point(varargin)

Доступ к входным аргументам, т. е. ячейкам, производится при помощи заключения индекса в фигурные скобки и последующим обращении с содержимым в зависимости от типа хранимых данных. Например, varargin(i) содержит абсциссу точки, varargin(2) — ординату, varargin{5} (3) — радиус третьего круга и т. д.

Напишите файл-функцию point, придерживаясь следующего алгоритма.

1.Нахождение длины массива varargin при помощи length.

2.Проверка длины varargin, если она меньше трех, то задано недостаточно аргументов — выход по ошибке (используйте error).

3.Извлечение из varargin координат точки в переменные.

4.Извлечение из varargin координат центров кругов и радиусов в три вектора подходящей длины (примените цикл for).

5.Перебор всех кругов, вычисление расстояния от центра круга до точки и сравнение его с радиусом. Если найден хотя бы один круг, в который попала заданная точка, то выходному аргументу следует присвоить значение, равное единице, и прекратить перебор выходом из цикла командой

break.

Листинг 8.23 содержит текст требуемой файл-функции, снабженный необходимыми комментариями.

.......------ ---------------------..................................шн и. L,............................I

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

function where = point(varargin)

% файл-функция определяет попадание точки с заданными % координатами (рх, ру) в круги с центрами % в (xl, yl), (х2, у2) и т. д. и радиусами Rl, R2 и т. д. % Возвращает

%1 в случае попадания


О в случае непопадания % Использование where = point(рх, ру, [xl, yl, Rl], [х2, у2, R2], ...)

% Проверка числа входных аргументов (числа ячеек varargin) if length(varargin) < 3

error(Недостаточно входных аргументов)

end

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

Xpoint = varargin(l);

Ypoint = varargin(2);

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

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

Ncircle = length(varargin) — 2;

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

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

end

6Полагаем where =0, т. е. пока нет ни одного нужного круга where = 0;

% Перебор кругов в цикле for i = 1:Ncircle

% Вычисление расстояния от точки до центра текущего круга dist = sqrt((Xpoint - Xcircle(i))Л2 + (Ypoint - Ycircle(i))"2); % Сравнение расстояния с радиусом круга if dist <= Rcircle(i)

where =1; % Требуемый круг найден break% Дальше проверять нет смысла

end

end

Дополните файл-функцию point исследованием правильности задания входных аргументов. Следует убедиться, что первые две ячейки массива varargin содержат вещественные числа, а остальные — векторы длиной, равной трем, также состоящие из вещественных чисел (листинг 8.24). Используйте функции isnumeric (проверяет, является ли ее входной аргумент числовым массивом) и isreal (проверяет, является ли ее входной аргумент вещественным массивом или массивом строк).


. Листинг 6.24, Проверка входных аргументов файл-функции point

if ~isnumeric(varargin{l}> -isreal(vararginCl)) ... max(size(varargin{1}) ~= 1) error(Аргумент N1 должен быть вещественным числом]

end

if ~isnumeric(varargin{2}) -isreal(varargin{2}) ... max(size(varargin{2}) -= 1) error(Аргумент N2 должен быть вещественным числом)

end

for i = 3:length(varargin)

if ~isnumeric(varargin{i)) -isreal(varargin{i}) ...

min(size(varargin{i})) -= 1 length(varargin(i>) ~=3 ... varargin{i}(3) < 0 strl = Аргумент N; Str2 = num2str(i);

str3 = долж. быть вещ. вектором длиной 3 с третьим эл-том >= С; strerror = strcat(strl, str2, str3); error(s trerror)

end

end

Операторы, приведенные в листинге 8.24, следует поместить после проверки длины массива ячеек varargin. Теперь файл-функция point защищена от неправильного использования, например:

» point (1, 1, [0, 3, -1]) ??? Error using ==> point

Аргумент N3 долж. быть вещ. вектором длиной 3 с третьим эл-том >= О

Усовершенствуйте файл-функцию point, добавив операторы, выводящие в графическое окно заданную точку и круги для получения наглядного результата. Очевидно, что требуется применить команды plot для построения параметрически заданных функций (окружностей) и заданной точки (визуализация параметрически заданных функций одной переменной описана в разд. "Графики параметрических и кусочно-заданных функций" главы 3).

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



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