我想contourf
在我的板块中构建某个方面的情节。盘子被分成三角形元素,我有三角形每个结的坐标(x,y)。
那么,我怎样才能meshgrid
为我的结做一个,这样我就可以制作我的contourf
情节了?我有一切的坐标,并且Z
在每个结中都有我的功能的价值。(我是 Matlab 的初学者,很抱歉这个“基本”问题)
如果您的目标只是可视化三角形,那么还有另一种可能更简单、更健壮的方法(见本文末尾)。
如果您确实需要生成轮廓,那么您将需要在网格上插入三角形网格。您可以为此使用scatteredInterpolant
该类(此处的文档)。它采用 X 和 Y 参数或您的三角形顶点(结),以及每个顶点的 Z 值,并创建一个“函数”,您可以使用它来评估其他点。然后你创建一个网格,在网格上插入你的三角形网格,你可以将结果用于计数图。
分散插值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 图,因此如果您需要轮廓,则插值是可行的方法。