如何在Matlab上绘制3d不等式

问题描述 投票:2回答:3

我想在MATLAB中绘制由一组不等式界定的3d区域。

例如:

0 <= x <= 1

sqrt(x) <= y <= 1

0 <= z <= 1 - y

我发现有人在此站点上做过的2d示例,但我不确定如何将其转换为3d。 How to plot inequalities

编辑:在@Tobold的帮助下,我修改了代码以将绘制的点限制为由所有三个区域定义的点,但它仅绘制2或3个点。看起来向量X1,Y1和Z1中的点是正确的,但由于某种原因,它只绘制了一些。有什么想法为什么只从X1,Y1和Z1向量绘制一些点而不是全部?]

[X,Y,Z]=meshgrid(0:0.1:1,0:0.1:1,0:0.1:1); % Make a grid of points between 0 and 1
p1=0.1; p2=0.2; % Choose some parameters
X1 = (X >= 0 & X <= 1) & (Y >= sqrt(X) & Y <= 1) & (Z >= 0 & Z <= 1 - Y);
Y1 = (X >= 0 & X <= 1) & (Y >= sqrt(X) & Y <= 1) & (Z >= 0 & Z <= 1 - Y);
Z1 = (X >= 0 & X <= 1) & (Y >= sqrt(X) & Y <= 1) & (Z >= 0 & Z <= 1 - Y);
ineq1 = (X >= 0 & X <= 1) * 2;
ineq2 = (Y >= sqrt(X) & Y <= 1) * 4;
ineq3 = (Z >= 0 & Z <= 1 - Y) * 8;
all = ineq1 & ineq2 & ineq3;
colors = zeros(size(X))+ineq1+ineq2+ineq3;
scatter3(X1(:),Y1(:),Z1(:),3,colors(:)','filled')
matlab 3d plot inequalities
3个回答
0
投票
您可以执行与链接到的2d情况几乎相同的操作。只需写下您的三个不等式,使用3d网格,将每个不等式与一组具有唯一子集和(例如2、4、8)的三个数字中的一个数字相乘,然后使用scatter3:

[X,Y,Z]=meshgrid(0:0.1:1,0:0.1:1,0:0.1:1); % Make a grid of points between 0 and 1 p1=0.1; p2=0.2; % Choose some parameters ineq1 = (X >= 0 & X <= 1) * 2; ineq2 = (X >= sqrt(X) & Y <= 1) * 4; ineq3 = (Z >= 0 & Z <= 1 - Y) * 8; colors = zeros(size(X))+ineq1+ineq2+ineq3; scatter3(X(:),Y(:),Z(:),3,colors(:),'filled')


0
投票
我一直在试图找出同一件事,而诀窍是使不在交点处的所有内容的大小都为0。Tobold的scatter3行使用'3'作为大小的选项,这意味着所有点都将显示为点3。可以用大小集替换大小等于X1的矩阵。最简单的方法就是使s = 3 * all:

all = ineq1 & ineq2 & ineq3; colors = zeros(size(X))+all; sizes = 3 * all; scatter3(X1(:),Y1(:),Z1(:),sizes,colors(:)','filled')

那应该让您知道交叉路口的区域。

-编辑:颜色变量也需要更改。您只想要相交,而不是其他不等式。


0
投票
我不理解您编写的@Tobold帮助的修改代码中的几件事。例如,代码中的p1和p2参数是什么?

无论如何,该代码仅绘制满足所有不等式的网格点;

[X,Y,Z]=meshgrid(0:0.1:1,0:0.1:1,0:0.1:1); ineq1 = (X >= 0 & X <= 1); ineq2 = (Y >= sqrt(X) & Y <= 1); ineq3 = (Z >= 0 & Z <= 1 - Y); all = ineq1 & ineq2 & ineq3; scatter3(X(all),Y(all),Z(all),'b','filled')

结果显示在下图中。enter image description here    
© www.soinside.com 2019 - 2024. All rights reserved.