话不都说,直接动手:
function drawArrow(x,y,lineType,color,ax)
switch nargin
case 2
lineType='arrow';
ax=gca;
color='b';
case 3
ax=gca;
color='b';
case 4
ax=gca;
end
if length(x)<2
disp('input data dim must bigger than 2!!!')
return;
end
dim=length(x);
xlim=ax.XLim;
ylim=ax.YLim;
xlimmin=xlim(1);xlimmax=xlim(2);
ylimmin=ylim(1);ylimmax=ylim(2);
if xlimmin>min(x), xlimmin=min(x);end
if xlimmax<max(x), xlimmax=max(x);end
if ylimmin>min(y), ylimmin=min(y);end
if ylimmax<max(y), ylimmax=max(y);end
ax.XLim = [xlimmin,xlimmax];
ax.YLim = [ylimmin,ylimmax];
xlim=ax.XLim;
ylim=ax.YLim;
%获取图像原点数据
pos=ax.Position;
% 计算缩放比例
x_ratio = pos(3)/(xlim(2)-xlim(1));
y_ratio = pos(4)/(ylim(2)-ylim(1));
%计算缩放后相对原点的距离
x=(x-xlim(1)).*x_ratio;y=(y-ylim(1)).*y_ratio;
%缩放后的坐标
x=x+pos(1);y=y+pos(2);
for i=1:dim-1
annotation(lineType,[x(i) x(i+1)],[y(i) y(i+1)],'Color',color);
end
end
基本思路:
获取当前图片的缩放比例,计算输入点相对图像原点的缩放后的相对距离,然后根据图像原点和相对距离画图。
本代码适用任意坐标的两点间,和多点间用箭头连接的情况,且不要求坐标范围在0-1之间,比较通用。
例子: