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