八年+的MATLAB算法开发经验,居然被一个箭头难倒?

八年+的MATLAB算法开发经验,居然被一个箭头难倒?

技术教程gslnedu2025-08-05 0:35:184A+A-

最近做到一个优化算法项目,最终需要绘制结果图,且途中的点之间需要用箭头来做连接。然而发现没有现成的内置函数可用,没办法既然没有轮子,咱们就自己动手造。

好在MATLAB中有这么一个函数——annotation,为我的造轮之路提供了很大的便利。annotation是用来做图上标注的,其入参中就包含坐标,但是要求坐标范围在0-1。也就是说这个函数的入参不能用实际的坐标点。

进一步分析发现,annotation之所以要求输入的坐标在0-1,是因为它是基于当前图窗的位置和尺寸参数来绘制箭头的,这样的话,思路就清晰了:将实际坐标映射到当前图窗的尺寸范围内,再作为annotation函数的入参绘制箭头即可。话不多说,直接上代码:

clc

clear

close all

x0=0:pi/5:2*pi;

y0=10.*sin(x0);

loc=[x0' y0'];

figure(1)

plot(loc(:,1),loc(:,2),'kp');

ax=gca;

%计算实际坐标x轴跨度

dex=ax.XLim(2)-ax.XLim(1);

%计算实际坐标与当前图窗的缩放比例

bx=dex/ax.Position(3);

%计算实际坐标y轴跨度

dey=ax.YLim(2)-ax.YLim(1);

%计算实际坐标与当前图窗的缩放比例

by=dey/ax.Position(4);

de=dex/60;

hold on

for j=1:size(loc,1)

if j>1

%根据缩放比例定位实际坐标点在当前图窗上的位置

x=ax.Position(1)+([loc(j-1,1) loc(j,1)]-ax.XLim(1))./bx;

y=ax.Position(2)+([loc(j-1,2) loc(j,2)]-ax.YLim(1))./by;

annotation('arrow',x,y,'Color','r');

end

text(loc(j,1)+de,loc(j,2),num2str(j))

end

hold off

效果如下:

从图上可以看出,完美连接所有点。轮子造完,可以拿去造车了^_^

点击这里复制本文地址 以上内容由朽木教程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

朽木教程网 © All Rights Reserved.  蜀ICP备2024111239号-8