zoukankan      html  css  js  c++  java
  • 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)=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

  • 相关阅读:
    Android Studio 插件
    天气预报接口api(中国天气网)
    使用easyui的Tree 实现无限子节点绑定
    js调用后台方法
    div窗口效果来自标准之路
    C#生成dll程序集文件
    一个技术人的博客
    HTML-embed标签详解
    网站生成桌面快捷图标
    文本框宽度自动适应文本宽度
  • 原文地址:https://www.cnblogs.com/Math-Nav/p/13402667.html
Copyright © 2011-2022 走看看