三角形元素的 MeshGrid

MeshGrid for Triangle Elements

我想在我的板块中建立一个特定方面的 contourf 情节。该板分为三角形元素,我有三角形每个节点的坐标(x,y)。

那么,我怎样才能为我的结制作一个 meshgrid 以便我可以制作我的 contourf 情节?我有所有东西的坐标,并且在每个结中都有我的函数 Z 的值。 (我是 Matlab 的初学者,很抱歉这个 "basic" 问题)

如果您的目标只是可视化三角形,那么还有另一种可能更简单、更可靠的方法(请参阅本文结尾 post)。

如果您确实需要生成轮廓,那么您将需要在网格上插入三角网格。您可以为此使用 scatteredInterpolant class(文档 here)。它采用 X 和 Y 参数或您的三角形顶点(结),以及每个参数的 Z 值,并创建一个 'function',您可以使用它来评估其他点。然后你创建一个网格,在网格上插入你的三角形网格,你可以将结果用于计数图。

scatteredInterpolanthave 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 图,所以如果您需要等高线,插值是可行的方法。