使用 matlab 绘制任意 3D 有限元网格



大家好,我正在尝试从MSC Patran导出网格,然后将其绘制在Matlab中。网格可以是任意形状。我有所有节点的 x、y 和 z 坐标。到目前为止,我已经尝试了许多不同的选项,这就是它们失败的原因:

  1. Surfc((with meshgrid and griddata: 我用网格在x-y平面上生成了一个网格,然后使用griddata来获得z矩阵。但此图仅在只有 1 z 值对应于 x-y 对时才有效。换句话说,要使其工作,z 的类型必须为 z = f(x,y(。
  2. pdegplot((: 我发现 matlab 可以导入和绘制 .stl 文件。我尝试转换我的坐标矩阵格式并使用此功能绘制它,但它也不起作用。因为显然在 .stl 文件中,边缘不能由超过 2 个元素共享。但是,我的 FEM 文件始终是(我希望(外壳元素。这意味着 3 个或更多元素可以共享相同的元素。
  3. 带有 3d 网格的 Surfc((:我发现 meshgrid(( 可以接受 3 个输入 (x,y,z( 并创建一个 3d 网格。然而,这也不起作用。我使用了一个非常小的网格,大约有 1000 个节点,代码试图生成 3 个具有 1000x1000x1000 元素的矩阵。这意味着 1000 节点网格大约有 3 GB 的内存。更重要的是,surfc甚至无法绘制出这些图。
  4. 以某种方式自动导入其他文件格式:到目前为止,我一直在使用 patran 中性文件 (.out(。我手动读取文件并从中提取 x,y,z 数据。Patran还可以导出为parasolid,iges和step文件格式。我寻找在 matlab 中导入和绘制这些函数的直接方法,但据我所知,这些函数并不存在。
  5. 手动生成网格:Matlab 可以创建 3D 对象(如 [x,y,z] = sphere(((,而 Surfc(( 可以绘制这些对象,尽管我在 (1.( 中说过,并且 sphere(( 生成的 x,y,z 矩阵不像 (3.( 那样是 3 维的,所以我尝试遵循此操作并从我的 FEM 文件手动生成 3D 网格仅用于测试。我发现 z 有重复的列,并且在每列(充当层(中有 n 个 x 和 y 值。当我尝试手动为我的网格做同样的事情时,surfc(( 再次不起作用。它绘制了一个非常奇怪的形状,我什至无法描述。
  6. 寻找第三方绘图软件:我尝试使用(轻型(软件,如 gnuplot 和访问,但到目前为止我都湿了。如果您知道任何可以直接绘制 patran 中立文件的软件(最好是开源(,我愿意接受建议。但是该软件还必须能够绘制轮廓图。当我在 Matlab 中为每个节点计算数量,然后在网格上绘制其轮廓时。

所以你可以有一个四目目吗?

您似乎正在使用 FEM 阶梯网格,因此标准曲面绘图功能不起作用。对于不同形状(不是四(的 FEM-网格,您可能需要编写自己的函数...

如果您在变量pc中有网格点和网格单元格连接性,则可以使用外部 Matlab FEA 工具箱来绘制结构化和非结构化网格,例如plotgrid命令

% Cread grid struct.
grid.p = p;
grid.c = c;
grid.a = gridadj(p,c,size(p,1));   % Reconstruct grid cell adjacencies.
grid.b = gridbdr(p,c,grid.a);      % Reconstruct boundary information.
grid.s = ones(1,size(c,2));        % Set subdomain numbers to 1 for all grid cells.
% Plot grid.
plotgrid( grid )

最新更新