matlab 一维矩阵 绘制 二维平面图

问题描述:

matlab 一维矩阵 绘制 二维平面图
有两个一维矩阵,如x=linspace(0,4*pi,100),y=sin(x); 可以以x为横坐标,y为纵坐标画一维曲线,怎样根据这两个一维矩阵画二维彩色平面图,以x为坐标,y为函数值,如下图所示

1个回答 分类:综合 2014-09-28

问题解答:

我来补答
x=linspace(0,4*pi,100);
y=sin(x);

n=floor(length(x).*sqrt(2)/2);
v=linspace(-1,1,2*n-1)*x(n);
[xx yy]=meshgrid(v);
zz=interp1(x,y,sqrt(xx(:).^2+yy(:).^2));
zz=reshape(zz,size(xx));
imagesc(v,v,zz);
axis image;
colorbar;

再问: 非常感谢,但能否在每行加上注释,不太明白为何要这么做n=floor(length(x).*sqrt(2)/2);% 为何乘以sqrt(2)/2
v=linspace(-1,1,2*n-1)*x(n);% 完全看不懂
再答: 因为画成方形的图片的时候,离中间最远的就是4个角
根据原来的x,y数据,全部都用上了,最多画到角点
那么方形的边框位置最多是原来最大范围的sqrt(2)/2

算法本身是通过插值计算图像每点的值,所以分辨率是可以随意设置的
也就是最后图像的采样疏密是可以随意控制的
但就你原来已经有的x,最好还是保持和原来x一致的采样间隔

所以用length(x)求得原来图像x的点数
然后乘以sqrt(2)/2再取整,就的到最后图像边缘到中心的采样点数n
原来x是从0开始,x(1)=0,而x(2),x(3),...依次递增,到x(100)等于4*pi
那么图像边缘x对应的值就是x(n)
现在整个图像从左到右,从上到下的范围都是 -x(n) ~ x(n)
而算上中间0点,这期间应该有2n-1个点
所以v=linspace(-1,1,2*n-1)*x(n);得到了就是

图像从左到右,从下到上的横坐标和纵坐标范围

用meshgrid将这个范围扩成二维矩阵xx,yy
然后利用sqrt(xx(:).^2+yy(:).^2)计算出二维网格中每点到中心的距离
利用原来x,y数据,和这个距离插值计算出网格每点的值
最后用imagsc将网格画成图像
 
 
展开全文阅读
剩余:2000
上一页:解题方法 技巧
下一页:过程3