EDA365电子论坛网
标题:
用Matlab绘制任意两点之间带箭头的直线
[打印本页]
作者:
mutougeda
时间:
2020-3-9 13:29
标题:
用Matlab绘制任意两点之间带箭头的直线
工作环境
+ w' H. o+ ~ C# P1 K+ }7 |
. N# N3 L* A+ C; _, s
1,开发环境:Matlab 2012b win32
2,编程语言:Matlab
3 }" o, K/ b- T1 J! `6 r, h
* C _+ z7 |1 O
0 L4 S1 d) B( y2 p; L2 c1 e! W
最近需要使用matlab绘制带箭头的直线,发现如下方式可以绘制带箭头的直线
, @2 H% L& u% z6 \3 o
* ~ q8 d4 |1 h- ?0 P
1.调用annotation函数绘制二维箭头annotation函数用来在当前图形窗口建立注释对象(annotation对象),它的调用格式如下:
(1) annotation(annotation_type) % 以指定的对象类型,使用默认属性值建立注释对象。
(2) annotation('line',x,y) % 建立从(x(1), y(1))到(x(2), y(2))的线注释对象。
(3) annotation('arrow',x,y) % 建立从(x(1), y(1))到(x(2), y(2))的箭头注释对象。
(4) annotation('doublearrow',x,y)% 建立从(x(1), y(1))到(x(2), y(2))的双箭头注释对象。
(5) annotation('textarrow',x,y) % 建立从(x(1),y(1))到(x(2),y(2))的带文本框的箭头注释对象
(6) annotation('textbox',[x y w h]) % 建立文本框注释对象,左下角坐标(x,y),宽w,高h.
(7) annotation('ellipse',[x y w h]) % 建立椭圆形注释对象。
(8) annotation('rectangle',[x y w h])% 建立矩形注释对象。
(9) annotation(figure_handle,…) % 在句柄值为figure_handle的图形窗口建立注释对象。
(10) annotation(…,'PropertyName',PropertyValue,…) % 建立并设置注释对象的属性。
(11) anno_obj_handle = annotation(…) % 返回注释对象的句柄值。
( J9 a5 ^- w( F D# K6 C4 Y
- |% Q0 l3 @6 S3 R! O1 a
8 |7 J. q' N. q
发现annotation绘制带箭头的直线还挺好用,但是唯一的不足就是需要坐标系在[0,1]范围内的标准坐标系,其他坐标系中绘制会报错!!!
0 `) y- |- a) b1 r( j
, a7 P1 o; U2 C9 n% F
于是自己写了一个函数来绘制带箭头的直线,函数如下:
" v# d ?1 t& `. R
3 D7 L! g% C+ C+ H# H: c
%% 绘制带箭头的直线
function drawArrow(start_point, end_point,arrColor,lineColor,arrowSize,lineWidth)
% 从start_point到end_point画一箭头,arrColor箭头颜色,arrSize,箭头大小
%判断参数多少
switch nargin
case 2
arrColor = 'r';
lineColor = 'b';
arrowSize = 2;
lineWidth = 1;
case 3
lineColor = 'b';
arrowSize = 2;
lineWidth = 1;
case 4
arrowSize = 2;
lineWidth = 1;
case 5
lineWidth = 1;
end
K = 0.05; % 箭头比例系数
theta = pi / 8; % 箭头角度
A1 = [cos(theta), -sin(theta);
sin(theta), cos(theta)]; % 旋转矩阵
theta = -theta;
A2 = [cos(theta), -sin(theta);
sin(theta), cos(theta)]; % 旋转矩阵
arrow = start_point' - end_point';
%使得箭头跟直线长短无关(固定值)
arrow(arrow>=0) = arrowSize;
arrow(arrow<0) = -arrowSize;
arrow_1 = A1 * arrow;
arrow_2 = A2 * arrow;
arrow_1 = K * arrow_1 + end_point'; % 箭头的边的x坐标
arrow_2 = K * arrow_2 + end_point'; % 箭头的变的y坐标
hold on;
grid on;
axis equal;
plot([start_point(1), end_point(1)], [start_point(2), end_point(2)],lineColor,'lineWidth',lineWidth);
% 三角箭头(填充)
triangle_x = [arrow_1(1),end_point(1),arrow_2(1),arrow_1(1)];
triangle_y = [arrow_1(2),end_point(2),arrow_2(2),arrow_1(2)];
fill(triangle_x,triangle_y,arrColor);
% 线段箭头(不填充)
% plot([arrow_1(1), end_point(1)], [arrow_1(2), end_point(2)],color,'lineWidth',arrowSize);
% plot([arrow_2(1), end_point(1)], [arrow_2(2), end_point(2)], color,'lineWidth',arrowSize);
hold off;
end
, S8 W! a7 m; u- W
& j. W6 x A- S; i1 i4 a( Z
$ V* _' F3 x( V4 i- g$ ?% d( b
& V4 G; ^: Z% {
效果如下:
* j* W5 T3 n4 ~) S1 O" B! a
4 k, w, c( V) f" d+ K# c$ u
9-33.png
(24.76 KB, 下载次数: 9)
下载附件
保存到相册
2020-3-9 13:28 上传
3 x; ~0 h5 o( ?+ i9 }* j7 @& S
7 }; \: x2 L9 r& B
效果完美~~~~
|8 f/ Y, y' y) }, m; J
0 A5 r2 J4 M8 F: r
% M' Z2 V$ m2 B1 s. B2 H% _
作者:
CCxiaom
时间:
2020-3-9 17:33
用Matlab绘制任意两点之间带箭头的直线
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2