如何从 Matlab 中的线段绘制 3D 对象
How to plot a 3D object from line segments in Matlab
我在快速绘制从 .dxf 文件读取的简单 3D 模型时遇到问题。孔对象由点和它们之间的线定义。
我有一个带坐标的矩阵。每一行都是一个唯一的点,每一列都是一个坐标。
然后我有一个大小为 Nx2
的索引矩阵,其中 N
是模型中的行数,每一行都有 2 个从坐标矩阵索引的点应该被连接一行。
所以数据的结构与三角剖分后的数据非常相似,我需要一个类似于trimesh
或trisurf
的函数,虽然不是针对三角形,而是针对直线。
我可以通过让 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
我想找到更好更快的方法来制作这个图
我认为代码是不言自明的(假设 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{:});
我在快速绘制从 .dxf 文件读取的简单 3D 模型时遇到问题。孔对象由点和它们之间的线定义。
我有一个带坐标的矩阵。每一行都是一个唯一的点,每一列都是一个坐标。
然后我有一个大小为 Nx2
的索引矩阵,其中 N
是模型中的行数,每一行都有 2 个从坐标矩阵索引的点应该被连接一行。
所以数据的结构与三角剖分后的数据非常相似,我需要一个类似于trimesh
或trisurf
的函数,虽然不是针对三角形,而是针对直线。
我可以通过让 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
我想找到更好更快的方法来制作这个图
我认为代码是不言自明的(假设 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{:});