本文整理了一些三维绘图的内容,代码都比较简单
1、surf、surfc、surfl之后可以试试shading interp
2、绘制隐函数
3、参数方程绘制曲面
4、三维到平面:等高线+引力线
5、快速绘制球面(椭球面)
6、绘制旋转面
7、绕轴旋转
8、分段曲面
1、surf、surfc、surfl之后可以试试shading interp
>> [X Y]=meshgrid(linspace(-2,2),linspace(-2,2));
>> Z=exp(-X.^2-Y.^2);
>> subplot(2,1,1);surf(X,Y,Z);subplot(2,1,2);surf(X,Y,Z);shading interp
2、绘制隐函数
二维使用ezplot,三维使用ezimplot3(需安装)
>> f1='x^2+(y-(x^2)^(1/3))^2-1';f2='x*sin(y+z^2)+y^2*cos(x+z)+z*x*cos(z+y^2)';
>> subplot(1,2,1);ezplot(f1,[-1,1,-1,1.6]);subplot(1,2,2);ezimplot3(f2,[-1,1])
3、参数方程绘制曲面
莫比乌斯环,其中u、v是参数
>> syms u v;
>> x=cos(u)+v*cos(u)*cos(u/2);
>> y=sin(u)+v*sin(u)*cos(u/2);
>> z=v*sin(u/2);
>> ezsurf(x,y,z,[0,2*pi,-0.5,0.5])
4、三维到平面:等高线+引力线
>> syms x y;z(x,y)=(x^2-2*x)*exp(-x^2-y^2-x*y);
>> zx=diff(z,x);zy=diff(z,y);
>> [X,Y]=meshgrid(-3:.1:2,-2:.1:2);Z=double(z(X,Y));
>> ZX=double(zx(X,Y));ZY=double(zy(X,Y));
>> subplot(1,2,1);surf(X,Y,Z);shading interp;zlim([-0.7 1.5]);
>> subplot(1,2,2);contour(X,Y,Z,30);
>> hold on;quiver(X,Y,-ZX,-ZY)
5、快速绘制球面(椭球面)
[x y z]=sphere(50);surf(x,y,z);
%单位球面,50多面形数量(越多图越精确)
%修改x、y、z可以作出任意位置的球、椭球
%当然前面的隐函数也可以绘制
6、绘制旋转面
生成柱面的方程
[r_1(z)=1,0<z<1
]
[r_2(z)=e^{-frac{z^2}{2}}sin z,-1<z<3
]
(r(z)) 表示到曲面上(z)坐标的点到(z)轴的距离
>> subplot(1,2,1);[x,y,z]=cylinder(1);surf(x,y,z)
>> subplot(1,2,2);
>> z0=-1:0.1:3;r=exp(-z0.^2/2).*sin(z0);
>> [x,y,z]=cylinder(r);
>> z=-1+4*z;surf(x,y,z);
7、绕轴旋转
以六中的图2为例
>> z0=-1:0.1:3;r=exp(-z0.^2/2).*sin(z0);
>> [x,y,z]=cylinder(r);z=-1+4*z;h=surf(x,y,z);
>> r_ax=[0 0 1] %该点与坐标原点的连线为旋转轴
>> axis tight; %保证尺度不变
>> for i=0:360
rotate(h,r_ax,1);
pause(0.02),
end
%循环结构每0.02s转动1°,循环360次
8、分段曲面
[p(x_1,x_2)=egin{cases}0.5457e^{-0.75x_2^2-3.75x_1^2-1.5x_1},&x_1+x_2>1\0.7575e^{-x_2^2-6x_1^2},&-1<x_1+x_2leqslant1\0.5457e^{-0.75x_2^2-3.75x_1^2+1.5x_1},&x_1+x_2leqslant 1end{cases}
]
>> [x y]=meshgrid(-1:.04:1,-2:.04:2);
>> z=0.5457*exp(-0.75*y.^2-3.75*x.^2-1.5*x).*(x+y>1)+...
0.7575*exp(-y.^2-6*x.^2)&((x+y>-1)&(x+y)<=1)+...
0.5457*exp(-0.75*y.^2-3.75*x.^2+1.5*x).*(x+y<-1);
>> surf(x,y,z);shading flat;
参考
https://www.zhihu.com/question/45621009/answer/116667788
https://www.ilovematlab.cn/thread-264471-1-1.html