2

假设我有以下脚本:

u = -5:.2:5;
[X,Y] = meshgrid(u, u);
Z = cos(X).*cos(Y).*exp(-sqrt(X.^2 + Y.^2)/4);
surf(X,Y,Z);

无论如何,我可以让 MatLab 只绘制表面的一部分吗?比如说,我只想绘制一个点或一个网格,我该怎么办?我想也许可以绘制一个我可以使用的点:

surf(X(1,1), Y(1,1), Z(1,1))

但后来我收到错误消息:

??? Error using ==> surf at 78
Data dimensions must agree.

我真的很感激这里的一些输入/帮助。提前致谢 :)

4

2 回答 2

6

当我尝试您尝试的方法时,我得到以下信息:

surf(X(1,1),Y(1,1),Z(1,1))
使用 surf 时出错(第 75 行) Z 必须是矩阵,而不是标量或向量。

所以问题是你不能只用 做一个点或线surf,你必须使用不同的功能。但是您可以选择子区域

>> ii=1:5;
>> jj=1:20;
>> surf(X(ii,jj),Y(ii,jj),Z(ii,jj))

另一种方法是使用 NaN 作为掩码。

>> mask = ones(size(X));
>> mask(1:20, 20:end) = nan;
>> surf(X.*mask, Y.*mask, Z.*mask)

这将使存在 NAN 的部分不显示。

于 2012-06-01T19:54:58.500 回答
1

要仅显示单个点,您可能会喜欢为点云设计的函数 scatter3。

scatter3(X(1,1), Y(1,1), Z(1,1))

当然,它也适用于 X、Y、Z 点的向量。您还可以直接为每个点指定点大小和颜色。

于 2012-06-01T20:10:53.960 回答