在MATLAB中绘制三维图形

在MATLAB中绘制三维图形,matlab,3d,Matlab,3d,嗨,伙计们,如果这个问题看起来很愚蠢,我很抱歉。我对编程一无所知,需要使用MATLAB绘制以下图像。 我试了一次又一次,似乎不明白MATLAB是如何工作的。有没有人能帮我写一个代码来画这样的图,并向我解释编程是如何工作的?你可以使用fill3(X,Y,Z,C)函数。十、 Y、Y和Z三元组指定多边形顶点。C指定颜色,其中C是指向当前颜色映射的向量或索引矩阵,您可以看到如何创建此颜色向量 如果要显示轴栅格线,应使用“栅格打开” 这里有一个例子: x = [0 1 1];

嗨,伙计们,如果这个问题看起来很愚蠢,我很抱歉。我对编程一无所知,需要使用MATLAB绘制以下图像。
我试了一次又一次,似乎不明白MATLAB是如何工作的。
有没有人能帮我写一个代码来画这样的图,并向我解释编程是如何工作的?

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

如果要显示轴栅格线,应使用“栅格打开”

这里有一个例子:

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'定义图表线属性

这就是一个例子。要显示所有的点,你必须创建坐标向量,并在第三张图中使用它们。

我通常不会回答“给我一些库兹问题”,但画这张图太诱人了,很难通过。此图将几种绘图方法组合在一起:

  • 使用创建三角形

  • 设置轴属性以反转轴顺序,并设置颜色属性以使三角形透明。这是在使用

  • 使用生成点的栅格

  • 使用绘制点

  • 使用使文本可见

  • 使用并设置轴标签绘制黑色垂直线

  • 步骤#1-绘制三角形 创建三角形的最佳方法是使用
    patch
    函数<代码>面片接收一组顶点以及遍历这些顶点的顺序,还可以选择一个面颜色。因此,代码的第一位是:

    vert = [0 1 0; 1 0 0; 0 0 1];
    patch('Vertices', vert, 'Faces', 1:3, 'FaceColor', 'cyan');
    
    vert
    是顶点列表。每行由形状包含的控制点组成。每列是一个坐标。第一列是
    R
    ,第二列是
    P
    ,第三列是
    S
    。因为三角形中有三个点,所以有三排点。每行由每个三角形的一个角点组成。请注意我对要点的具体排序方式。您需要按顺时针(或逆时针…取决于您)顺序定义点,因为这将在以后使用

    现在看看我是如何调用
    补丁的。我们需要关注三个属性:

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

    。。。没那么令人印象深刻吧

    第二步-玩弄这个数字 输出将是填充形状,但最初将在2D中可视化。。。。就像我们上面看到的。我们需要做的下一件事是旋转相机,使其正确地显示三角形。此外,轴是反向的,与传统轴不同。我们也得把这些倒过来。此外,我们可能希望制作一个
    网格
    ,并使面部颜色透明

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

    view(3)
    set(gca, 'xdir', 'reverse')
    set(gca, 'ydir', 'reverse')
    grid;
    alpha('color')
    
    视图(3)
    移动摄影机,使其成为3D绘图的默认MATLAB方向。我们还使
    x
    y
    方向像图一样反转。我们还使用
    set
    并使用
    gca
    G在绘图的焦点处设置C当前Ax,并在
    反向
    中设置
    x
    xdir
    )和
    y
    方向(
    ydir
    )。我还制作了一个
    网格
    ,并设置
    alpha
    属性以使
    FaceColor
    透明

    这就是我们得到的:

    。。。好吧不错

    步骤#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;
    
    这将绘制我们的点并使其变为蓝色。这也使得标记的直径为32像素,因此我们可以看到更好的东西

    我们现在得到:

    。。。不错,不错

    步骤#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)
    。最后,我们将从底部到点绘制一条线<代码>行
    采用
    x
    y
    z
    点的向量。每列代表一个点,所以我从
    (1/2,1/2,0)
    的底部到
    (1/3,1/3,1/3)
    的中间画一条线。我还把这条线改成了黑色

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

    xlabel('R');
    ylabel('P');
    zlabel('S');
    
    xlabel('R');
    ylabel('P');
    zlabel('S');
    
    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');