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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM