2015-05-14 202 views
0

我想在我的Plate中構建一個contourf圖形。板被分成三角形元素,我有三角形每個結的座標(x,y)。三角形網格的MeshGrid

那麼,我怎樣才能製作一個meshgrid爲我的結,所以我可以使我的contourf情節?我有一切的座標,並在每個結中有我的功能Z的價值。 (我是Matlab的初學者,對於這個「基本」問題感到抱歉)

回答

0

如果你的目標只是將三角形可視化,那麼有另一種方法可能更簡單,更強大(見本文末尾)。

如果您確實需要生成輪廓,那麼您需要在網格上插入三角形網格。您可以使用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圖,儘管如此,如果您需要輪廓線,插值是最佳選擇。