三角形元素的网格网格

时间:2015-05-14 22:28:03

标签: matlab element contourf

我想在我的牌照中建立某个方面的contourf情节。盘子被分成三角形元素,我有三角形每个结的坐标(x,y)。

那么,我怎样才能为我的结创造一个meshgrid所以我可以制作我的contourf情节?我有一切的坐标,并且在每个结中都有我的函数Z的值。 (我是Matlab的初学者,对不起这个"基本"问题)

1 个答案:

答案 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图,但如果你需要轮廓,那么插值就是最佳选择。