在MATLAB中绘制三维图形
嗨,伙计们,如果这个问题看起来很愚蠢,我很抱歉。我对编程一无所知,需要使用MATLAB绘制以下图像。在MATLAB中绘制三维图形,matlab,3d,Matlab,3d,嗨,伙计们,如果这个问题看起来很愚蠢,我很抱歉。我对编程一无所知,需要使用MATLAB绘制以下图像。 我试了一次又一次,似乎不明白MATLAB是如何工作的。有没有人能帮我写一个代码来画这样的图,并向我解释编程是如何工作的?你可以使用fill3(X,Y,Z,C)函数。十、 Y、Y和Z三元组指定多边形顶点。C指定颜色,其中C是指向当前颜色映射的向量或索引矩阵,您可以看到如何创建此颜色向量 如果要显示轴栅格线,应使用“栅格打开” 这里有一个例子: x = [0 1 1];
我试了一次又一次,似乎不明白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'定义图表线属性
这就是一个例子。要显示所有的点,你必须创建坐标向量,并在第三张图中使用它们。我通常不会回答“给我一些库兹问题”,但画这张图太诱人了,很难通过。此图将几种绘图方法组合在一起:
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');