Я использую Matlab и Psychtoolbox для создания стимулов.
Я хочу вычислить кривизну многоугольной цепочки, состоящей из 300 координат X и Y.
Для этого я Я использовал функцию сравнения, и это вызвало проблему, которая заключается в том, что разрешение кривизны слишком улучшено, что приводит к тому, что значение кривизны будет переворачиваться каждый раз, когда общая кривизна не будет отражать реальную кривизну пути.
Итак, я думаю об обходе как об усреднении 10 координат и использовании усредненных координат для вычисления кривизны. Я полагаю, что для этого усреднения я должен использовать для l oop, но не знаю точно, как реализовать для l oop.
Был бы рад, если бы кто-то помог мне с этой проблемой. А для уточнения c информации я поделюсь своим кодом.
%template for generating random curvilinear line
Nframes = 300;
Dirtemp = 360 * sin(linspace(0,2*pi,Nframes*2));
speed = 5;
trials = 10
for i = 1:trials
randst = ceil(rand*Nframes);
randstart(1,i) = randst;
end
for j = 1:trials
randd = randstart(1,j);
Dirr = Dirtemp(randd:(randd + Nframes -1));
Dir(j,:) = Dirr;
end
%Obtaining coordinates
for k = 1:trials
X(k,:) = speed .* cosd(Dir(k,:));
X(k,:) = round(cumsum(X(k,:)));
Y(k,:) = speed .* sind(Dir(k,:));
Y(k,:) = round(cumsum(Y(k,:)));
end
Это код, который я написал для генерации координат. И я буду использовать этот код для вычисления кривизны
%First derivates
dsx = diff(x);
dsy = diff(y);
ds = sqrt(dsx.^2+dsy.^2);
Tx = dsx./ds;
Ty = dsy./ds;
% Second derivative & curvature
ds2 = 0.5*(ds([end,1:end-1])+ds);
Hx = diff(Tx([end,1:end]))./ds2;
Hy = diff(Ty([end,1:end]))./ds2;
И из-за отсутствия опыта программирования мой код может показаться неуклюжим для глаз экспертов. Поэтому было бы полезно, если бы вы указали на некоторую избыточность.
Чтобы дать читателям четкое понимание, я приложил цифры из Matlab
введите описание изображения здесь
введите описание изображения здесь