![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
用matlab画三维图像
需要在同一坐标系内画出 最好能得到所围的闭区域 在线等! 展开
对于多个曲面围成封闭区域的问题,似乎没有通用的好方法,只能具体问题具体分析。
由前两个方程可以求得,封闭区间的x范围是-1~2,y范围是0~4,如图所示:
再进一步由第三个方程得z<=5,所以可用以下代码绘制曲面:
x = -1:0.1:2;
y = x.^2;
z = 0:0.1:5;
[X1,Z1] = meshgrid(x,z);
Y1 = meshgrid(y,z);
mesh(X1,Y1,Z1)
hold on
y = x+2;
[X2,Z2] = meshgrid(x,z);
Y2 = meshgrid(y,z);
mesh(X2,Y2,Z2)
z = x+3;
y = 0:0.1:4;
[X3,Y3] = meshgrid(x,y);
Z3 = meshgrid(z,y);
mesh(X3,Y3,Z3)
hold off
view(-25,45)
如果想把超出范围的部分消掉,可以在三个mesh函数前分别加上:
X1(Y1>X1+2|Z1>X1+3) = NaN;
Z2(Y2<X2.^2|Z2>X2+3) = NaN;
Z3(Y3<X3.^2|Y3>X3+2) = NaN;
但这样会导致曲面相交的位置不平整,效果差强人意:
更好的做法应该是计算出各曲面相交的曲线,然后用patch来实现,但做起来还要花不少时间,就先这样吧。
还差一个函数啊
哦,抱歉。
你写的都挤在一起,没注意到。
参考代码
x = -1:0.1:2;
y = x.^2;
z = 0:0.1:5;
[X1,Z1] = meshgrid(x,z);
Y1 = meshgrid(y,z);
X1(Y1>X1+2|Z1>X1+3|Z1<(X1.^2+Y1.^2)/4) = NaN;
mesh(X1,Y1,Z1)
hold on
y = x+2;
[X2,Z2] = meshgrid(x,z);
Y2 = meshgrid(y,z);
Z2(Y2<X2.^2|Z2>X2+3|Z2<(X2.^2+Y2.^2)/4) = NaN;
mesh(X2,Y2,Z2)
z = x+3;
y = 0:0.1:4;
[X3,Y3] = meshgrid(x,y);
Z3 = meshgrid(z,y);
Z3(Y3<X3.^2|Y3>X3+2) = NaN;
mesh(X3,Y3,Z3)
x = -1:.1:2;
y = 0:0.1:4;
[X4,Y4] = meshgrid(x,y);
Z4 = (X4.^2+Y4.^2) / 4;
Z4(Y4<X4.^2|Y4>X4+2) = NaN;
mesh(X4,Y4,Z4)
hold off
view(155,32)
rotate3d
如果不想消除超出范围的部分,把四句赋值为NaN的语句去掉即可(换了一下视角):