我想在我的牌照中建立某个方面的contourf
情节。盘子被分成三角形元素,我有三角形每个结的坐标(x,y)。
那么,我怎样才能为我的结创造一个meshgrid
所以我可以制作我的contourf
情节?我有一切的坐标,并且在每个结中都有我的函数Z
的值。 (我是Matlab的初学者,对不起这个"基本"问题)
答案 0 :(得分:0)
如果你的目标只是想象三角形,那么另一种方式可能更简单,更健壮(参见本文末尾)。
如果您肯定需要生成轮廓,则需要在网格上插入三角形网格。您可以使用scatteredInterpolant
类(文档here)。它采用X和Y参数或三角形顶点(结)以及每个参数的Z值,并创建一个可用于评估其他点的“函数”。然后创建一个网格,在网格上插入三角形网格,然后将结果用于计算图。
scatInterpolant have to be linear column vectors, so you will probably need to reshape them using the
(:)符号的输入。
所以我们假设你有像这样的三角形数据
X = [1 4; 8 9];
Y = [2 3; 4 5];
Z = [0.3 42; 16 8];
你首先计算你的范围的上限和下限
xlimits = minmax(X(:));
ylimits = minmax(Y(:));
其中(:)表示法用于在单个列中排列X的所有元素。
然后你可以创建一个跨越该范围的meshgrid
。您需要确定该网格应该有多精细。
spacing = 1;
xqlinear = xlimits(1):spacing:xlimits(2);
yqlinear = ylimits(1):spacing:ylimits(2);
其中linspace从第一个(xlimits(1)
)开始,到第三个(xlimits(2)
)结束并由spacing
分隔的值向量。试验一下并查看结果,你会看到它是如何工作的。
这两个向量指定每个维度中的网格位置。要制作实际的meshgrid
样式网格,请在其上调用meshgrid
[XQ, YQ] = meshgrid(xqlinear, yqlinear);
这将产生两个点矩阵。 XQ
保存网格中每个点的x坐标,排列在同一网格中。 YQ
保存y坐标。两者需要走到一起。再试一次并查看结果,你会看到它是如何工作的。
然后你可以将它们全部放在插值中:
F = scatteredInterpolant(X(:), Y(:), Z(:));
ZQ = F(XQ, YQ);
在每个网格点获取插值ZQ
。然后,您可以将这些数据发送到contourf
contourf(XQ, YQ, ZQ);
如果轮廓太过块,您可能需要使spacing
值更小,这会在插值中产生更多的点。如果您有大量数据,这可能会导致内存问题,请注意这一点。
如果您的目标只是查看三角形网格,那么您可能会发现trimesh
执行您想要的操作,或者取决于您的数据的表示方式scatter
。这些都会产生带有线框或点云的3D图,但如果你需要轮廓,那么插值就是最佳选择。