【Matlab】 meshgrid surf1

来源:互联网 发布:肯特州立大学知乎 编辑:程序博客网 时间:2024/05/22 03:24

函数功能:
生成绘制3-D图形所需的网格数据。在计算机中进行绘图操作时, 往往需要一些采样点,然后根据这些采样点来绘制出整个图形。在进行3-D绘图操作时,涉及到x、y、z三组数据,而x、y这两组数据可以看做是在Oxy平面内对坐标进行采样得到的坐标对(x, y)。
例如, 要在“3<=x<=5,6<=y<=9,z不限制区间” 这个区域内绘制一个3-D图形,如果只需要整数坐标为采样点的话。我们可能需要下面这样
一个坐标构成的矩阵:
(3,9),(4,9),(5,9);
(3,8),(4,8),(5,8);
(3,7),(4,7),(5,7);
(3,6),(4,6),(5,6);
在matlab中我们可以这样描述这个坐标矩阵:
把各个点的x坐标独立出来,得:
3,4,5;
3,4,5;
3,4,5;
3,4,5;
再把各个点的y坐标也独立出来:
9,9,9;
8,8,8;
7,7,7;
6,6,6;
这样对应的x、y结合,便表示了上面的坐标矩阵。
meshgrid就是产生这样两个矩阵,来简化我们的操作。
然后根据(x, y)计算获得z,并绘制出三维图形。
在Matlab命令窗口中键入type meshgrid可以查看该函数的源代码(由此可以理解meshgrid的算法思想), 键入doc meshgrid或者help meshgrid可以获得帮助文档。
语法格式:
[X,Y] = meshgrid(x,y)
上面的描述,我们可以知道,meshgrid返回的两个矩阵X、Y必定是行数、列数相等的,且X、Y的行数都等于输入参数y中元素的总个数,X、Y的列数都等于输入参数x中元素总个数(这个结论可以通过查看meshgrid的源代码得到,可以通过示例程序得到验证)。
[X,Y] = meshgrid(x)
[X,Y,Z] = meshgrid(x,y,z)

程序示例:

示例一:

close all; clear; clc;
x = [3, 4, 5]
y = [6; 7; 8; 9]
[xx, yy] = meshgrid(x, y)

输出:

xx =
     3     4     5
     3     4     5
     3     4     5
     3     4     5
yy =
     6     6     6
     7     7     7
     8     8     8
     9     9     9

示例二:

>>
x = [3, 4, 5];
y = [6; 7; 8; 9];
[yy, xx] = meshgrid(y, x)

输出结果:
yy =
     6     7     8     9
     6     7     8     9
     6     7     8     9
xx =
     3     3     3     3
     4     4     4     4
     5     5     5     5

示例三:

function main
    close all; clear; clc;
    M1; M2;
end

function M1
    x = rand(3, 4);
    y = rand(2, 3);
    size_of_x = size(x)
    size_of_y = size(y)
    [X, Y] = meshgrid(x, y);
    size_of_X = size(X)
    size_of_Y = size(Y)
end

function M2
    x = rand(3, 4, 2);
    y = rand(2, 3);
    size_of_x = size(x)
    size_of_y = size(y)
    [X, Y] = meshgrid(x, y);
    size_of_X = size(X)
    size_of_Y = size(Y)
end

输出结果:

size_of_x =
     3     4
size_of_y =
     2     3
size_of_X =
     6    12
size_of_Y =
     6    12
size_of_x =
     3     4     2
size_of_y =
     2     3
size_of_X =
     6    24
size_of_Y =
     6    24

最后, 说一下通过阅读meshgrid的源代码复习一下以前的一些下标操作知识:

>> x = [1 2 3 4]
x =
     1     2     3     4
>> x([1 1 1 1],:)
ans =
     1     2     3     4
     1     2     3     4
     1     2     3     4
     1     2     3     4

就是把x中第1行复制4份。

如果,这个例子不明显,再看个例子:

>> x = [1 2 3 4 5;
6 7 8 9 10;
11 12 13 14 15;
16 17 18 19 20]
x =
     1     2     3     4     5
     6     7     8     9    10
    11    12    13    14    15
    16    17    18    19    20
>> x([4 2], :) % 依次取出x的第4行和第2行
ans =
    16    17    18    19    20
     6     7     8     9    10
>> x([4 3 2 1], :) % 按行倒置
ans =
    16    17    18    19    20
    11    12    13    14    15
     6     7     8     9    10
     1     2     3     4     5

0 0
原创粉丝点击