我有一个循环,我继续使用ginput将点插入图中。我希望循环运行直到用户按下一个键,继承我所拥有的:
function enter_points()
f = figure();
axis([-1 1 -1 1]);
coorX = [];
coorY = [];
while 1
[x, y] = ginput(1);
coorX = [coorX x];
coorY = [coorY y];
waitforbuttonpress;
key = get(f,'CurrentCharacter');
if (key == 'e')
display('End of cycle.')
break;
else
display('Enter next point')
end
end
coor = [transpose(coorX) transpose(coorY)];
display(size(coor));
display(coor);
end
此代码的问题是,我必须按一个键才能继续输入分数。另一个问题是,Matlab在运行此代码时有时会冻结(我不确定代码是原因还是别的东西)。如何检测按“输入”而不是“e”?谢谢你的帮助
答案 0 :(得分:3)
AFAIK,在OOP和面向事件的编程中处理问题的一般方法是生成一个给定事件的监听器,在你的情况下是一个类似keypress
的事件。定义侦听器时,通常会在生成事件时传递要调用的callback函数(-back)。
可以定义听众,例如在matlab GUI(reference)中。尽管如此,我不确定在控制台级别生成事件时可以做到这一点。
答案 1 :(得分:3)
为什么不使用内置:
[X,Y] = ginput在返回之前收集无限数量的积分 键被按下了。
答案 2 :(得分:2)
bdecaf已经给了你最简单的答案,但你也可以尝试这些改变:
1)改变这个:
[x, y] = ginput(1);
到此:
[x, y, key] = ginput(1);
ginput还会返回你按下的键,甚至还有哪个鼠标键(1:LB,2:RB或3:MB)。
2)删除这些行:
waitforbuttonpress;
key = get(f,'CurrentCharacter');
通过这些更改,您的日常工作应该按预期工作。点之间没有暂停,按[e]时退出。