我認爲你可以做這樣的事情(注意 - 腦編譯代碼...)
figure;
patch('faces', edges, 'vertices', points, 'edgecolor', 'b');
axis equal;
凡edges
應該是Nx2
索引矩陣,並且points
應該是Mx3
座標矩陣(您的points
陣列的轉置矩陣)。
根據我的經驗,直接撥打patch
可以顯着快於重複撥打plot
。
給一些想法,時代產生1000個隨機生成的線段,用我的是MATLAB 7.1如下(當然老了!):
- 調用
patch
:0.03秒。
- 調用
plot
:0.5秒。
編輯:只要你想(指定每邊一個單一的顏色),以獲得邊緣顏色運行得一種方式是引入重複頂點如下:
這工作,圍繞這一問題的邊緣顏色只能通過頂點顏色數據間接指定。如果我們只依賴頂點顏色,那麼共享一個公共頂點的所有邊可能會以分配給該頂點的顏色結束 - 請查看'平坦'邊顏色描述here。
%% a "star" shape, so that we can really see what's going on
%% with the edge colours!!
pp = [0,0,0; 1,-1,0; 1,1,0; -1,1,0; -1,-1,0];
ee = [1,2; 1,3; 1,4; 1,5];
%% important - only 1 colour known per edge, not per vertex!!
cc = (1:size(ee,1))';
%% setup a new set of vertices/edges/colours with duplicate vertices
%% so that each edge gets it's correct colour
nnum = 0;
pnew = zeros(2 * size(ee, 1), 3); %% new vertices
enew = zeros(1 * size(ee, 1), 2); %% new edge indices
cnew = zeros(2 * size(ee, 1), 1); %% new edge colours - via vertices
for j = 1 : size(ee, 1)
n1 = ee(j, 1); %% old edge indices
n2 = ee(j, 2);
enew(j, 1) = nnum + 1; %% new edge indicies into pnew
enew(j, 2) = nnum + 2;
pnew(nnum + 1, :) = pp(n1, :); %% create duplicate vertices
pnew(nnum + 2, :) = pp(n2, :);
cnew(nnum + 1) = cc(j); %% map single edge colour onto both vertices
cnew(nnum + 2) = cc(j);
nnum = nnum + 2;
end
%% Draw the set efficiently via patch
tic
figure;
hold on;
patch('faces', enew, 'vertices', pnew, 'facevertexcdata', cnew, ...
'edgecolor', 'flat', 'facecolor', 'none');
plot(pnew(:,1), pnew(:,2), 'b.');
axis equal;
toc
如果MATLAB允許你直接指定邊的顏色數據還要好 - 但它似乎並不支持......
希望這有助於。
謝謝!您是否有機會向我展示如何發送一組顏色,以便每個邊緣都可以用不同的顏色着色? – olamundo
@noam:根據您的需要,有幾種不同的着色選項。您可以使用'facevertexcdata''參數來設置頂點的內插顏色 - 輸入'edit trimesh'來獲得這些線條的想法。如果你只是想要一些平的顏色(''b','k','r'等'),我想你可以把邊緣分成幾個不同的組,併爲每個組選擇一種顏色 - 我假設在這裏,你有更多的邊緣比顏色。可能還有其他的選擇 - 檢查文檔... –
我實際上需要用不同的顏色爲每個邊緣着色,用很多顏色(比如說我顯示施加在某些結構的所有支撐樑上的應力)。所以我需要指定顏色的邊緣,而不是頂點,我不能把邊緣分成幾個不同的組,因爲顏色很多...... – olamundo