画两条线

Cod*_*ile 9 matlab plot

使用MatLab,我知道如何使用以下代码创建连接两个点的线段:

line([0 1],[0 1])
Run Code Online (Sandbox Code Playgroud)

这将绘制从点(0,0)到点(1,1)的直线段.

我想要做的是继续该线到剧情的边缘.我不想在这两个点之间划一条线,而是想通过这两个点绘制一条线,这两个点跨越整个图形,任意两点.

对于这个特定的线和ax = -10:10,y = -10:10的情节我可以写:

line([-10 10], [-10 10]);
Run Code Online (Sandbox Code Playgroud)

但我需要对任何一组点进行概括.

Gun*_*uyf 10

  1. 通过这两点解决线方程:

    y = a*x + b;
    
    Run Code Online (Sandbox Code Playgroud)

    ab:

    a = (yp(2)-yp(1)) / (xp(2)-xp(1));
    b = yp(1)-a*xp(1);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 找到绘图窗口的边缘

    xlims = xlim(gca);
    ylims = ylim(gca);
    
    Run Code Online (Sandbox Code Playgroud)

    或者将边缘拉得很远,这样你仍然可以缩小,稍后重置x/y限制.
    或者如果此刻没有情节,请定义您想要的边缘:

    xlims = [-10 10];
    ylims = [-10 10];
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将这些边填入线方程并绘制相应的点:

    y = xlims*a+b;
    line( xlims, y );
    
    Run Code Online (Sandbox Code Playgroud)
  4. 并重置边缘

    xlim(xlims);
    ylim(ylims);
    
    Run Code Online (Sandbox Code Playgroud)

有一个特殊情况,垂直线,您必须单独处理.


Aco*_*rbe 6

关于什么

  function = long_line(X,Y,sym_len)
       dir = (Y-X)/norm(Y-X);
       Yp = X + dir*sym_len;
       Xp = X - dir*sym_len;
       line(Xp,Yp);
  end
Run Code Online (Sandbox Code Playgroud)

sym_len绘制线周长的预期长度的一半X