Matlab: Grafico con Gradiente Colore radiale

Messaggioda NotteTempo » 31/12/2010, 13:17

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: Seleziona tutto
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
Anche x Oggi Non Si Vola...
NotteTempo
Starting Member
Starting Member
 
Messaggio: 26 di 28
Iscritto il: 13/08/2007, 17:54

Messaggioda lukul » 02/01/2011, 10:01

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...
Avatar utente
lukul
Starting Member
Starting Member
 
Messaggio: 30 di 44
Iscritto il: 04/12/2010, 18:18

Messaggioda NotteTempo » 02/01/2011, 13:42

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: Seleziona tutto
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
Anche x Oggi Non Si Vola...
NotteTempo
Starting Member
Starting Member
 
Messaggio: 27 di 28
Iscritto il: 13/08/2007, 17:54

Messaggioda lukul » 02/01/2011, 17:35

Complimenti... si vede che il Matlab lo usi benone, altro che rapporto occasionale come dici!!! :lol:
Avatar utente
lukul
Starting Member
Starting Member
 
Messaggio: 34 di 44
Iscritto il: 04/12/2010, 18:18

Messaggioda NotteTempo » 03/01/2011, 00:46

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
Anche x Oggi Non Si Vola...
NotteTempo
Starting Member
Starting Member
 
Messaggio: 28 di 28
Iscritto il: 13/08/2007, 17:54


Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti