我有一个快速绘制简单3D模型的问题,我从.dxf文件中读取。孔对象由点和它们之间的线定义。
我有一个带坐标的矩阵。每一行都是一个唯一的点,每一列都是一个坐标。
然后我有一个大小为Nx2
的索引矩阵,其中N
是模型中的行数,每行有2个点从坐标矩阵索引,应该由一个连接起来线。
因此数据的结构与三角测量后的数据结构非常相似,我需要一个类似trimesh
或trisurf
的函数,但不是三角形,而是行。
我可以通过让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
我想找到一种更好更快的方法来制作这个数字
答案 0 :(得分:1)
我认为代码是不言自明的(它假设已经定义了NODES
和LINES
):
%'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{:});