Dear all,
I have some difficulty with assigning points into multiple square polygons. I have data files containing (x,y,z) coordinates of every particle. With the command inpolygon I locate the particles that are inside a specified polygon:
%% Loading the data
rhoPart = 2540;files = dir(fullfile(uigetdir,'*.data*'));[~,Index] = natsort({files.name});files = files(Index);expData = cell(length(files),1);k = 1;for i = 1:length(files) fid = fopen(fullfile(files(i).folder,files(i).name),'r'); %% Reading the data % Read all the data from the file
dataRead = textscan(fid,'%f %f %f %f %f %f %f %f %f %f %f %f %f %f','HeaderLines',1); frewind(fid); % Write headerline N, time, xmin, ymin, zmin, xmax, ymax, zmax
runData{k} = strsplit(fgetl(fid), ' '); % Write only the x, y, and z components of the particles, particle radius,
% z component+ particle radius and volume of the particle
expData{k} = [dataRead{1}(:,1) dataRead{2}(:,1) dataRead{3}(:,1) dataRead{7}(:,1) dataRead{3}(:,1)+dataRead{7}(:,1) rhoPart*(4/3)*pi*(dataRead{7}(:,1).^3)]; % Write only the vx,vy,vz of the particles and magnitude
velData{k} = [dataRead{4}(:,1) dataRead{5}(:,1) dataRead{6}(:,1) sqrt(dataRead{4}(:,1).^2 + dataRead{5}(:,1).^2 + dataRead{6}(:,1).^2)]; fclose(fid); k = k + 1;end%% Classify (into a structure)
% Number of simulation runs
N_run = 1;% Number of .data files to be extracted of every simulation run
N_files = 2745;k = 1;for i = 1:N_run for j = 1:N_files runData_r{j,i} = str2double(runData{k}); expData_r{j,i} = expData{k}; velData_r{j,i} = velData{k}; k = k + 1; endend% Polygon
xc = expData_r{1800,1}(:,1);zc = expData_r{1800,1}(:,1);xv = [-0.0184 -0.0061 -0.0061 -0.0184 -0.0184];zv = [0.2857 0.2857 0.2755 0.2755 0.2857];in = inpolygon(xc,zc,xv,zv);figureplot(xv,zv,'LineWidth',2)hold onplot(xc(in),zc(in),'r+')
I get the following results:
But I want to do this procedure for a whole mesgrid. Thus, locate the particles of every gridbin (i.e. multiple polygons). How can I do that?
Best Answer