如何在Matlab

时间:2015-08-25 12:29:23

标签: matlab plot 3d

我有一个快速绘制简单3D模型的问题,我从.dxf文件中读取。孔对象由点和它们之间的线定义。

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

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

因此数据的结构与三角测量后的数据结构非常相似,我需要一个类似trimeshtrisurf的函数,但不是三角形,而是行。

我可以通过让for循环遍历索引矩阵并分别绘制每一行来实现这一点,但与trimesh等内置函数相比,它非常慢。

简要示例:

%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

我想找到一种更好更快的方法来制作这个数字

1 个答案:

答案 0 :(得分:1)

我认为代码是不言自明的(它假设已经定义了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{:});