मुझे लगता है कि आप इस तरह से कुछ कर सकते हैं पता है (सावधानी - मस्तिष्क संकलित कोड ...)
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' पैरामीटर का उपयोग कर सकते हैं - इन पंक्तियों के साथ एक विचार प्राप्त करने के लिए 'trimesh संपादित करें' टाइप करें। यदि आप बस कुछ फ्लैट रंग (''बी', 'के', 'आर', आदि 'चाहते थे) मुझे लगता है कि आप किनारों को कुछ अलग समूहों में तोड़ सकते हैं और प्रत्येक समूह के लिए एक रंग चुन सकते हैं - मुझे लगता है यहां आपके रंगों की तुलना में कई और किनार हैं। अन्य विकल्प हो सकते हैं - दस्तावेज़ीकरण की जांच करें ... –
मुझे वास्तव में कई रंगों में से प्रत्येक किनारे को एक अलग रंग के साथ रंगना होगा (कहें कि मैं कुछ संरचना के सभी समर्थन बीम पर लगाए गए तनाव को प्रदर्शित कर रहा हूं)। इसलिए मुझे किनारे से रंग निर्दिष्ट करना है, कशेरुक द्वारा नहीं, और मैं कई अलग-अलग समूहों में किनारों को तोड़ नहीं सकता क्योंकि बहुत सारे रंग हैं ... – olamundo