Matlab绘制四面体和三角形

时间:2012-06-18 22:55:16

标签: matlab graphics 3d rendering matlab-figure

我在MATLAB中实现Crust算法并且绘制结果图有问题。

我在三维空间中有一个数组pointsArray(1000x3)点。

  1. 我有一个矩阵M(100x4)。每行是一个包含4个pointsArray索引的向量,形成一个四面体。现在我想以一种有效的方式绘制所有这些四面体。

    目前我正在使用“for”循环和补丁(FV)方法,但是对于数千个四面体而言,它正在杀死我的CPU。

  2. 我有一个矩阵N(100x3)。每行是一个包含3个pointsArray索引的向量,在三维空间中形成一个三角形。我也想绘制这些三角形。

  3. 任何想法,如何以有效的方式绘制这些数字?

    编辑:问题解决了。我使用了trisurf而不是补丁。

2 个答案:

答案 0 :(得分:3)

关于第二个问题(三角曲面),我使用以下代码:

%% 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

希望对某人有所帮助。

// Oleg

答案 1 :(得分:0)

尝试将figure render property更改为opengl

   set(gcf,'Render','OpenGL');

但是它仅适用于3D中的三角形。四面体可以表示为2个三角形。