如何从 Matlab 中的线段绘制 3D 对象

How to plot a 3D object from line segments in Matlab

我在快速绘制从 .dxf 文件读取的简单 3D 模型时遇到问题。孔对象由点和它们之间的线定义。

我有一个带坐标的矩阵。每一行都是一个唯一的点,每一列都是一个坐标。

然后我有一个大小为 Nx2 的索引矩阵,其中 N 是模型中的行数,每一行都有 2 个从坐标矩阵索引的点应该被连接一行。

所以数据的结构与三角剖分后的数据非常相似,我需要一个类似于trimeshtrisurf的函数,虽然不是针对三角形,而是针对直线。

我可以通过让 for 循环遍历索引矩阵并分别绘制每一行来做到这一点,但是与 trimesh.[=17 等内置函数相比,它非常慢=]

简要示例:

%Coordinate matrix
NODES=[
  -12.76747  -13.63075   -6.41142
  -12.76747   -8.63075   -6.41142
  -8.76747  -13.63075   -6.41142
  -16.76747  -13.63075   -6.41142
  -11.76747  -7.63075   -2.41142
];

%index matrix
LINES=[
  1 2
  3 4
  1 4
  3 5
  1 5
];

%The slow way of creating the figure
figure(1)
    hold on

    for k=1:length(LINES)
      plot3(NODES(LINES(k,:), 1), NODES(LINES(k,:), 2), NODES(LINES(k,:), 3), '.-')

    end
    view(20, 20)
    hold off

我想找到更好更快的方法来制作这个图

我认为代码是不言自明的(假设 NODESLINES 已经定义):

%'Calculated: edge coordinates and line specs'
TI = transpose(LINES);
DI = 2*ones(1,size(TI,2));
X  = mat2cell(NODES(TI,1), DI);
Y  = mat2cell(NODES(TI,2), DI);
Z  = mat2cell(NODES(TI,3), DI);
L  = repmat({'.-'}, size(X));

%'Output: plot'
ARGS = transpose([X,Y,Z,L]);
plot3(ARGS{:});