0%

MATLAB 绘制标注箭头

MATLAB 绘制标注箭头,支持倾斜角度。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 绘制尺寸标注箭头
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% INPUT
% ax : - 坐标轴对象
% x : - 2x1列向量 或 1x2行向量, 起点和终点的横坐标值
% y : - 2x1列向量 或 1x2行向量, 起点和终点的纵坐标值
% LW_label : - 标量, 尺寸标注线宽
% k_arrow : - 标量, 箭头大小
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% OUTPUT - NONE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 调用示例:
% f1=figure(1);ax1=axes(f1);hold(ax1,'on');axis(ax1,'equal');
% grid(ax1,'on');arrow(ax1,[2,1],[4,3],0.75,0.1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function arrow(ax,x,y,LW_label,k_arrow)

% 绘制颜色
color0=[0,0,1];

% 箭头角度
dx=x(1)-x(2);dy=y(1)-y(2);L=sqrt(dx^2+dy^2);
if L==0
return;
end
phi=atan(dy/dx);
phi(phi<0)=phi+pi;

% 旋转箭头
arrow_tan=100/333;% 箭头开口角度
x_arrow=-[0,1,1]*k_arrow;% 水平向右箭头
y_arrow=[0,arrow_tan,-arrow_tan]*k_arrow;
rotmat=[cos(phi),-sin(phi);sin(phi),cos(phi)];% 旋转矩阵
temp=rotmat*[x_arrow;y_arrow];
x_arrow_R=temp(1,:);x_arrow_L=-x_arrow_R;
y_arrow_R=temp(2,:);y_arrow_L=-y_arrow_R;

% 绘制直线
line(ax,x,y,'LineWidth',LW_label,'Color',color0);

% 绘制箭头
if y(1)>y(2) || (y(1)==y(2) && x(1)>x(2))
patch(ax,'XData',x(1)+x_arrow_R,'YData',y(1)+y_arrow_R,'FaceColor',color0,'EdgeColor',color0);
patch(ax,'XData',x(2)+x_arrow_L,'YData',y(2)+y_arrow_L,'FaceColor',color0,'EdgeColor',color0);
else
patch(ax,'XData',x(2)+x_arrow_R,'YData',y(2)+y_arrow_R,'FaceColor',color0,'EdgeColor',color0);
patch(ax,'XData',x(1)+x_arrow_L,'YData',y(1)+y_arrow_L,'FaceColor',color0,'EdgeColor',color0);
end

end