用matlab画三维图像

曲面分别为y=x.^(2);y=x+2;4z=x.^(2)+y.^(2);z=x+3需要在同一坐标系内画出最好能得到所围的闭区域在线等!... 曲面分别为y=x.^(2);y=x+2;4z=x.^(2)+y.^(2);z=x+3
需要在同一坐标系内画出 最好能得到所围的闭区域 在线等!
展开
 我来答
tianxiawulang
2014-04-14 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2633万
展开全部

对于多个曲面围成封闭区域的问题,似乎没有通用的好方法,只能具体问题具体分析。

 

由前两个方程可以求得,封闭区间的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的语句去掉即可(换了一下视角):

东莞大凡
2024-08-07 广告
OpenCV标定板是东莞市大凡光学科技有限公司在相机标定中常用的工具。它通常由黑白格点按一定规则排列在平面上组成,如棋盘格或圆形格等。在相机标定时,将标定板置于不同位置和姿态下拍摄图像,利用OpenCV库中的函数检测标定板上的角点或圆心,进... 点击进入详情页
本回答由东莞大凡提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式