定义表面不仅仅是z

时间:2017-06-22 16:55:20

标签: matlab octave surf

我有三个不同的表面,我想在一个图中显示所有表面。

问题是,我有一个用z定义的表面(意味着我得到了x和y值以及一个指定每个组合的z值的网格)和另外两个用x定义的表面。这意味着对于一个x,y对存在各种z值。

我的想法是:

figure
surf(x,y,zgrid)
hold on
surf(x,ygrid,z)
surf(x,ygrid2,z)
hold off

我希望MATLAB能够自己管理它,但事实并非如此。 您对如何获得想要的结果有任何想法吗?我想在一个图中显示所有这些以显示横截面。

这是一个如何或多或少应该是这样的图像:

enter image description here

如果有更漂亮的方法可以显示,请告诉我。

1 个答案:

答案 0 :(得分:3)

你没有说明到底出了什么问题,但是当你试图绘制你的第二个表面时,我会冒一个有根据的猜测你会得到如下错误:

Error using surf (line 82)
Z must be a matrix, not a scalar or vector.

我猜你的xyz变量是向量,而不是矩阵。 surf函数允许XY输入为向量,然后使用meshgrid将其扩展为矩阵。但Z输入执行此操作。

在我看来,最好的做法是只使用矩阵来输入所有输入。以下是我执行此操作的示例(使用meshgrid)绘制多维数据集的三个曲面:

% Top surface (in z plane):
[x, y] = meshgrid(1:10, 1:10);
surf(x, y, 10.*ones(10), 'FaceColor', 'r');
hold on;

% Front surface (in y plane):
[x, z] = meshgrid(1:10, 1:10);
surf(x, ones(10), z, 'FaceColor', 'b');

% Side surface (in x plane):
[y, z] = meshgrid(1:10, 1:10);
surf(ones(10), y, z, 'FaceColor', 'g');
axis equal

这是情节:

enter image description here