【问题标题】:Draw a line through two points通过两点画一条线
【发布时间】:2012-10-20 01:38:35
【问题描述】:

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

line([0 1],[0 1])

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

我想要做的是将那条线继续到情节的边缘。而不是仅仅在这两点之间画一条线,我想画一条线通过这两个点,它跨越整个图形的任何两个点。

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

line([-10 10], [-10 10]);

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

【问题讨论】:

    标签: matlab plot


    【解决方案1】:
    1. 求解经过这两点的直线方程:

      y = a*x + b;
      

      对于ab

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

      xlims = xlim(gca);
      ylims = ylim(gca);
      

      或将边缘拉远,以便您仍然可以缩小,稍后重置 x/y 限制。
      或者如果目前没有情节,请定义您想要的边缘:

      xlims = [-10 10];
      ylims = [-10 10];
      
    3. 将这些边填入直线方程并绘制相应的点:

      y = xlims*a+b;
      line( xlims, y );
      
    4. 并重置边缘

      xlim(xlims);
      ylim(ylims);
      

    有一种特殊情况,即垂直线,您必须单独处理。

    【讨论】:

      【解决方案2】:

      怎么样

        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
      

      sym_len 围绕X 绘制线的预期长度的一半?

      【讨论】:

      • 这个解决方案非常接近我最终使用的解决方案,因为我实际上是从向量 (Y-X) 和 X 开始的。
      猜你喜欢
      • 2013-06-01
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      • 1970-01-01
      相关资源
      最近更新 更多