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

时间:2012-09-18 11:50:16

标签: matlab 3d plot inequalities

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

例如:

0 <= x <= 1

sqrt(x) <= y <= 1

0 <= z <= 1 - y

我找到了一个有人在这个网站上做过的第二个例子,但我不知道如何将其转换为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')

3 个答案:

答案 0 :(得分: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')

答案 1 :(得分:0)

我一直试图弄清楚同样的事情,诀窍是让所有东西的大小都不在交集点0. Tobold的scatter3行使用'3'作为大小的选项,这意味着所有的点都会显示出来作为第3点。这可以用尺寸集替换尺寸与X1相同的矩阵。最简单的方法就是make s = 3 * all:

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

那应该只能让你在十字路口的区域。

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

答案 2 :(得分: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