我如何读取和存储鼠标坐标,而其余功能却没有做太多,几乎停滞不前?
How can i read and store mouse coordinates while the rest of the function does not do much, pretty much stall?
所以我下面有一个 matlab 函数 returns [x y time_elapsed] 坐标从 'start' 到 'target' 的矩阵,'target' 是当它与它的距离为 acc_length 时到达。 time_elapsed 是为了帮助我获取速度配置文件。
目前,这在大约每 0.01 秒采样一次时工作正常,并且从 'start' 开始运动时有 2 秒的暂停。
我的问题是我怎样才能做同样的事情 - 让用户在到达 'start' 位置后等待 2 秒,而不是暂停程序,我怎样才能继续阅读鼠标坐标(在 2s 周期内),而 2s 没有任何有用的变化?
P.S。我想得到这些坐标来计算用户一开始的精度。
function arr = pmove(start, target, acc_length)
uimenufcn(gcf,'WindowCommandWindow');
arr = [];
checkStart = 1;
checkEnd = 0;
while checkStart
pt = get(0,'PointerLocation');
pt = [pt(1) - 1920/2, pt(2) - 1080/2];
d = pdist( [start; pt] );
if ~checkEnd & d <= acc_length;
disp('Start moving to target after 2 seconds.')
pause(2);
pt = get(0, 'PointerLocation');
pt = [pt(1) - 1920/2, pt(2)-1080/2, 0];
arr = cat(1, arr, pt);
checkEnd = 1;
tic;
continue;
end
if checkEnd
d = pdist( [target; pt] );
t_elapsed = toc;
pt = [pt , t_elapsed];
arr = cat(1, arr, pt);
if d <= acc_length
checkStart = 0;
end
end
if ~isempty(arr)
figure(gcf)
hold on;
plot(arr(:,1), arr(:,2) );
%drawnow;
axis equal;
end
pause(0.01);
end
结束
您可以将 pause(2)
行替换为:
for i=1:200
pt2 = get(0, 'PointerLocation');
% do your calculation
pause(0.01);
end
我正在使用另一个 while-true 循环并检查 time_elapsed,如果它长于 2.1 秒(用户的容差为 0.1 秒),我将跳出循环。在此期间,我每 0.01 秒得到一次指针坐标,运行 我的计算。
tic;
while 1
pt2 = get(0,'PointerLocation');
% calculation
time_elaps = toc;
if time_elaps > 2.1 % tolerance of 0.1s
break;
end
pause(0.01);
end
所以我下面有一个 matlab 函数 returns [x y time_elapsed] 坐标从 'start' 到 'target' 的矩阵,'target' 是当它与它的距离为 acc_length 时到达。 time_elapsed 是为了帮助我获取速度配置文件。
目前,这在大约每 0.01 秒采样一次时工作正常,并且从 'start' 开始运动时有 2 秒的暂停。
我的问题是我怎样才能做同样的事情 - 让用户在到达 'start' 位置后等待 2 秒,而不是暂停程序,我怎样才能继续阅读鼠标坐标(在 2s 周期内),而 2s 没有任何有用的变化?
P.S。我想得到这些坐标来计算用户一开始的精度。
function arr = pmove(start, target, acc_length)
uimenufcn(gcf,'WindowCommandWindow');
arr = [];
checkStart = 1;
checkEnd = 0;
while checkStart
pt = get(0,'PointerLocation');
pt = [pt(1) - 1920/2, pt(2) - 1080/2];
d = pdist( [start; pt] );
if ~checkEnd & d <= acc_length;
disp('Start moving to target after 2 seconds.')
pause(2);
pt = get(0, 'PointerLocation');
pt = [pt(1) - 1920/2, pt(2)-1080/2, 0];
arr = cat(1, arr, pt);
checkEnd = 1;
tic;
continue;
end
if checkEnd
d = pdist( [target; pt] );
t_elapsed = toc;
pt = [pt , t_elapsed];
arr = cat(1, arr, pt);
if d <= acc_length
checkStart = 0;
end
end
if ~isempty(arr)
figure(gcf)
hold on;
plot(arr(:,1), arr(:,2) );
%drawnow;
axis equal;
end
pause(0.01);
end
结束
您可以将 pause(2)
行替换为:
for i=1:200
pt2 = get(0, 'PointerLocation');
% do your calculation
pause(0.01);
end
我正在使用另一个 while-true 循环并检查 time_elapsed,如果它长于 2.1 秒(用户的容差为 0.1 秒),我将跳出循环。在此期间,我每 0.01 秒得到一次指针坐标,运行 我的计算。
tic;
while 1
pt2 = get(0,'PointerLocation');
% calculation
time_elaps = toc;
if time_elaps > 2.1 % tolerance of 0.1s
break;
end
pause(0.01);
end