Matlab画三维图像给xy设定范围,定义域可是任意形状 您所在的位置:网站首页 MATLAB定义域十倍关系 Matlab画三维图像给xy设定范围,定义域可是任意形状

Matlab画三维图像给xy设定范围,定义域可是任意形状

2024-06-26 14:07| 来源: 网络整理| 查看: 265

用matlab画曲面图时,比如画一个旋转抛物面,如果如下写程序:

x=-1:0.02:1; y=x; [x1,y1]=meshgrid(x,y);%生成画图用的xy网格数据 z=x1.^2+y1.^2; %C=0.1*z;%设置图像颜色的矩阵,跟z同形状 mesh(x1,y1,z)%画三维网格图 figure surf(x1,y1,z)%画三维曲面图

图像就会这样:

 

 跟我们想象的旋转抛物面不怎么一样,边界是方的。一种方法是用极坐标生成网格数据,这种方法的局限性较大,生成的xy轴定义域网格数据都是圆形的(能否生成其他形状定义域没有好好研究),下面的方法基本是任意形状的定义域都可以。先上程序和图:

x=-1:0.001:1; y=x; [x1,y1]=meshgrid(x,y);%生成画图用的xy网格数据 z=x1.^2+y1.^2; [m,n]=size(x1); for i=1:m     for j=1:m         if x1(i,j)^2+y1(i,j)^2>1             x1(i,j)=nan;%将不想要的点横坐标或纵坐标值改为nan         end     end end figure mesh(x1,y1,z)%画三维网格图 figure surf(x1,y1,z)%画三维曲面图 %shading flat;%去掉绘图时网格线的黑边,防止点太密时曲面呈黑色 shading interp%绘图时网格线颜色自动插值,让图像像颜色更自然

因为去掉了surf画图的黑色网格线,所以上面这段程序用surf和mesh画图结果一样。 

为防止边缘出现毛边,该段程序取点时取得比较密集。

原理通过程序大家应该看清楚了,就是把不想要的点横坐标或纵坐标改成nan。比如本例中不想要x1^{2}+y1^{2}1的点,就将其横坐标都改为了nan,这样三维坐标缺少一维,图像自然就不显示了。

再来个马鞍面:

x=0:0.01:1; y=x; [x1,y1]=meshgrid(x,y); [m,n]=size(x1); for i=1:m     for j=1:n         if abs(x1(i,j))+abs(y1(i,j))>1             x1(i,j)=nan;             y1(i,j)=nan;         end     end end z=x1.*y1; mesh(x1,y1,z)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有