八度 - 为什么冲浪不起作用,而 trisurf 可以?



我可以绘制一个三冲浪图,但冲浪不起作用。

我做错了什么?

pkg load statistics;
figure (1,'name','Matrix Map');
colormap('hot');
t = dlmread('C:Map3D.csv');
tx =t(:,1);ty=t(:,2);tz=t(:,3);
tri = delaunay(tx,ty);
handle = surf(tx,ty,tz); #This does NOT work
#handle = trisurf(tri,tx,ty,tz);  #This does work

'错误:表面:行 (Z( 必须与长度 (Y( 相同,列 (Z( 必须与长度相同 (十(

我的数据采用 CSV 格式(此处未显示逗号(

1   2   -0.32
2   2   0.33
3   2   0.39
4   2   0.09
5   2   0.14
1   2.5 -0.19
2   2.5 0.13
3   2.5 0.15
4   2.5 0.24
5   2.5 0.33
1   3   0.06
2   3   0.44
3   3   0.36
4   3   0.45
5   3   0.51
1   3.5 0.72
2   3.5 0.79
3   3.5 0.98
4   3.5 0.47
5   3.5 0.55
1   4   0.61
2   4   0.13
3   4   0.44
4   4   0.47
5   4   0.58
1   4.5 0.85

surf错误消息在Matlab或Octave中是不同的。

来自 Matlab 的错误消息:

Z 必须是矩阵,而不是标量或向量

问题在这里很清楚,因为您指定了Z(tz(作为向量。

来自Octave的错误消息:

表面:行 (Z( 必须与长度 (Y( 相同,列 (Z( 必须与长度 (X( 相同

你在这里是错误的,因为在你的例子中,列 (Z( = 1,但长度 (X( = 26,所以这是错误的。

这样做的后果之一是,使用surf,网格上不能有"孔"或未定义的点。在您的情况下,您有一个从 1 到 5 的 X 网格和一个从 2 到 4.5 的 Y 网格,但未定义坐标点 (2, 4.5(。


@Luis Mendo,Matlab和Octave确实允许原型surf(matrix_x, matrix_y, matrix_z)但第三个参数matrix_z仍然必须是矩阵(而不是标量或向量(。显然,只有一行或一列的矩阵不被视为矩阵。


为了解决这个问题,我建议如下:

tx = 1:5; % tx is a vector of length 5
ty = 2:0.5:4.5; % ty is a vector of length 6
tz = [-0.32 0.33 0.39 0.09 0.14;
-0.19 0.13 0.15 0.24 0.33;
0.06 0.44 0.36 0.45 0.51;
0.72 0.79 0.98 0.47 0.55;
0.61 0.13 0.44 0.47 0.58;
0.85 0.   0.   0.   0.]; % tz is a matrix of size 6*5
surf(tx,ty,tz);

请注意,我必须在未定义网格的点上发明一些值,我放了0.但您可以使用您喜欢的值更改它。

相关内容

  • 没有找到相关文章

最新更新