MATLAB 里面怎么画 x^3+y^3+z^3=1 的三维图像啊?

 我来答
dukinkin
2014-08-13 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2444
采纳率:90%
帮助的人:884万
展开全部

[x,y,z]=meshgrid(-5:0.5:5);

v=x.^3+y.^3+z.^3-1;

p = patch(isosurface(x,y,z,v,0));

isonormals(x,y,z,v,p)

set(p,'FaceColor','r','EdgeColor','k');

daspect([1 1 1]);view(3);

axis tight;camlight ;lighting gouraud;

grid on;

xlabel('x');ylabel('y');zlabel('z');


你可以用3D旋转。观察不同方向的曲面

追问

谢谢!很完美!

但是能再麻烦你讲一下画这种隐函数图像的步骤和用到的函数吗?谢谢!

另外,我把函数改为 x^2+y^2+z^2=1 之后画出来的图像就变成了

为什么显得不光滑啊?怎么让它变光滑呢?

追答
x^2+y^2+z^2=1 函数的定义域 x,y,z都是-1~1
将x,y,z的取值范围缩小,加密一点取值得点就可以了

[x,y,z]=meshgrid(-1:0.1:1);
v=x.^2+y.^2+z.^2-1;
p = patch(isosurface(x,y,z,v,0));
isonormals(x,y,z,v,p)
set(p,'FaceColor','r','EdgeColor','k');
daspect([1 1 1]);view(3);
axis tight;camlight ;lighting gouraud;
grid on;
xlabel('x');ylabel('y');zlabel('z');

实际上,这种画隐函数三维曲面的办法,只要基于isosurface这个matlab提供的函数
三维的曲面方程都可以写为 f(x,y,z)=0的方程形式

那么我们首先确定一个三维的空间网格x,y,z
[x y z]=meshgrid(x1:dx:x2,y1:dy:y2,z1:dz:z2)
其中x1:dx:x2确定网格x方向的范围和间隔,y,z方向依次类推
当三者一样的时候,可以只写一个
得到的x,y,z都是三维矩阵

然后代入隐函数f(x,y,z)
计算在这个三角网格每一点的值 v=f(x,y,z)

最后利用isosurface(x,y,z,v,0)得到f=0的等值面
该等值面就是f(x,y,z)=0表示的曲面

最简单的三句画就可以画出等值面
[x y z]=meshgrid(x1:dx:x2,y1:dy:y2,z1:dz:z2);
v=f(x,y,z);
isosurface(x,y,z,v,0);
我给你的例子是为了曲面漂亮,增加了光照等条件使曲面更有立体感
网格取的越密,曲面的精度越高,但是运算量和需要内存空间就越大
♀烟雨星空38
推荐于2016-09-13 · TA获得超过1万个赞
知道大有可为答主
回答量:2830
采纳率:82%
帮助的人:853万
展开全部

x^2+y^2+z^2=1 函数的定义域 x,y,z都是-1~1
将x,y,z的取值范围缩小,加密一点取值得点就可以了


[x,y,z]=meshgrid(-5:0.5:5);

v=x.^3+y.^3+z.^3-1;

p = patch(isosurface(x,y,z,v,0));

isonormals(x,y,z,v,p)

set(p,'FaceColor','r','EdgeColor','k');

daspect([1 1 1]);view(3);

axis tight;camlight ;lighting gouraud;

grid on;

xlabel('x');ylabel('y');zlabel('z');

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式