我想在我的Plate中構建一個contourf
圖形。板被分成三角形元素,我有三角形每個結的座標(x,y)。三角形網格的MeshGrid
那麼,我怎樣才能製作一個meshgrid
爲我的結,所以我可以使我的contourf
情節?我有一切的座標,並在每個結中有我的功能Z
的價值。 (我是Matlab的初學者,對於這個「基本」問題感到抱歉)
我想在我的Plate中構建一個contourf
圖形。板被分成三角形元素,我有三角形每個結的座標(x,y)。三角形網格的MeshGrid
那麼,我怎樣才能製作一個meshgrid
爲我的結,所以我可以使我的contourf
情節?我有一切的座標,並在每個結中有我的功能Z
的價值。 (我是Matlab的初學者,對於這個「基本」問題感到抱歉)
如果你的目標只是將三角形可視化,那麼有另一種方法可能更簡單,更強大(見本文末尾)。
如果您確實需要生成輪廓,那麼您需要在網格上插入三角形網格。您可以使用scatteredInterpolant
類(文檔here)。它採用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圖,儘管如此,如果您需要輪廓線,插值是最佳選擇。