我试图用MATLAB绘制三维曲面,我使用了meshgrid
,类似于MATLAB教程在这里说的:http://www.mathworks.com/help/matlab/ref/meshgrid.html。
我编写了一个非常简单的三行脚本,我相信它会生成曲面z=x+y,如下所示:
[x , y] = meshgrid( linspace( 0 , 10 , 10 ) , linspace( 0 , 10 , 10 ) );
z = x + y;
surf( [ x , y , z] );
据我所知,第1行生成(x,y)坐标的所有组合,从0到10之间间隔均匀。然后,第2行只将公式z = x + y
应用于这个详尽的组合列表。然后,第3行只绘制所有(x, y, z)
点。
但作为输出,我得到了以下“东西”:
我很确定上面图片中的图形不是z = x + y
,我也不知道为什么没有两个轴达到最大值10。
不过,我觉得剧本太简单了,看不出有什么问题。有人能指出我哪里漏掉了什么东西吗?谢谢。
发布于 2015-07-04 20:23:57
生成3D坐标的语法是正确的。您对surf
的调用是不正确的。您实际上需要做的是将x
、y
和z
分为三个独立的参数:
surf(x,y,z);
当你这样做的时候,你就得到了这个表面。请注意,生成的图形是使用MATLAB R2013a生成的,因此所显示的颜色地图不是在R2014b和R2014b上可用的parula颜色地图,但是表面将是正确的,这就是您要寻找的:
..。现在,为什么需要分离x
、y
和z
点来创建表面呢?因为做[x,y,z]
意味着你是[x,y,z]
-- x
,y
和z
坐标为单个2D信号,所以你正在创建一个2D信号,这个信号是10×30。使用这个单一的2D数组调用surf
自动假定x
值跨度从1到30,y
值跨度从1到10,这些是跨越surf
图轴线的2D值网格,以及所示的z
值,其中z
值来自先前创建的级联矩阵。如果您查看生成的绘图,您可以看到x
值从1到30不等,这显然不是您想要的。
您需要分离x
、y
和z
值以实现所需的平面。
https://stackoverflow.com/questions/31227056
复制相似问题