我想在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')
答案 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)