22 views (last 30 days)

Show older comments

Adam Danz
on 17 Jul 2019

Following my example in my answer, here's how to calculate the distance between point 'p' in frame 'f' to all points in frame 'f+1'.

The example shows distances between the 3rd point of frame 4 and all points in frame 5.

f = 4; %frame number 1:1000

p = 3; %point number (within frame) 1:30

% Find distance between point p of frame f and all points in frame f+1

fIdx = T.Frame == f; %index for frame f

f2Idx = T.Frame == f+1; %index for frame f+1

pIdx = max(find(fIdx,p)); %index of point p in frame f

d = pdist2([T.centreX(pIdx),T.centreY(pIdx)],[T.centreX(f2Idx),T.centreY(f2Idx)])';

Note that d(p) should be 0 since the (x,y) coordinates do not change between frames.

Adam Danz
on 15 Jul 2019

Edited: Adam Danz
on 16 Jul 2019

If I understand your question correctly, you want to measure the distance each (x,y) coordinate travels between frames. Is that correct? It looks like the (x,y) centers of your circles do not change between frames. For example, the first (x,y) coordinate at frame 1 is (144.09, 131,56) and this coordinate is the same for frame 2, 3, etc... When I run the code below, the distance is always 0. Maybe I'm not understanding your problem.

%% Import data and store in table "T"

opts = spreadsheetImportOptions("NumVariables", 4);

opts.Sheet = "in";

opts.DataRange = "A2:D30001";

opts.VariableNames = ["centreX", "centreY", "Radius", "Frame"];

opts.SelectedVariableNames = ["centreX", "centreY", "Radius", "Frame"];

opts.VariableTypes = ["double", "double", "double", "double"];

T = readtable("C:\Users\adanz\Documents\MATLAB\savehere\matlabCentralDocs_trash\DataTable_SER.xlsx", opts, "UseExcel", false);

%% Calculate distance between frames

nFrames = max(T.Frame);

distFcn = @(x1,x2,y1,y2)sqrt((x2-x1).^2 + (y2-y1).^2); %distance function

dist = nan(sum(T.Frame == 1), nFrames-1); %assumes there are an equal number of frames for all frames

for i = 2:nFrames

% Index for frame i

idx2 = T.Frame == i;

% Index for frame i-1

idx1 = T.Frame == i-1;

% Calculate distance

dist(:,i-1) = distFcn(T.centreX(idx2),T.centreX(idx1),T.centreY(idx2),T.centreY(idx1));

end

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!