Matlab: Grafico con Gradiente Colore radiale
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:
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
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:
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

Risposte
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...
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...
"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...
Sei stato gentilissimo, grazie a te ho risolto con il 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
Complimenti... si vede che il Matlab lo usi benone, altro che rapporto occasionale come dici!!!

"lukul":
Complimenti... si vede che il Matlab lo usi benone, altro che rapporto occasionale come dici!!!
Avendo la pressa della tesi da consegnare, uno impara anche il sanscrito

Saluti
NotteTempo