前言:
           小白路过,只是想在学习高等数学三重积分时让图像更直观一些,在网上粗略学习了一下MATLAB,本图来自张宇高数18讲例18.11
   
   代码:
           首先创建一个函数文件isocurve3,用以绘制交线: 
   
    -     function [nX,nY,nZ]=isocurve3(X,Y,Z,f1,f2)
 
    -     % 获取f1隐函数的三角面和三角顶点
 
    -     V1=f1(X,Y,Z);
 
    -     hel=isosurface(X,Y,Z,V1,0);
 
    -     % 将f1获取的三角顶点带入f2求得数值
 
    -     V2=f2(hel.vertices(:,1),hel.vertices(:,2),hel.vertices(:,3));
 
    -     % 检查三个顶点的数值是否同时含有有大于0数值及小于0数值
 
    -     mask=V2>0;
 
    -     outcount=sum(mask(hel.faces),2);
 
    -     cross=(outcount==2)|(outcount==1);
 
    -     crossing_tris=hel.faces(cross,:);
 
    -     % 通过旋转交换三个顶点次序,将小于0的点放在第一列
 
    -     out_vert=mask(crossing_tris);
 
    -     flip=sum(out_vert,2)==1;
 
    -     out_vert(flip,:)=1-out_vert(flip,:);
 
    -     ntri=size(out_vert,1);
 
    -     overt=zeros(ntri,3);
 
    -     for i=1:ntri
 
    -         v1i=find(~out_vert(i,:));
 
    -         v2i=1+mod(v1i,3);
 
    -         v3i=1+mod(v1i+1,3);
 
    -         overt(i,:)=crossing_tris(i,[v1i v2i v3i]);
 
    -     end
 
    -     % 类似于求重心
 
    -     u=(-V2(overt(:,1)))./(V2(overt(:,2))-V2(overt(:,1)));
 
    -     v=(-V2(overt(:,1)))./(V2(overt(:,3))-V2(overt(:,1)));
 
    -     uverts=repmat((1-u),[1 3]).*hel.vertices(overt(:,1),:)+repmat(u,[1 3]).*hel.vertices(overt(:,2),:);
 
    -     vverts=repmat((1-v),[1 3]).*hel.vertices(overt(:,1),:)+repmat(v,[1 3]).*hel.vertices(overt(:,3),:);
 
    -     % 因为可能含有多条曲线,因此逐段连线
 
    -     nX=nan(3,ntri);
 
    -     nX(1,:)=uverts(:,1)';
 
    -     nX(2,:)=vverts(:,1)';
 
    -     nY=nan(3,ntri);
 
    -     nY(1,:)=uverts(:,2)'; 
 
    -     nY(2,:)=vverts(:,2)';
 
    -     nZ=nan(3,ntri);
 
    -     nZ(1,:)=uverts(:,3)';
 
    -     nZ(2,:)=vverts(:,3)';
 
    -     end
 
   
           然后,创建主文件,绘制曲面及交线:
   
    -     clear all
 
    -     clc
 
    -      
 
    -     u = 0;                                          %控制坐标区间
 
    -     lmax = 2; hmax = 4;
 
    -     if u == 0
 
    -         lx = lmax; tx = -lx;                        %tx:x负半轴长;lx:x正半轴长
 
    -         ly = lx; ty = -ly; % 全轴
 
    -         lz = hmax; tz = 0;
 
    -     elseif u == 1 
 
    -         lx = lmax; tx = 0;
 
    -         ly = lx; ty = 0;  % 正半轴
 
    -         lz = hmax; tz = 0;   
 
    -     else 
 
    -         lx = 0; tx = -lmax;
 
    -         ly = 0; ty = tx;  % 负半轴
 
    -         lz = 0; tz = -hmax;  
 
    -     end
 
    -       
 
    -     for i = 1:4
 
    -         subplot(2,2,i)                                           %绘制四个视图
 
    -      
 
    -         f1 = @(x,y,z) 2*x - z;                                   %绘制隐函数曲面
 
    -         f2 = @(x,y,z) x.^2 + y.^2 - z;
 
    -         fimplicit3(f1,[tx lx ty ly tz lz],'EdgeColor','none',...
 
    -             'FaceColor','cyan')
 
    -         hold on
 
    -         fimplicit3(f2,[tx lx ty ly tz lz],'EdgeColor','none',...
 
    -             'FaceColor','y')
 
    -         alpha(0.3)                                                %曲面透明度
 
    -         axis equal
 
    -      
 
    -         [X,Y,Z]=meshgrid(-5:.1:5);                                 %绘制交线
 
    -         [nX,nY,nZ]=isocurve3(X,Y,Z,f1,f2);
 
    -         line(nX(:),nY(:),nZ(:),'LineWidth',1.5,'Color',[0.5,0,1]); 
 
    -      
 
    -         
 
    -     hold on                                                         %绘制XYZ轴
 
    -         plot3([tx,0,lx],[0,0,0],[0,0,0],'r',[0,0,0],[ty,0,ly],...
 
    -             [0,0,0],'g',[0,0,0],[0,0,0],[tz,0,lz],'b')
 
    -         xlabel('x轴');ylabel('y轴');zlabel('z轴');
 
    -      
 
    -         if i == 1
 
    -             title('三维图')
 
    -         elseif i == 2
 
    -             view([1,0,0])
 
    -             title('yOz平面')
 
    -             
 
    -         elseif i == 3
 
    -             view([0,-1,0])
 
    -             title('xOz平面')
 
    -         else
 
    -             view([0,0,1])
 
    -             title('xOy平面')
 
    -         end
 
    -         axis equal
 
    -         hold off
 
    -     end
 
   
   展示效果:
   
   PS:交线部分的函数来自这位大佬https://blog.csdn.net/slandarer/article/details/125710021
   我也是小白,很多错误不是很了解