2015-08-25 64 views
0

我從快速繪製一個簡單的3D模型(從.dxf文件讀取)時遇到了問題。孔對象由點和它們之間的線來定義。如何在Matlab中繪製線段中的3D對象

我有一個座標矩陣。每一行都是一個獨特的點,每一列都是一個座標。

然後,我有一個尺寸爲Nx2的索引矩陣,其中N是模型中的行數,每行都有2個從座標矩陣索引的點,它們應該由一條直線連接。

所以數據的結構與三角測量後的數據非常相似,我需要一個類似於trimeshtrisurf的函數,雖然不是用於三角形,而是用於線。

我可以這樣做,讓for循環遍歷整個索引矩陣並分別繪製每行,但與內置函數如trimesh相比,它非常慢。

簡單的例子:

%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 

我想找到一個更好更快的方式來產生這個數字

+1

請添加[mcve],以便我們可以查看問題並嘗試修復它。 – Adriaan

+0

我添加一個簡單的例子 – nithiel

回答

1

我認爲的代碼是不言自明的(它假定NODESLINES已定義) :

%'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{:}); 
+0

謝謝,這就是我需要的 – nithiel

+0

@nithiel如果你發現答案是正確的,我會請你標記它, –