2017-08-14 691 views
0

你好傢伙我試圖從MSC Patran中導出一個網格,然後在Matlab中繪製它。網格可以是任意形狀。我有所有節點的x,y和z座標。到目前爲止,我已經嘗試了許多不同的選擇,這裏是失敗的原因:使用matlab繪製任意三維有限元網格

  1. Surfc()與meshgrid和的GridData: 我產生與meshgrid XY平面上的網格,然後使用的GridData來獲得z矩陣。但是這個圖只有當對應於x-y對的只有1個z值時才起作用。換句話說,爲了這個工作,z必須是z = f(x,y)。
  2. pdegplot():我發現matlab可以導入並繪製.stl文件。我嘗試轉換我的座標矩陣格式並用此函數繪製它,但它也不起作用。因爲明顯在.stl文件中,邊緣不能被2個以上的元素共享。然而我的FEM文件總是(我希望)shell元素。這意味着3個或更多元素可以共享相同的元素。
  3. Surfc()with 3d meshgrid:我發現meshgrid()可以接受3個輸入(x,y,z)並創建一個3d網格。然而,這也沒有工作。我使用了一個具有約1000個節點的非常小的網格,並且代碼試圖用1000x1000x1000元素生成3個矩陣。這意味着1000節點網格的內存大約爲3 GB。更重要的是,surfc甚至不能策劃這一點。
  4. 以某種方式自動導入其他文件格式:到目前爲止,我一直在使用patran中性文件(.out)。我手動讀取文件並從中提取x,y,z數據。 Patran還可以導出爲parasolid,iges和步驟文件格式。我尋找直接的方式來導入和繪製這些matlab中,但這樣的功能並不存在,據我所看。
  5. 手動生成一個網格:儘管我在(1)中說過,並且x,y可以創建3D對象(比如[x,y,z] = sphere()),而Surfc ,由sphere()生成的z矩陣不像(3)那樣是3維的,所以我嘗試了下面的內容,然後從我的FEM文件手動生成一個3d網格來進行測試。我發現z具有重複的列,並且在每列(其作爲圖層)中有x和y的n個值。當我嘗試手動爲網格做同樣的事情時,surfc()再次無法工作。它繪製了一個我無法形容的奇怪形狀。
  6. 尋找第三方繪圖軟件:我嘗試使用(光)軟件像gnuplot和訪問,但到目前爲止,我都溼了。如果您知道任何可以直接繪製patran中性文件的軟件(最好是開源軟件),我都樂於接受這些建議。但是軟件也必須能夠進行輪廓繪圖。我正在計算Matlab中每個節點的數量,然後在網格上繪製其輪廓。
+0

網格(除非完全規則)不僅由點定義,而且由點之間的連接定義。您是否擁有連接信息,或者您是否處理常規網格?你也非常堅決地描述了爲什麼它能夠工作,但忘記描述你的數據!我只能從你的第一個函數中提示你對每個x,y有多個Z?怎麼樣? –

+0

@Ander Biguri我的網格不規則,是的,我有連接信息。目前我的網格都是二次的(儘管它也可能是tri等)。我有一個矩陣,給出每個元素的4個節點(m x 4)和一個矩陣,給出每個節點的x,y,z座標(n x 3)。其中m是元素的數量,n是節點的數量。 –

+0

所以你可以有一個['tetramesh'](https://uk.mathworks.com/help/matlab/ref/tetramesh.html)? –

回答

0

所以你可以有一個tetramesh

您似乎正在使用FEM-stile網格,因此標準曲面繪圖功能將不起作用。對於不同形狀的FEM網格(不是四邊形),您可能需要編寫自己的函數...