[英]Plotting 3D in MATLAB
我通常不会回答我给Coodz的问题,但是绘制这张图太诱人了。 此图将几种绘图方法结合在一起:
使用patch
创建三角形。
设置轴属性以反转轴顺序,并设置颜色属性以使三角形透明。 这是使用set
。
使用meshgrid
生成点的网格。
使用plot3
绘制点。
使用text
使文本可见。
使用line
绘制黑色垂直线并设置轴标签。
创建该三角形的最好的办法是使用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
。 我们需要关注三个属性:
Vertices
由定义我们形状的点组成 Faces
要求您指定要按正确顺序绘制的点 。 通过指定Faces = 1:3 --> [1 2 3]
,我按此顺序绘制了第一,第二和第三点。 这将以顺时针方向遍历这些点,然后为我们填充了三角形。 FaceColor
允许您指定三角形的颜色。 我做了cyan
。 因此,我们首先得到以下内容:
...真的不那么令人印象深刻吧?
输出将为实心形状,但最初将以2D形式可视化...。 我们需要做的下一件事是旋转相机,以便正确显示三角形。 而且,轴是反向的 ,与常规轴不同。 我们也必须扭转这些。 另外,我们可能希望制作一个grid
并使面部颜色透明。
您可以通过以下代码执行此操作:
view(3)
set(gca, 'xdir', 'reverse')
set(gca, 'ydir', 'reverse')
grid;
alpha('color')
view(3)
移动相机,使其成为3D图的默认MATLAB方向。 我们还使x
和y
方向像图一样反转。 我们还使用set
和使用该gca
或G ETTING在情节的焦点与c urrent 甲 XES,并设置x
( xdir
)和y
方向( ydir
中) reverse
。 我还制作了一个grid
并设置alpha
属性以使FaceColor
透明。
这是我们得到的:
...好吧...还不错。
我们需要提出自己的观点。 您可以像上面一样使用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;
上面将生成一个2D的点网格,其分辨率为您的图形所需的1/6
。
确保hold on
以便我们可以在同一图形上放置更多内容,然后使用plot3
放置以下几点:
hold on;
plot3(X, Y, Z, 'b.', 'MarkerSize', 32);
这将绘制我们的点并使它们变蓝。 这也使标记大小的直径为32像素,因此我们可以更好地看到事物。
我们现在得到这个:
...还不错,还不错。
现在,我们将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
接受x
, y
和z
点的向量。 每列代表一个点,因此我在(1/2,1/2,0)
的底部到(1/3,1/3,1/3)
的中间画一条线。 我还把线弄黑了。
最后,我要为轴添加一些标题:
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');
您可以使用fill3(X,Y,Z,C)函数。 X,Y和Z三元组指定多边形顶点。 C指定颜色,其中C是当前颜色图的向量或索引矩阵, 在这里您可以看到如何创建此颜色向量。
如果要显示轴网格线,则应使用grid on。
这里是一个例子:
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中使用它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.