我正在尝试创建一个执行以下操作的回调函数:
我想我必须使用" impoint"生成可拖动点并使用" bsxfun"对于捕捉。我在类似的上下文中使用" imline"如果有任何帮助,可以在下面提供这些功能。
function calc_slope(handle,event)
axis_h = findobj(gcf,'Type','axes');
line = get(gco);
xdata = line.XData;
ydata = line.YData;
tb_h = text(0,0,'');
fcn_constr = @(pos) imline_snap(pos, [xdata(:) ydata(:)],tb_h);
imline_h = imline(axis_h, 'PositionConstraintFcn', fcn_constr);
addlistener(imline_h, 'ObjectBeingDestroyed', @(obj,event) delete(tb_h));
function constr_pos = imline_snap(new_pos, positions, tb_h)
[~, ind1] = min(sum(bsxfun(@minus, new_pos(1,:), positions).^2, 2));
[~, ind2] = min(sum(bsxfun(@minus, new_pos(2,:), positions).^2, 2));
constr_pos = [positions(ind1,:); positions(ind2,:)];
set(tb_h, 'String',...
sprintf([' \\DeltaY/\\DeltaX = ',...
num2str((constr_pos(2,2)-constr_pos(1,2))/(constr_pos(2,1)-constr_pos(1,1))),...
'\n \\DeltaX = ',num2str(constr_pos(2,1)-constr_pos(1,1)),...
', \\DeltaY = ',num2str(constr_pos(2,2)-constr_pos(1,2))]),...
'Position', mean(constr_pos));
核心功能是由@Luis Mendo编写的,即使现在我也无法理解所有这些功能:所有功能都归功于他。有人可以修改脚本或从头开始创建以解决上述问题吗?
答案 0 :(得分:0)
我使用了datacursormode和getCursorInfo。没有行或自动更新,但点被捕捉和拖动。