在MATLAB中绘制3D

时间:2015-08-28 19:48:50

标签: matlab 3d

大家好,抱歉,如果这个问题真的很愚蠢。我是编程新手,需要使用MATLAB绘制以下图像 我一遍又一遍地尝试过,似乎无法理解MATLAB是如何工作的。是否有人可以帮助编写代码来绘制这样的图片并向我解释编程是如何工作的?

2 个答案:

答案 0 :(得分:4)

我通常不会回答给我一些coodz 问题,但是绘制这个图表太诱人了。该图将几种绘图方法结合在一起:

  1. 使用patch创建三角形。

  2. 设置轴属性以反转轴顺序并设置颜色属性以使三角形透明。这是使用set

  3. 使用meshgrid生成点网格。

  4. 使用plot3绘制积分。

  5. 使用text显示文字。

  6. 使用line绘制黑色垂直线并设置轴标签。

  7. 步骤#1 - 绘制三角形

    创建该三角形的最好方法是使用patch函数。 patch接受一组顶点以及遍历这些顶点的顺序,以及可选的面颜色。因此,代码的第一位是:

    vert = [0 1 0; 1 0 0; 0 0 1];
    patch('Vertices', vert, 'Faces', 1:3, 'FaceColor', 'cyan');
    

    vert是顶点列表。每行包含形状包含的控制点。每列是一个坐标。第一列为R,第二列为P,第三列为S。因为我们的三角形中有三个点,所以有三行点。每行包含每个三角形的一个角点。记下我专门订购积分的方式。您需要以顺时针(或逆时针......直到您)顺序定义点,因为这将在以后使用。

    现在看看我如何调用patch。我们需要关注三个属性:

    1. Vertices由定义我们形状的点组成
    2. Faces要求您指定哪些点以正确的顺序绘制。通过指定Faces = 1:3 --> [1 2 3],我按顺序绘制第一,第二和第三点。这以顺时针顺序遍历点,然后给我们填充的三角形。
    3. FaceColor允许您指定三角形的颜色。我做了cyan
    4. 因此,我们首先得到这个:

      enter image description here

      ......真的不那么令人印象深刻吗?

      第二步 - 弄清楚数字

      输出将是填充形状但最初将在2D中可视化....就像我们在上面看到的那样。接下来我们需要做的是旋转相机,以便正确显示三角形。此外,轴反转,与传统轴不同。我们也必须扭转它们。另外,我们可能想要制作grid并使面部颜色透明。

      您可以在此处使用此代码执行此操作:

      view(3)
      set(gca, 'xdir', 'reverse')
      set(gca, 'ydir', 'reverse')
      grid;
      alpha('color')
      

      view(3)移动相机,使其成为3D绘图的默认MATLAB方向。我们还将xy方向颠倒过来,就像情节一样。我们还使用set并使用gca G etting C urrent A xes作为情节的焦点,并在x中设置xdiry)和ydir方向(reverse)。我还制作grid并设置alpha属性以使FaceColor透明。

      这就是我们得到的:

      enter image description here

      ......好吧......还不错。

      步骤#3 - 生成三角形中的点

      我们需要提出我们的观点。您可以像上面那样使用meshgrid执行此操作。这个平面遵循z = 1 - x - y的等式,但是我们需要确保我们过滤掉那些小于0的值,我们不应该将它们可视化。您可以先生成meshgrid点,然后将小于0的任何值设置为NaN,这样就不会显示它们。为了绝对确定并避免浮点错误,我要检查的是否小于-0.1:

      [X,Y] = meshgrid(0:(1/6):1);
      Z = 1 - X - Y;
      Z(Z < -0.01) = NaN;
      

      上面根据您的图形生成了1/6分辨率的点网格。

      步骤#4 - 绘制点

      请确保hold on,以便我们可以在同一个图表上添加更多内容,然后使用plot3来填充这些内容:

      hold on;
      plot3(X, Y, Z, 'b.', 'MarkerSize', 32);
      

      这将绘制我们的点并使它们变为蓝色。这也使得标记尺寸直径为32像素,因此我们可以更好地看待事物。

      我们现在得到这个:

      enter image description here

      ......不错,不错。

      步骤#5和#6 - 添加文本框,绘制线条并添加一些轴标签

      我们现在将NE文本添加到图的中间。我们还想绘制从底部到底部中间的一条线:

      text(0.3,0.3,0.4, 'NE');
      line([1/2 1/3], [1/2 1/3], [0 1/3], 'color', 'black');
      

      text通过接受(x,y,z)坐标来工作,您可以在该位置放置文字。图表的中间部分是技术(1/3,1/3,1/3),但如果我把它放在这里,你就不会真正看到文字。我决定把它放在(0.3,0.3,0.4)。最后,我们将从基点到点绘制一条线。 line带有xyz点的向量。每列代表一个点,因此我从(1/2,1/2,0)的基线到(1/3,1/3,1/3)的中间画一条线。我也把这条线弄成了黑色。

      最后,我要在轴上添加一些标题:

      xlabel('R');
      ylabel('P');
      zlabel('S');
      

      我们现在得到:

      enter image description here

      ......我喜欢!

      为了您的复制和粘贴乐趣,这里有您可以用来运行的完整代码并获得上图:

      vert = [0 1 0; 1 0 0; 0 0 1];
      patch('Vertices', vert, 'Faces', 1:3, 'FaceColor', 'cyan')
      view(3)
      set(gca, 'xdir', 'reverse')
      set(gca, 'ydir', 'reverse')
      grid
      alpha('color')
      [X,Y] = meshgrid(0:(1/6):1);
      Z = 1 - X - Y;
      Z(Z < -0.01) = NaN;
      hold on;
      plot3(X, Y, Z, 'b.', 'MarkerSize', 32);
      text(0.3,0.3,0.4, 'NE');
      line([1/2 1/3], [1/2 1/3], [0 1/3], 'color', 'black');
      xlabel('R'); ylabel('P'); zlabel('S');
      

答案 1 :(得分:0)

您可以使用fill3(X,Y,Z,C)功能。 X,Y和Z三元组指定多边形顶点。 C指定颜色,其中C是当前颜色映射的索引的向量或矩阵,Here您可以看到如何创建此颜色向量。

如果你想要显示轴网格线,你应该使用网格。

这是一个例子:

x = [0 1 1];                      
y = [0 1 0];
z = [0 1 0];
c = [0 0 1];
figure(1) % open a new figure
subplot(1,1,1) % create a subplot with 1 row and 1 column and select first
fill(x,y,z,c)
grid on
hold on
PointXYZ = 0;
plot3(PointXYZ,PointXYZ,PointXYZ,'*m')

plot3函数显示一组数据点的三维图,在本例中为(0,0,0)。 '* m'定义图表线属性。

这是一个例子。要显示所有点,必须创建坐标向量,并在plot3中使用它们。