MATLAB: Detect abrupt change in trajectory (coordinates)

angle changechange detectioncoordinatesMATLABpathtrajectory

I have a trajectory (cartesian) on a timeline (frames) and I need to find abrupt changes in trajectory, i.e. almost 180ยบ. I found this: https://uk.mathworks.com/matlabcentral/answers/177523-detecting-path-trajectory-turns-in-tracking-data
but that script example doesn't seem to work very well for me (select frames in a straight line…) and I don't understand it well enough to fix it.
I have attached a example dataset with 3 columns: x, y (coordinates), frame nb (time). On this example, the first abrupt chang of trajectory should be found at around frame # 37.
I would be very grateful for any help!
Many thanks

Best Answer

  • What about this? Just diff and atan2d
    load sampletrajectory.mat
    tr = table2array(trajectories1); % convert to array
    x = tr(:,2); % x coord
    y = tr(:,3); % y coord
    t = atan2d(diff(y),diff(x)); % angle of each line
    dt = wrapTo180(diff(t)); % angle between lines
    ix = find(abs(dt)>150); % find angle
    cla
    plot(x(ix+1),y(ix+1),'or') % plot the angle
    line(x,y) % plot the data
    hold on
    for i = 1:length(ix)
    text(x(ix(i)+1),y(ix(i)+1),num2str(dt(ix(i))))
    end
    hold off