Aufgabe 2.6 – Farbwürfel

 

Schreiben Sie eine Funktion handle=cube(color), die einen dreidimensionalen Würfel mit farbigen Flächen erzeugt:

farbwurfel-3d-plot

Die Farben für die sechs Würfelflächen werden über den Parameter color spezifiziert. Dabei kann es sich entweder um einen einzelnen Farbstring für den gesamten Würfel oder um ein Cell-Array mit sechs Farbstrings für die einzelnen Würfelflächen handeln, z.B.:

cube(‘y’)
cube({‘r’,'r’,'g’,'g’,'b’,'b’})

Der optionale Parameter handle stellt einen 1×6 Vektor mit Handles auf die sechs Farbflächen zur Verfügung, der eine spätere Manipulation dieser Flächen erlaubt. Testen Sie diese Funktionalität, in dem Sie nach dem Aufruf der Funktion cube() Teilflächen ausblenden oder den Würfel transparent erscheinen lassen. Drehen Sie auch den Würfel mit Hilfe des Rotationswerkzeugs aus der Menüleiste ihrer Abbildung.

Lösung

function handle=cube(color)
	% handle=cube(color)
	%
	% generates 3D plot with unit cube
	%
	% color (opt) string or cell array of strings with color(s)
	% of cube patches. If less than six colors are
	% specified, colors are cyclically repeated
	% handle vector with handles to cube patches
	% set default colors

	if ~nargin
		color={'r','r','g','g','b','b'};
	end

	% be sure that color is a cell array
	if ~iscell(color)
		color={color};
	end

	% define coordinates of vertices for all six patches
	X=[0 1 1 0;0 1 1 0;0 0 0 0;1 1 1 1;0 1 1 0;0 1 1 0]';
	Y=[0 0 0 0;1 1 1 1;0 1 1 0;0 1 1 0;0 0 1 1;0 0 1 1]';
	Z=[0 0 1 1;0 0 1 1;0 0 1 1;0 0 1 1;0 0 0 0;1 1 1 1]';

	% plot cube
	figure(1)
	clf
	hold on
	h=[];
	for i=1:6 % loop across all patches
		h(i)=fill3(X(:,i),Y(:,i),Z(:,i),color{rem(i-1,length(color))+1});
	end
	hold off
	axis square
	axis off
	view(-40,30) % set new view point
	if nargout>0
		handle=h;
	end
end

Test:

h=cube;
set(h,'edgealpha',0) Kontour entfernen
set(h(1),'visible','off') eine Seite entfernen
set(h,'facealpha',0.2) transparenter Würfel