重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
y=x,z=0的平面怎么画
创新互联建站从2013年开始,是专业互联网技术服务公司,拥有项目网站制作、网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元葫芦岛做网站,已为上家服务,为葫芦岛各地企业和个人服务,联系电话:028-86922220
方法一、用ezmesh 函数直接画出该平面,命令如下:
ezmesh('0')
%ezmesh是用来画三维隐函数的图像,ezmesh('0')命令意思即是画出z=0的平面。如果要画z=x+y-5的三维图像,输入命令ezmesh('x+y-5'),然后回车即可。
方法二、用meshgrid和ones这两个函数画该平面,命令如下:
X=-1:.1:1;
[X Y]=meshgrid(X);
Z=ones(size(X))-1;
mesh(X,Y,Z)
%meshgrid函数是打网格用的,用以产生网格坐标,ones函数则用来生成各行各列元素都为1的矩阵。
最常用的是在类定义的方法,给一个property的装饰器,可以安装调用属性的方式调用
像Maple、Mathematica中就有类似implicitplot3()的三维隐函数绘图函数
自定义三维隐函数绘制函数
全世界人都知道Matlab那几千个库函数中,可恨的是,却偏偏不提供个三维隐函数的图像绘制的函数,真是郁闷死了
好,下面我们看一个三维隐函数绘制的应用,它灵活的应用了Matlab的isosurface()(等值面函数),绘制出来的图效果还比较好
function implot3(fun,rangxyz,ngrid,varargin)
%三维隐函数绘图
%
%输入参数说明
-fun 函数句柄,可以是匿名、inline和M函数
% -rangexy=[xmin xmax ymin ymax,zmin,zmax] 绘图范围
% -ngrid 绘图时计算的点数
%
%Example
%fun=@(x,y,z)(x+y+z).*(x.*y+x.*z+y.*z)-10*x.*y.*z;
%rangxyz=[1 10 1 10 1 10];ngrid=50;
%implot3(fun,rangxyz,ngrid)
%
%rewrite by dynamic
%all rights reserved by
x=linspace(rangexy(1),rangexy(2),ngrid);
y=linspace(rangexy(3),rangexy(4),ngrid);
z=linspace(rangexy(5),rangexy(6),ngrid);
[xx,yy,zz]=meshgrid(x,y,z);
fvector=vectorize(fun);% 将目标函数矢量化
f=f(fvector,xx,yy,zz,varargin{:});
p=patch(isosurface(xx,yy,zz,f,0),varargin{:});
set(p, 'FaceColor', 'red', 'EdgeColor', 'none');
daspect([1 1 1])
view(3)
camlight;
lighting phong
可以的。这也算多态的一种,比如: def duck(A):return A.duck() class pop():def duck():return "what does the duck say~" class regular():def duck():return "Quack!" duck(pop)'what does the duck s
在matlab中可以利用三维数据等值面绘制函数isosurface来绘制三维隐函数的图像
三维隐函数可以描述,为方程 f(x,y,z)=0;
如果我们定义函数v= f(x,y,z)
在一定的下x,y,z的定义域内计算出一个三维区间中v的值
然后方程f(x,y,z)=0的图像,其实就是v=0时的等值面,是一个三维曲面
在matlab中可以用isosurface函数实现
例子,绘制隐函数 x^3+y^3+z^3=1的函数图像
range=linspace(-1,1,21);
[x,y,z]=meshgrid(range,range,range);%生成一定定义域内x,y,z矩阵
v=x.^3+y.^3+z.^3-1;%计算函数数值,三位分布
p = patch(isosurface(x,y,z,v,0));%用isosurface画等值面
%等值面是三角网格表示的,用patch函数之后,更容易修改曲面颜色等
p.FaceColor = 'none';
p.EdgeColor = 'red';
daspect([1,1,1])
view(3); axis tight
grid on;
xlabel('x'),ylabel('y'),zlabel('z');
view(45,30);
对于一般的三维隐函数绘图,可以使用isosurface函数:
n = 30;
x = linspace(0, 100, n);
y = linspace(0, 2000, n);
z = linspace(0, 50, n);
[z, y, x] = meshgrid(x, y, z);
v = 4.12*(z-50.48).^3 + 18.08*(y-2160).*(z-50.48) - 127.28*(x-21.56);
[faces,verts,colors] = isosurface(x,y,z,v,0,z);
patch('Vertices', verts, 'Faces', faces, ...
'FaceVertexCData', colors, ...
'FaceColor','interp', ...
'edgecolor', 'interp');
xlabel z, ylabel y, zlabel x
view(-60,10)
需要说明的是,按图中要求,x-y-z三轴的数据应分别对应z-y-x,换言之,x和z互换,所以,代码中的meshgrid函数以及下面的表达式都要进行交换。
对于本题而言,函数可以写成z=f(x,y)显函数的形式,所以也可以直接用surf绘图:
x = linspace(0, 100, n);
y = linspace(0, 2000, n);
[x, y] = meshgrid(x, y);
z = (4.12*(x-50.48).^3 + 18.08*(y-2160).*(x-50.48)) / 127.28 + 21.56;
surf(z, y, x, 'edgecolor', 'none')
xlabel z, ylabel y, zlabel x
xlim([0 50])
view(-75,6)
这里同样要注意调用surf函数时变量的互换。
如果不限制z的范围,画出来的曲面如下所示: