मुझे समझ में आता है कि यह देर से उत्तर है, लेकिन यह अभी भी वैध है अगर कोई और भी वही काम कर रहा है।
मान लिया जाये कि आप क्यूब्स (/ उनके किनारों), जवाब पहले ही उपलब्ध करा लिए एक विकल्प के ओलिवर से 'plotcube' कोड का उपयोग करने के लिए है योजना बना रहे हैं: plotcube
इस समाधान का लाभ आप कर सकते हैं वह यह है कि:
- बदलें चेहरे (FaceAlpha) की पारदर्शिता, और/या,
- बदलें किनारों (EdgeAlpha) की पारदर्शिता, और/या,
- बदलें रेखाओं का रंग (एज रंग)।
ये सभी स्थिरांक या चर हो सकते हैं। (उदा। फिक्स्ड एज रंग, या जेड-वैल्यू इत्यादि के साथ बदलते रंग)
2. और 3. (ऊपर) की कार्यक्षमता में जोड़ने के लिए 'सेलफन (@ पैच ...अधिक जानकारी के लिए
cellfun(@patch,XYZ{1},XYZ{2},XYZ{3},...
repmat({clr},6,1),...
repmat({'FaceAlpha'},6,1),...
repmat({alpha},6,1),...
repmat({'EdgeAlpha'},6,1),...
repmat({0.2},6,1),... % Set this value to whatever you want; even a variable/matrix
repmat({'EdgeColor'},6,1),...
repmat({'black'},6,1)...
);
:;: 'Olivers कोड में अनुभाग, इस प्रकार कोड के चार अतिरिक्त लाइनों में जोड़ने (नई सहित इस के साथ पूरे cellfun
वर्ग को प्रतिस्थापित' EdgeAlpha 'और' EdgeColor 'लाइनों) 'पैच' कृपया patch दस्तावेज देखें।
एक महत्वपूर्ण नोट: - बड़े मॉडल (कई क्यूब्स) के लिए यह बहुत धीमा है। उदा। हजारों ब्लॉक पर MATLAB में 'for' लूप में 'plotcube' फ़ंक्शन चला रहा है। मेरा मानना है कि यह 'पैच' फ़ंक्शन को कई बार कॉल करने से है। वेक्टरिस के लिए एक बेहतर समाधान होगा; अपने सभी बिंदुओं (शीर्षकों/चेहरे/जो भी) को एक ही मैट्रिक्स में पहले एक साथ रखने के लिए और फिर केवल एक बार @ पैच फ़ंक्शन को कॉल करें ('लूप के लिए' नहीं)। इसके लिए सभी XYZ डेटा को अद्यतन करने के लिए किसी भी तरह कोड को बदलने की आवश्यकता होगी।
मुझे उम्मीद है कि किसी की मदद करेगा।
function plotcube(varargin)
% PLOTCUBE - Display a 3D-cube in the current axes
%
% PLOTCUBE(EDGES,ORIGIN,ALPHA,COLOR) displays a 3D-cube in the current axes
% with the following properties:
% * EDGES : 3-elements vector that defines the length of cube edges
% * ORIGIN: 3-elements vector that defines the start point of the cube
% * ALPHA : scalar that defines the transparency of the cube faces (from 0
% to 1)
% * COLOR : 3-elements vector that defines the faces color of the cube
%
% Example:
% >> plotcube([5 5 5],[ 2 2 2],.8,[1 0 0]);
% >> plotcube([5 5 5],[10 10 10],.8,[0 1 0]);
% >> plotcube([5 5 5],[20 20 20],.8,[0 0 1]);
% Default input arguments
inArgs = { ...
[10 56 100] , ... % Default edge sizes (x,y and z)
[10 10 10] , ... % Default coordinates of the origin point of the cube
.7 , ... % Default alpha value for the cube's faces
[1 0 0] ... % Default Color for the cube
};
% Replace default input arguments by input values
inArgs(1:nargin) = varargin;
% Create all variables
[edges,origin,alpha,clr] = deal(inArgs{:});
XYZ = { ...
[0 0 0 0] [0 0 1 1] [0 1 1 0] ; ...
[1 1 1 1] [0 0 1 1] [0 1 1 0] ; ...
[0 1 1 0] [0 0 0 0] [0 0 1 1] ; ...
[0 1 1 0] [1 1 1 1] [0 0 1 1] ; ...
[0 1 1 0] [0 0 1 1] [0 0 0 0] ; ...
[0 1 1 0] [0 0 1 1] [1 1 1 1] ...
};
XYZ = mat2cell(...
cellfun(@(x,y,z) x*y+z , ...
XYZ , ...
repmat(mat2cell(edges,1,[1 1 1]),6,1) , ...
repmat(mat2cell(origin,1,[1 1 1]),6,1) , ...
'UniformOutput',false), ...
6,[1 1 1]);
cellfun(@patch,XYZ{1},XYZ{2},XYZ{3},...
repmat({clr},6,1),...
repmat({'FaceAlpha'},6,1),...
repmat({alpha},6,1)...
);
view(3);
एक बहुत ही अजीब परिप्रेक्ष्य है:
यहाँ मामले में 'plotcube' कोड ओलिवर द्वारा मूल कोड के लिए लिंक किसी दिन टूट जाता है। वो क्या है? परिप्रेक्ष्य? सममितीय? कुछ और? – Rook