找回密码
 注册
关于网站域名变更的通知
查看: 1193|回复: 1
打印 上一主题 下一主题

用Matlab绘制任意两点之间带箭头的直线

[复制链接]
  • TA的每日心情

    2019-11-20 15:22
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2020-3-9 13:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    工作环境
    5 M* y5 a3 X( Q9 q6 Q/ B
    ' {) P3 s# ?3 D' q6 t0 @4 ~' B5 C* w
    • 1,开发环境:Matlab 2012b win32
    • 2,编程语言:Matlab
      ) [, D" u6 \7 X6 U
    6 J& q6 e) }4 y( x" D

    1 G; C  j4 d4 v5 M* q8 `最近需要使用matlab绘制带箭头的直线,发现如下方式可以绘制带箭头的直线& K( p$ p9 U; A# v% v; A; }6 G
    , G% t6 W1 I+ e8 Y
    • 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(…)  % 返回注释对象的句柄值。. j1 |7 E( `2 H% K) P
    # D5 H% n8 P) {: L# o

    1 G4 R- C! U4 i, M发现annotation绘制带箭头的直线还挺好用,但是唯一的不足就是需要坐标系在[0,1]范围内的标准坐标系,其他坐标系中绘制会报错!!!
    ' q$ `( g& V0 w% M, G! Z' w4 H: J6 h& ^; f6 Z$ ]# L
    于是自己写了一个函数来绘制带箭头的直线,函数如下:
    * |8 U& o$ H. i. f0 Z8 G
    ; z, \  M/ p7 x
    • %% 绘制带箭头的直线
    • 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' E$ v# n* b$ C0 j/ i

    ( |- D) Y* R7 X3 R* O2 x4 Z8 q2 p) q3 q
    6 L( m6 F6 |$ x
    效果如下:
      q  C+ o8 A$ r( k8 [
    1 z+ _. D2 \# t* `- s1 R5 \
    & E( \/ M- M4 b; j2 i' c0 U
    5 s, h! }- b  @$ @2 X6 `效果完美~~~~
    ' z+ o2 V/ w! X9 q, x
    % W' m" @! \, k3 c1 f
    & |0 t! ?9 v* A% h3 k9 D, c: }

    该用户从未签到

    2#
    发表于 2020-3-9 17:33 | 只看该作者
    用Matlab绘制任意两点之间带箭头的直线
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-7 19:57 , Processed in 0.109375 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表