Как использовать функцию inpolygon в MATLAB без применения цикла for? - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть координаты (x = lon_points, y = lat_points) для набора точек.Все, что я хочу проверить, это то, что эти точки расположены снаружи или внутри / на наборе сетчатых блоков 0,5x0,5, координаты центра которых задаются с помощью (x = lon_gridbox, y = lat_gridbox).

КодТо, что я в настоящее время работаю внутри цикла for, как показано ниже.Хотя я выполняю эту операцию для огромного числа блоков сетки, для простоты представления я предоставляю здесь только код для ограниченного числа блоков сетки.

Я хочу выполнить эту операцию без использования цикла for.Причина в том, что огромное количество блоков сетки, над которыми я на самом деле работаю, отнимает много времени.Может кто-нибудь предложить способ выполнить эту операцию быстрее, избегая цикла for?

lat_points=[45.40927; 45.40961; 45.40995; 45.41029; 45.41063; 45.41097; 45.41131; 45.41165]; % y coordinates of the points 
lon_points=[-50.00022; -50.05021; -50.10021; -50.15020; -50.20019; -50.25019; -50.30018; -50.35018]; % x coordinate of the points
lon_gridbox=[-84; -84;-84;-83.5;-83.5;-83.5;-83.5;-83.5;-83;-83;-83;-83;-83;-83;-82.5]; % x coordinate for the center of each 0.5x0.5 grid box
lat_gridbox=[27; 27.5;28;26.5;27;27.5;28;28.5;26.5;27;27.5;28;28.5;29;26.5]; % y coordinate for the center of each 0.5x0.5 grid box
xv=[lon_gridbox(:,1)-0.25,lon_gridbox(:,1)+0.25,lon_gridbox(:,1)+0.25,lon_gridbox(:,1)-0.25,lon_gridbox(:,1)-0.25];% x coordinates of the vertices for each 0.5x0.5 grid box                                                                                                                                                                                      
yv=[lat_gridbox(:,1)-0.25,lat_gridbox(:,1)-0.25,lat_gridbox(:,1)+0.25,lat_gridbox(:,1)+0.25,lat_gridbox(:,1)-0.25];% y coordinates of the vertices for each 0.5x0.5 grid box
int=[];        
for n=1:length(lat_gridbox(:,1))
   [on in]  = inpolygon(lat_points(:,1),lon_points(:,1),xv(n,:),yv(n,:)); % checking if the points fall outside or inside/on the grid box defined by the vertices, xv and yv.
   int=[int;[lon_gridbox(n,1),lat_gridbox(n,1),in',on']];
end  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...