2012-06-18 247 views
1

我在MATLAB中實現了Crust算法,並遇到了繪製結果圖的問題。Matlab繪圖四面體和三角形

我在三維空間中有一個數組pointsArray(1000x3)點。

  1. 我有一個矩陣M(100x4)。每行是一個包含4個點數陣列的矢量,構成一個四面體。現在我想以一種有效的方式繪製所有這些四面體。

    目前我使用「for」循環和修補程序(FV)方法,但是對於數千個四面體來說,它會殺死我的CPU。

  2. 我有一個矩陣N(100x3)。每一行都是一個包含3個點陣的索引的矢量,在三維空間中形成一個三角形。我也想繪製這些三角形。

任何想法,如何以一些有效的方式繪製這些數字?

編輯:問題解決了。我用trisurf代替補丁。

回答

0

嘗試改變figure render propertyopengl

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

但是它只能在3D三角形。四面體可以表示爲2個三角形。

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 

希望這會有所幫助的人。

//奧列格