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

4

我希望在MATLAB中绘制一个由一组不等式限定的三维区域。

例如:

0 <= x <= 1

sqrt(x) <= y <= 1

0 <= z <= 1 - y

我在这个网站上找到了一个二维示例,但我不确定如何将其转换为三维。 如何绘制不等式
编辑: 在@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')
3个回答

1

您可以做与您链接的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')

我感谢你的帮助,并尝试通过限制绘制的点仅限于所有3个区域定义的点来改进你的代码,但结果并不理想。请参见我上面编辑过的帖子。 - user1680079

1
我一直在试图弄清楚同样的问题,诀窍是使交集之外的所有内容的大小为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')

那应该只会得到交集的区域。
-- 编辑:颜色变量也需要更改。你只需要交集,而不是其他不等式。

1

我不理解你修改@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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接