Извлечение данных из слоев карты
возвращает массив ячеек из матриц для данных на каждом слое заданного mapData
= getMapData(map
)multiLayerMap
объект. Для двоичных слоев или слоев карты заполнения значения этой функции передаются в getOccupancy
функция. mapData
возвращается как массив ячеек матриц для каждого слоя.
принимает mapData
= getMapData(map
,layername
,layerinputs
)layerinputs
аргументы и передает их в getMapData
функция объекта для заданного имени слоя карты. Для доступа к отдельным камерам или блокам данных в мире, локальных, или координатах сетки, смотрите синтаксисы getMapData
.
The multiLayerMap
Объект позволяет группировать несколько слоев карты и задавать поведение для этих слоев при настройке и получении данных. Используя отдельные слои карты, можно хранить различные данные карты и задавать различные виды поведения для каждого. Можно также задать SetTransformFcn
и GetTransformFcn
указатели на функцию для слоя карты, так что зависимости создаются между слоями. В этом примере показано, как хранить данные на уровне карты и реализовывать прослушиватели событий, которые обновляют другие карты. Эти карты сохраняют, сколько раз данные обновляются или обращаются.
Зависимые слои
Создайте два независимых слоя карты.
mapAccessed = mapLayer(zeros(10,10),'LayerName','GetListener'); mapModified = mapLayer(zeros(10,10),'LayerName','SetListener');
Задайте указатели на функцию для функций get и set transform, используемых на слое основной карты. Эти функции увеличивают значение местоположения сетки, когда вы получаете или устанавливаете данные карты в карте входа mainMap
. Для получения информации о реализации функции см. раздел «Указатели на функции прослушивателя».
setHookFcn = @(mainMap,values,varargin)exampleHelperSetHookFcn(mapModified,mainMap,values,varargin{:}); getHookFcn = @(mainMap,values,varargin)exampleHelperGetHookFcn(mapAccessed,mainMap,values,varargin{:});
Создайте слой основной карты со значениями по умолчанию 0,5. Задайте указатели на функцию, чтобы создать папки слоев.
map = mapLayer(repmat(0.5,10,10),... 'GetTransformFcn',getHookFcn,... 'SetTransformFcn',setHookFcn);
Добавьте все карты к одному и тому же multiLayerMap
объект.
mapLayers = multiLayerMap({map,mapAccessed,mapModified});
Установите (0,0) расположение карты со значением нуля с помощью setMapData
функция объекта от map
.
setMapData(map,[0 0],0)
Проверяйте это mapModified
увеличили их значение.
getMapData(mapModified,[0 0])
ans = 1
Получите данные, которые вы только что установили на слое основной карты. Возвращается ожидаемое значение нуля.
getMapData(map,[0 0])
ans = 0
Проверяйте это mapAccessed
увеличили их значение.
getMapData(mapAccessed,[0 0])
ans = 1
Обновите всю карту с помощью матрицы значений. Также получите доступ к данным.
setMapData(map,rand(10,10)) getMapData(map)
ans = 10×10
0.6443 0.2077 0.3111 0.5949 0.0855 0.9631 0.0377 0.1068 0.0305 0.1829
0.3786 0.3012 0.9234 0.2622 0.2625 0.5468 0.8852 0.6538 0.7441 0.2399
0.8116 0.4709 0.4302 0.6028 0.8010 0.5211 0.9133 0.4942 0.5000 0.8865
0.5328 0.2305 0.1848 0.7112 0.0292 0.2316 0.7962 0.7791 0.4799 0.0287
0.3507 0.8443 0.9049 0.2217 0.9289 0.4889 0.0987 0.7150 0.9047 0.4899
0.9390 0.1948 0.9797 0.1174 0.7303 0.6241 0.2619 0.9037 0.6099 0.1679
0.8759 0.2259 0.4389 0.2967 0.4886 0.6791 0.3354 0.8909 0.6177 0.9787
0.5502 0.1707 0.1111 0.3188 0.5785 0.3955 0.6797 0.3342 0.8594 0.7127
0.6225 0.2277 0.2581 0.4242 0.2373 0.3674 0.1366 0.6987 0.8055 0.5005
0.5870 0.4357 0.4087 0.5079 0.4588 0.9880 0.7212 0.1978 0.5767 0.4711
Проверяйте это mapModified
и mapAccessed
увеличили их значения.
getMapData(mapModified)
ans = 10×10
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 1 1 1 1 1 1 1 1 1
getMapData(mapAccessed)
ans = 10×10
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
2 1 1 1 1 1 1 1 1 1
Нижнее левое положение возвращает два, а все другие значения равны единице. Это подтверждает, что функции прослушивателя работают по назначению.
Указатели на функции прослушивателя
Эти функции реализуют вспомогательные функции get и set example, которые обновляют другие слои карты.
function valuesOut = exampleHelperSetHookFcn(modifiedMap,sourceLayer,valueIn,varargin) % Pass output through valuesOut = valueIn; % If no additional inputs are passed, return immediately. if numel(varargin) == 0 return; else % Otherwise, increment the value in the modifiedMap. if numel(varargin) == 1 currentValue = getMapData(modifiedMap); setMapData(modifiedMap,currentValue+1); else currentValue = getMapData(modifiedMap,varargin{1},varargin{3:end}); % setMapData syntax <<<<>>>> setMapData(modifiedMap,varargin{1},currentValue+1,varargin{3:end}); end end end function data = exampleHelperGetHookFcn(accessedMap,sourceLayer,valuesIn,varargin) data = valuesIn; % If no additional inputs are passed, check if the values in if numel(varargin) == 0 if isequal(size(valuesIn),sourceLayer.DataSize) % Increment the depedent map. currentValue = getMapData(accessedMap); setMapData(accessedMap,currentValue+1); end else currentValue = getMapData(accessedMap,varargin{:}); setMapData(accessedMap,varargin{1},currentValue+1,varargin{3:end}); end end
map
- Многослойная картаmultiLayerMap
объектМногослойная карта, заданная как multiLayerMap
объект.
layername
- Имя слоя MapИмя слоя Map, заданное как строковый скаляр или символьный массив. Слои map имеют свое имя, заданное при создании multiLayerMap
объект.
layerinputs
- входы переменной длины для отображения слояvarargin
Входы переменной длины getMapData
функция слоя карты, заданная как varargin
. Чтобы задать отдельные камеры или блоки данных в мировых, локальных или сетчатых координатах, смотрите синтаксисы getMapData
.
mapData
- Значения данных с слоя картыЗначения данных с слоя карты, возвращенные как матрица. По умолчанию функция возвращает все данные на слое как M -by- N -by- DataDims матрицу. M и N являются высотой и шириной сетки соответственно. DataDims размерности картографических данных, map.DataSize(3,:)
.
Для других синтаксисов данные карты могут быть даны как массив значений с размером N -by - DataDims или как субрегион полной матрицы.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.