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。比如本例中不想要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)

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值