1

MATLAB でクラスト アルゴリズムを実装していますが、結果の図を描画するのに問題があります。

3 次元空間に点の配列 pointsArray (1000x3) があります。

  1. 私は行列 M (100x4) を持っています。各行は、四面体を構成する pointsArray の 4 つのインデックスを含むベクトルです。ここで、これらすべての四面体を効率的な方法で描画したいと考えています。

    現在、「for」ループと patch(FV) メソッドを使用していますが、数千の四面体の場合、CPU が死んでいます。

  2. 行列 N (100x3) があります。各行は、pointArray の 3 つのインデックスを含むベクトルであり、3 次元空間で三角形を作成します。私もこれらの三角形を描きたいです。

これらの数字を効率的な方法で描く方法はありますか?

編集:問題は解決しました。patch の代わりに trisurf を使用しました。

4

2 に答える 2

3

2番目の質問(三角形のサーフェス)に関しては、次のコードを使用します。

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

それが誰かに役立つことを願っています。

//オレグ

于 2012-11-01T17:37:20.500 に答える
0

図のrenderプロパティをに変更してみてくださいopengl

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

ただし、3Dの三角形に対してのみ機能します。四面体は2つの三角形として表すことができます。

于 2012-06-19T05:12:33.003 に答える