2017-09-06 3 views
1

Betrachten wir eine 1x3-Zelle A:Wie wird jede Matrix in einer Zelle mit einer anderen Farbe in einem 3D-Diagramm dargestellt?

A = { [A1] [A2] [A3] } 
A = {[1 2 3; 4 5 6; 7 8 9] [6 5 4; 9 8 7] [1 1 1]} 

, wo die Struktur von Ai so ist, dass:

A1 = [ 1 2 3 %coordinate (x,y,z) of point 1 
     4 5 6 %coordinate (x,y,z) of point 2 
     7 8 9 ] %coordinate (x,y,z) of point 3 

A2 = [ 6 5 4 %coordinate (x,y,z) of point 4 
     9 8 7 ] %coordinate (x,y,z) of point 5 

A3 = [ 1 1 1 ] %coordinate (x,y,z) of point 6 

Wie alle diese Punkte so planen, dass wir eine Farbe für alle Punkte von A1 verwenden, eine andere Farbe für alle Punkte von A2 und eine andere Farbe für alle Punkte von A3?

Im Allgemeinen, wenn wir eine 1 × n-Zelle das heißt A = { [A1] [A2] [A3] ... [An] } haben, wie kann dies geschehen?

Antwort

1

Verketten Sie alle Matrizen innerhalb des Zellenarrays Avertically. Verwenden Sie jet oder any other colormap, um verschiedene Farben für verschiedene Matrizen zu erzeugen. Bestimmen Sie die Anzahl der Punkte in jeder Matrix innerhalb von A, um zu bestimmen, wie oft jede Farbe wiederholt wird. Erstellen Sie entsprechend die Anzahl der Kopien jeder Farbe und verwenden Sie anschließend scatter3, um diese Punkte zu zeichnen.

newA = vertcat(A{:});     %Concatenating all matrices inside A vertically 

colours = jet(numel(A));     %Generating colours to be used 
colourtimes = cellfun(@(x) size(x,1),A); %Determining num of times each colour wil be used 
colourind = zeros(size(newA,1),1);  %Zero matrix with length equals num of points 
colourind([1 cumsum(colourtimes(1:end-1))+1]) = 1; 
colourind = cumsum(colourind);   %Linear indices of colours for newA 

scatter3(newA(:,1), newA(:,2), newA(:,3),[], colours(colourind,:),'filled'); 

Für die A, der obige Code gegeben erzeugt dieses Ergebnis:

output

Verwandte Themen