我的问题很简单,有没有人知道让matlab的ginput忽略同一位置的后续点击的方法?
我已经想到了一些可能性,比如一个 for 循环,它检查存储的数组是否有相同的值并删除它们,但是后来我遇到了 for 循环的长度问题(因为数组通过删除东西来改变大小),所以不起作用。我想应该有一些简单的解决方法,但我还没有想出一个..
我的问题很简单,有没有人知道让matlab的ginput忽略同一位置的后续点击的方法?
我已经想到了一些可能性,比如一个 for 循环,它检查存储的数组是否有相同的值并删除它们,但是后来我遇到了 for 循环的长度问题(因为数组通过删除东西来改变大小),所以不起作用。我想应该有一些简单的解决方法,但我还没有想出一个..
简单的代码,但更多的用户努力版本
%%// Tolerance
TOL = 5;
%%// Start selecting points for an unlimited number, until Return key is pressed
[x y ] = ginput;
xy = [x y];
xy(sum(abs(diff([x y])),2)<TOL,:) = []; %%// Remove the "nearby points"
天真和更安全的方法
%%// Tolerance
TOL = 5;
%%// Number of points to be clicked
N = 4;
%%// Clicked points array to be stored here
xy_all = zeros(N,2);
%%// First point
[x y ] = ginput(1);
cmp1 = [x y];
xy_all(1,:) = [x y];
%%// Second point onwards
k=2;
while k<=N
[x y ] = ginput(1);
if sum(sum(abs([x y]-cmp1)))>TOL
cmp1 = [x y];
xy_all(k,:) = [x y];
k= k+1;
end
end