问题是 surf 将矩阵 p 视为 z 值的二维数组,其中 x 和 y 为整数值。幸运的是,surf 有不止一种输入值的方法(请参阅http://au.mathworks.com/help/matlab/ref/surf.html http://au.mathworks.com/help/matlab/ref/surf.html).
尝试这个:
x = [1 1 1 1 0.95 0.95 0.95 0.95 0.85 0.85 0.85 0.85 0.8 0.8 0.8 0.8 0.75 0.75 0.75 0.75]';
y = [0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1 0.3 0.2 0.15 0.1]';
z = [0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3 0.1 0.15 0.2 0.3]';
xr = reshape(x, 4, 5);
yr = reshape(y, 4, 5);
zr = reshape(z, 4, 5);
surf(xr, yr, zr)
xlabel('x')
ylabel('y')
zlabel('z')
在本例中,surf 需要一个包含 x、y 和 z 值的 2D 数组(如果从上往下看,它们会出现)。这样,surf 就知道将哪些顶点连接到曲面中。幸运的是,只需将向量重塑为矩阵,就可以通过数据轻松实现这一点。
将来,如果所有点都位于相同的 x 和 y 坐标上,您可以将 xr 替换为 [1, 0.95, 0.85, 0.8, 0.75],将 yr 替换为 [0.3, 0.2, 0.15, 0.1],surf 会将它们转换为为你准备的数组。