0

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

那么,我怎样才能meshgrid为我的结做一个,这样我就可以制作我的contourf情节了?我有一切的坐标,并且Z在每个结中都有我的功能的价值。(我是 Matlab 的初学者,很抱歉这个“基本”问题)

4

1 回答 1

0

如果您的目标只是可视化三角形,那么还有另一种可能更简单、更健壮的方法(见本文末尾)。

如果您确实需要生成轮廓,那么您将需要在网格上插入三角形网格。您可以为此使用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 图,因此如果您需要轮廓,则插值是可行的方法。

于 2015-05-15T10:58:12.740 回答