一、源代码
今天要画一个带箭头的图,就百度了一下找了一个画箭头的代码,源码如下,参考https://zhidao.baidu.com/question/99233757.html
function arrow(P,V,color)
%二维空间中画箭头
% 输入:P=[x0,y0],V=[a,b]
%将以P(x0,y0)为起点,以(x0+a,y0+b)为终点画出箭头
%可以进一步修改为三维空间到箭头,或者是以P为起始点,V为终点的箭头图像
if nargin < 3
color = 'b';
end
x0 = P(1);y0 = P(2);
a = V(1); b = V(2);
l = max(norm(V), eps);
u = [x0 x0+a]; v = [y0 y0+b];
hchek = ishold;
plot(u,v,color)
hold on
h = l - min(.2*l, .2) ;v = min(.2*l/sqrt(3), .2/sqrt(3) );
a1 = (a*h -b*v)/l;
b1 = (b*h +a*v)/l;
plot([x0+a1, x0+a], [y0+b1, y0+b], color)
a2 = (a*h +b*v)/l;
b2 = (b*h -a*v)/l;
plot([x0+a2, x0+a], [y0+b2, y0+b], color)
if hchek == 0
hold off
end
使用方法就是画a到b的箭头,就是arrow(a,b-a),效果如下,a为[-1,1],b为[0,2],程序调用为:arrow([-1,1],[1,1])
二、箭头大小改进
由于有的时候需要调节箭头大小,使图看起来漂亮,我改了一下函数,加入了调节大小的方法
改进前 改进后
三、改进代码
function arrow(P,V,color,L)
%二维空间中画箭头
% 输入:P=[x0,y0],V=[a,b]
%将以P(x0,y0)为起点,以(x0+a,y0+b)为终点画出箭头
%可以进一步修改为三维空间到箭头,或者是以P为起始点,V为终点的箭头图像
if nargin < 3
color = 'b';
end
x0 = P(1);y0 = P(2);
a = V(1); b = V(2);
l = max(norm(V), eps);
u = [x0 x0+a]; v = [y0 y0+b];
hchek = ishold;
plot(u,v,color)
hold on
h = (l - min(.2*l, .2)*L );v = min(.2*l/sqrt(3), .2/sqrt(3) )*L;
a1 = (a*h -b*v)/l;
b1 = (b*h +a*v)/l;
plot([x0+a1, x0+a], [y0+b1, y0+b], color)
a2 = (a*h +b*v)/l;
b2 = (b*h -a*v)/l;
plot([x0+a2, x0+a], [y0+b2, y0+b], color)
if hchek == 0
hold off
end