【问题标题】:Plot square surface in Matlab在 Matlab 中绘制正方形曲面
【发布时间】:2013-10-25 21:17:02
【问题描述】:

如何在Matlab中绘制一个正方形表面?

更确切地说,我想绘制一个表面值为 0.5 的正方形,它位于 X:-1 到 X=1 和 Y:2.5 到 3.5 处。

我尝试了以下

[X,Y] = meshgrid(-3.5:.5:3.5);
Z = zeros(15);
Z(end-2:end,5:9) = 0.5;
surf(X,Y,Z);

这不会产生垂直边缘。如何存档?

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    这就是patch 函数的用途。

    Matlab documentation

    所以你的情况:

    X = [ -1  -1   1   1];
    Y = [3.5 2.5 2.5 3.5];
    Z = [0.5 0.5 0.5 0.5];
    
    patch(X,Y,Z,'red')
    view(45,45)
    

    【讨论】:

      【解决方案2】:

      您需要提供多个 Z 值以及相同的 X、Y 值。一个小例子:

      >> [X, Y]= meshgrid([1,2,2,3,4], 1:2)
      X =
           1     2     2     3     4
           1     2     2     3     4
      Y =
           1     1     1     1     1
           2     2     2     2     2
      >> Z = [0,0,1,1,0;0,0,1,1,0]
      Z =
           0     0     1     1     0
           0     0     1     1     0
      >> surf(X, Y, Z)
      

      产生这个:

      这在 2D 中应该是相同的,您只需将头部环绕在要复制的 X 和 Y 值上并相应地调整 Z 矩阵。

      【讨论】:

        【解决方案3】:

        我最终得到了

        figure;
        hold on;
        
        X = [ -2  -2   2 2];
        Y = [2 4 4 2];
        Z = [0 0 0 0];
        patch(X,Y,Z,'blue');
        
        X = [ -1  -1   1   1];
        Y = [3.5 2.5 2.5 3.5];
        Z = [0.5 0.5 0.5 0.5];
        h = patch(X,Y,Z,'red');
        
        X = [ -1 -1 1 1];
        Y = [2.5 2.5 2.5 2.5];
        Z = [0 0.5 0.5 0];
        patch(X,Y,Z,'red');
        
        X = [1, 1, 1, 1];
        Y = [2.5 2.5 3.5 3.5];
        Z = [0 0.5 0.5 0];
        patch(X,Y,Z,'red');
        
        view(45,30)
        legend(h, 'F(u,v)')
        xlabel('u')
        ylabel('v')
        zlabel('F(u,v)')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-21
          • 2016-12-26
          • 1970-01-01
          • 1970-01-01
          • 2017-02-24
          相关资源
          最近更新 更多