我正在 MATLAB 中实现 Crust 算法,但在绘制结果图时遇到问题。
我有一个数组点在三维空间中的点数组(1000x3)。
-
我有一个矩阵 M (100x4)。每行是一个包含 4 个 pointsArray 索引的向量,构成一个四面体。现在我想用某种有效的方式画出所有这些四面体。
目前我正在使用"for"循环和补丁(FV)方法,但对于几千个四面体来说,它正在杀死我的CPU。
-
我有一个矩阵 N (100x3)。每一行是一个包含 3 个 pointsArray 索引的向量,在三维空间中形成一个三角形。我也想画这些三角形。
任何想法,如何以某种有效的方式绘制这些数字?
编辑:问题已解决。我用trisurf代替补丁。
关于第二个问题(三角化曲面),我使用以下代码:
%% Wire plot
% The idea is to plot all triangles as one line. But to make part of the
% line connecting two triangles invisible, add NaN after each 3 points of
% triangle.
NTri = size(N,1);
X = reshape(pointsArray(N.',1), 3, NTri); X = reshape([X; nan(1,NTri)], 4*NTri, 1);
Y = reshape(pointsArray(N.',2), 3, NTri); Y = reshape([Y; nan(1,NTri)], 4*NTri, 1);
Z = reshape(pointsArray(N.',3), 3, NTri); Z = reshape([Z; nan(1,NTri)], 4*NTri, 1);
figure;
plot3(X,Y,Z,'-k.');
axis equal
%% Surface plot
% patch also can plot all triangles at once. I use the following code to
% plot triangulated objects consisting of more than 300000 triangles and it
% is very fast.
px = [pointsArray(N(:,1),1) pointsArray(N(:,2),1) pointsArray(N(:,3),1)].';
py = [pointsArray(N(:,1),2) pointsArray(N(:,2),2) pointsArray(N(:,3),2)].';
pz = [pointsArray(N(:,1),3) pointsArray(N(:,2),3) pointsArray(N(:,3),3)].';
figure
patch(px,py,pz, 'g');
axis equal
希望对某人有帮助。
//奥雷格
尝试将数字render
属性更改为opengl
set(gcf,'Render','OpenGL');
但是,它仅适用于 3D 中的三角形。四面体可以表示为 2 个三角形。