Pagina 1 di 1

Matlab: Grafico con Gradiente Colore radiale

MessaggioInviato: 31/12/2010, 13:17
da NotteTempo
Salve a tutti

Premetto, prima di fraintendimenti, che il mio rapporto con matlab è per lo più occasionale, lo sto sfruttando unicamente per fare 2/3 grafici

Ho il seguente problema, devo creare dei grafici in coordinate sferiche, dopo un po' di tentativi sono arrivato al seguente codice:

Codice:
f = '(0.1+1.5*(sin(theta))^2)*sin(theta)*cos(phi)'
g = '(0.1+1.5*(sin(theta))^2)*sin(theta)*sin(phi)'
h = '(0.1+1.5*(sin(theta))^2)*cos(theta)'
F = vectorize(f)
G = vectorize(g)
H = vectorize(h)       
r = pi*(0:1:24)/24;   
s = pi*(0:1:48)/24;       
[theta,phi] = meshgrid(r,s);     
X = eval(F);
Y = eval(G);
Z = eval(H);       
surf(X,Y,Z)


Con il risultato che vedete in figura.. il risultato graficamente parlando è molto soddisfacente, il problema è il gradiente di colore, che varia in z, e giocando con le proprietà delle immagini non c'è verso di associarlo a rho.

Immagino che ovviamente sia un problema legato al codice, o meglio, ci sia qualche opzione da dare a surf o un comando più appropriato da usare.

Ho provato a dare un occhio al pacchetto sphere3d ma non ne ho ricavato molto...


Vi ringrazio in anticipo

NotteTempo


Immagine

MessaggioInviato: 02/01/2011, 10:01
da lukul
Ciao, dovresti adoperare una sintassi del tipo "surf(X,Y,Z,C)".
per maggiori delucidazioni ti rimando a: http://www.mathworks.com/help/techdoc/ref/surf.html

Adoperando il comando "surf(X,Y,Z)", il Matlab ti colorerà i dati in base alla matrice Z che specifica la quota
cui si trova il punto $ x in X $ e $ y in Y $. Così facendo viene visualizzatoil grafico che hai riportato.

Buona prova...

MessaggioInviato: 02/01/2011, 13:42
da NotteTempo
lukul ha scritto:Ciao, dovresti adoperare una sintassi del tipo "surf(X,Y,Z,C)".
per maggiori delucidazioni ti rimando a: http://www.mathworks.com/help/techdoc/ref/surf.html

Adoperando il comando "surf(X,Y,Z)", il Matlab ti colorerà i dati in base alla matrice Z che specifica la quota
cui si trova il punto $ x in X $ e $ y in Y $. Così facendo viene visualizzatoil grafico che hai riportato.

Buona prova...



Sei stato gentilissimo, grazie a te ho risolto con il codice:

Codice:
f = '(0.1+1.5*(sin(theta))^2)*sin(theta)*cos(phi)'
g = '(0.1+1.5*(sin(theta))^2)*sin(theta)*sin(phi)'
h = '(0.1+1.5*(sin(theta))^2)*cos(theta)'
F = vectorize(f)
G = vectorize(g)
H = vectorize(h)       
r = pi*(0:1:24)/24;   
s = pi*(0:1:48)/24;       
[theta,phi] = meshgrid(r,s);     
X = eval(F);
Y = eval(G);
Z = eval(H);
R= sqrt( power(X,2)+power(Y,2)+power(Z,2) );
surf(X,Y,Z,R);


Grazie mille ;)


Saluti

NotteTempo

MessaggioInviato: 02/01/2011, 17:35
da lukul
Complimenti... si vede che il Matlab lo usi benone, altro che rapporto occasionale come dici!!! :lol:

MessaggioInviato: 03/01/2011, 00:46
da NotteTempo
lukul ha scritto:Complimenti... si vede che il Matlab lo usi benone, altro che rapporto occasionale come dici!!! :lol:



Avendo la pressa della tesi da consegnare, uno impara anche il sanscrito ;)


Saluti

NotteTempo