TA的每日心情 | 怒 2019-11-20 15:22 |
|---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
工作环境
' G; B* y; s" j3 O: ?+ [# o- S2 m8 ~& Q: Z+ q: J7 _
- 1,开发环境:Matlab 2012b win32
- 2,编程语言:Matlab8 W, I& S: V; Z0 @8 |
' I0 f* r* w' I! m4 a
$ Y8 v7 J; j0 L1 g/ b
最近需要使用matlab绘制带箭头的直线,发现如下方式可以绘制带箭头的直线
* p* k- l+ W/ ]2 h0 q6 `
5 n8 W0 o+ o2 h& l" p' s- 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(…) % 返回注释对象的句柄值。
/ k# D) P v- F- Y6 g" @6 F" c2 q! b % j' |5 z! Z' O6 C9 N ~
1 r3 T( c6 K$ Z- K5 ?" Y
发现annotation绘制带箭头的直线还挺好用,但是唯一的不足就是需要坐标系在[0,1]范围内的标准坐标系,其他坐标系中绘制会报错!!!1 ^, c* x4 g% l& w' h) w$ E1 C: R( h1 W* s
M/ n$ ?# |" s5 x0 M于是自己写了一个函数来绘制带箭头的直线,函数如下:* m. B& ~; U& u; d( {6 N; L. W. }' F
+ W. ` r& i5 A% E/ {' E. R
- %% 绘制带箭头的直线
- 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;
- end7 v4 Z% { G: [$ j
4 L) A$ ]5 p8 l5 k
7 h. ]# h# o7 q: q! |4 ~1 H$ b% V; |; F8 @
效果如下:
, T6 F+ Z+ w: K( M
1 ~9 z! g$ y& x2 I$ v
' r2 n. t {9 K+ `( e5 p5 U0 A9 k) M4 p, |
效果完美~~~~) Q8 M9 S0 R4 `
5 x! Q& T3 N7 _
7 r; o7 d( m( i0 Z4 ^ |
|