Matlab画三维图像给xy设定范围,定义域可是任意形状 | 您所在的位置:网站首页 › MATLAB定义域十倍关系 › Matlab画三维图像给xy设定范围,定义域可是任意形状 |
用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。比如本例中不想要 再来个马鞍面: 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 实验室设备网 版权所有 |