Matlab绘制曲面

本文整理了一些三维绘图的内容,代码都比较简单

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)=\begin{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_2\leqslant1\\0.5457e^{-0.75x_2^2-3.75x_1^2+1.5x_1},&x_1+x_2\leqslant 1\end{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

猜你喜欢

转载自www.cnblogs.com/Math-Nav/p/13402667.html