【发布时间】:2018-01-22 01:35:42
【问题描述】:
大家好,我正在尝试从 MSC Patran 导出网格,然后在 Matlab 中绘制它。网格可以是任意形状。我有所有节点的 x、y 和 z 坐标。到目前为止,我已经尝试了许多不同的选项,这就是 他们失败的原因:
- Surfc() 与 meshgrid 和 griddata: 我用 meshgrid 在 x-y 平面上生成了一个网格,然后使用 griddata 来获得 z 矩阵。但是这个图只有在只有 1 个 z 值对应于 x-y 对时才有效。换句话说,要使其工作,z 必须是 z = f(x,y) 类型。
- pdegplot() :我发现 matlab 可以导入和绘制 .stl 文件。我尝试转换我的坐标矩阵格式并用这个函数绘制它,但它也不起作用。因为显然在 .stl 文件中,一条边不能被超过 2 个元素共享。但是我的 FEM 文件总是(我希望)壳元素。这意味着 3 个或更多元素可以共享相同的元素。
- Surfc() with 3d meshgrid:我发现 meshgrid() 可以接受 3 个输入 (x,y,z) 并创建一个 3d 网格。然而,这也不起作用。我使用了一个非常小的网格,大约有 1000 个节点,代码试图生成 3 个具有 1000x1000x1000 元素的矩阵。这意味着 1000 个节点的网格需要大约 3 GB 的内存。更重要的是,surfc 甚至无法绘制。
- 以某种方式自动导入其他文件格式:到目前为止,我一直在使用 patran 中性文件 (.out)。我手动读取文件并从中提取 x,y,z 数据。 Patran 还可以导出为 parasolid、iges 和 step 文件格式。我在 matlab 中寻找直接导入和绘制这些函数的方法,但就我所见而言,这些函数并不存在。
- 手动生成网格: Matlab 可以创建 3D 对象(如 [x,y,z] = sphere()),Surfc() 可以绘制这些对象,尽管我在 (1.) 中说过,x ,y,z 由 sphere() 生成的矩阵不像 (3.) 中那样是 3 维的,所以我尝试遵循这个并从我的 FEM 文件手动生成一个 3d 网格,仅用于测试。我发现 z 有重复的列,并且在每一列(作为一个层)中有 x 和 y 的 n 个值。当我尝试手动为我的网格做同样的事情时,surfc() 不再起作用。它绘制了一个我什至无法描述的非常奇怪的形状。
- 寻找第 3 方绘图软件:我尝试使用 gnuplot 之类的(轻量级)软件并访问,但到目前为止我都湿透了。如果您知道任何可以直接绘制 patran 中性文件的软件(最好是开源),我愿意接受建议。但该软件还必须能够绘制等高线图。因为我在 Matlab 中计算每个节点的数量,然后在网格上绘制其轮廓。
【问题讨论】:
-
网格(除非完全规则)不仅由点定义,而且由点之间的连接定义。您是否有连接信息,或者您正在处理常规网格?您还非常坚定地描述了它为什么起作用,但忘记描述您的数据!我只能从您的第一个函数中暗示每个 x,y 都有多个 Z 吗?怎么样?
-
@Ander Biguri 我的网格不规则,是的,我有连接信息。目前我的网格都是二次的(尽管它也可能是三等)。我有一个矩阵给出每个元素的 4 个节点(m x 4)和一个矩阵,给出每个节点的 x、y、z 坐标(n x 3)。其中 m 是元素数,n 是节点数。
-
所以你可以有一个
tetramesh? -
至于您的下一个问题,是的,每个 x,y 都有多个 z。这就是我所说的任意。但我想我应该更清楚。想想 x-z 平面上的一个盘子。在这种情况下,所有节点的 y 坐标相同。如果两个节点有相同的 x,那么这意味着两个节点的 x 和 y 相同,但 z 不同。
-
我明白你的意思,但你描述错误。您的数据是
[x,y,z],即使有时某些值被多次使用。看看建议的功能。我不认为有一个用于四边形的,我认为你只需要编写自己的