Задача построения матрицы с изменяющимися переменными в каждой строке - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь сделать al oop для 4 точек многоугольника, которые я буду определять в моем наборе данных. Я использую lat, lon, dlat и dlon, чтобы сделать эти точки

lat = [35.314166 35.413909 35.533307 35.751982 35.3142 35.1607 35.0475 34.9878 34.9441];
lon = [-119.865953 -119.970299 -120.086757 -120.300046 -119.8659 -119.7068 -119.5583 -119.4711 -119.4029];

dlat = 0.524893450440127;
dlon = 0.73025079017917;

Сначала я хочу сделать al oop для создания 4 точек и сохранить их как первый ряд матрицы b размером (4,4)

Вот матрица, которая мне нужна

b = [p11 p12 p13 p14 ;
     p21 p22 p23 p24 ;
     p31 p32 p33 p34 ;
     p41 p42 p43 p44]  

Вот примеры первых двух точек многоугольника, которые я хотел бы определить:

 p11 = [lon(9) + dlon, lat(9) + dlat]
 p12 = [lon(8) + dlon, lat(8) + dlat]
 p13 = [lon(8) - dlon, lat(8) - dlat]
 p14 = [lon(9) - dlon, lat(9) - dlat]

 p21 = [lon(8) + dlon, lat(8) + dlat]
 p22 = [lon(7) + dlon, lat(7) + dlat]
 p23 = [lon(7) - dlon, lat(7) - dlat]
 p24 = [lon(8) - dlon, lat(8) - dlat]

Я застрял с определением этого для l oop, я даже не знаю, является ли решение для l oop. Пожалуйста, помогите мне. Спасибо!

1 Ответ

0 голосов
/ 21 января 2020

Вот два решения. Тот, где я пытался придерживаться как можно ближе к не l oop коду, который вы мне показали:

s=numel(lon); % I guess we start at 9 because lon has 9 elements?
b=zeros(4,4,2);
for ix=1:size(b,1)
    %Calculate the indices of lon and lat
    index=s-ix;
    %very similar to the example you showed, insert the data into the
    %matrix
    b(ix,1,:)=[lon(index+1) + dlon, lat(index+1) + dlat];
    b(ix,2,:)=[lon(index)   + dlon, lat(index)   + dlat];
    b(ix,3,:)=[lon(index)   - dlon, lat(index)   - dlat];
    b(ix,4,:)=[lon(index+1) - dlon, lat(index+1) - dlat];
end

А вот альтернатива, которая немного уменьшает код.

s=numel(lon); % I guess we start at 9 because lon has 9 elements?
b=zeros(4,4,2);
for ix=1:size(b,1)
    %Calculate the indices of lon and lat
    index=s-ix+[1,0,0,1];
    %Build up one slice
    h=([lon(index);lat(index)]+[dlon;dlat].*[1,1,-1,-1]).';
    %insert h into the matrix. h is wrong way round, so it is transposed.
    b(ix,:,:)=h.';
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...