【问题标题】:Create surface plot in MATLAB using x,y,z array使用 x,y,z 数组在 MATLAB 中创建曲面图
【发布时间】:2020-11-07 04:35:26
【问题描述】:

我在 MATLAB 中有一个包含三列的矩阵,给出 x、y 和 z 值:

+----+-----+----+
| 65 | 300 | 10 |
| 65 | 500 |  5 |
| 70 | 300 |  9 |
| 70 | 500 |  4 |
| 75 | 300 |  8 |
| 75 | 500 |  3 |
+----+-----+----+

如果需要,可以使 x 和 y 数据始终形成一个网格,但如果不必这样做,那将是有利的。

我想用这些数据创建一个 3D 表面。

我相信这意味着我需要转换数据以使我拥有 Z(x,y),例如:

+-----+----+----+----+
|     | 65 | 70 | 75 |
+-----+----+----+----+
| 300 | 10 |  9 |  8 |
| 500 |  5 |  4 |  3 |
+-----+----+----+----+

此时我认为我可以调用surface(Z)。

在 MATLAB 中实现这一目标的最佳方法是什么?

【问题讨论】:

  • 像您的示例一样,始终从网格中执行 xy 吗?
  • 嗨,路易斯,感谢您的回复!是的。
  • 请将该信息编辑到问题中以重新打开它
  • 同时,试试M = [65 300 10; 65 500 5; 70 300 9; 70 500 4; 75 300 8; 75 500 3]; M = sortrows(M); ii = unique(M(:,1)); jj = unique(M(:,2)); surf(ii,jj,reshape(M(:,3), numel(jj), numel(ii)))
  • @luisMendo -- 谢谢!在玩了一会儿之后,我意识到虽然我的数据可以形成一个网格,但在某些情况下(我不需要那么多数据)可能并不理想。如果我的数据集是“矩形”,有没有办法做到这一点?我已经更新了我的问题。感谢您的帮助!

标签: matlab matrix transform surface


【解决方案1】:

您可以使用delaunay 三角测量并使用trisurf(三角曲面图)对其进行绘制,如下所示。

T = delaunay(x,y);
trisurf(T,x,y,z);

【讨论】:

  • 感谢 S Bawazeer!这样可行!它使用我正在使用的数据集(比我提供的示例中的大)生成看起来是黑色的表面,但是当您展开图形并仔细观察时,它是数千个三角形。我将尝试使用线条设置将其恢复为渐变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
  • 2016-09-07
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
  • 2019-04-11
相关资源
最近更新 更多