我需要能够使用来自3个向量的数据进行表面绘图。我发现了类似的信息,但似乎没有方法可以用于我的数据。我的X和Y列均匀分布,但不是按升序排列。我尝试了不同的方法,但它们似乎都没有给我我想要的东西,这是一个将关闭点连接在一起的简单表面。我尝试了以下方法:
[X Y]=meshgrid(x,y);
Z=griddata(x,y,z, X,Y);
surf(X,Y,Z);
这不是我想要的,因为它在z = 0处创建了一个表面,使其看起来更像是一个体积图,而不仅仅是一个表面。它在我的计算机上也运行得非常慢(可能来自创建所有网格点)。如果我能得到一些不需要太多内存的东西,那将是理想的(我的载体每个都有大约20k的值),但这不是必需的。
***编辑:我也尝试使用找到here的scatInterpolant方法,但MATLAB似乎无法识别该函数,我收到此错误:
Undefined function 'scatteredInterpolant' for input arguments of type 'double'.
此处还有我的问题图片:
你可以看到我们无法在表面下看到,有一些z = 0平面阻挡它。
如果您有任何帮助,我们将不胜感激。
提前致谢。
**编辑2:我添加了示例vectors,它们是我从左到右的x,y和z值。
***编辑3:这是我得到的三角测量图像。正如你所看到的,由于某些原因,某些点被忽略了,这给了那些长而奇怪的蓝色三角形。
麦克
答案 0 :(得分:1)
如果您有由矢量描述的点,并且您想绘制它们,则可以始终使用Delauny三角测量。 matlab中的函数称为Tri=delauny(X,Y,Z)。此功能生成的数据可以使用trimesh(Tri,X,Y,Z)或trisurf(Tri,X,Y,Z)显示。请记住,trisurf仅适用于3D数据。如果您想调整图表中图表的透明度,请使用alpha设置。
我希望这会有所帮助
答案 1 :(得分:1)
由于传统方法似乎失败了,我建议你手动完成。
Z
值的NaN
矩阵。矩阵的大小应取决于您的x
和y
值。x
,y
对,并将其(平均值?)z
值放在Z
矩阵的正确位置。NaN
值并插入其值。也许使用filter2
。surf
绘制结果曲面答案 2 :(得分:1)
对我而言,您似乎只需在绘图前对数据进行排序。
以下是一个我认为与您的案例类似的示例(因为我无法下载您的数据)。
{{1}}
第一个数字会产生一个非常有问题的表面:
第二个数字包含所需的表面: