2016-01-15 12 views
7

Recentemente ho provato a tracciare una sfera usando PyPlot/Julia e sfortunatamente era più difficile di quanto pensassi. Probabilmente c'è qualcosa di sbagliato nella generazione di punti, ma non riesco a capire perché la mia implementazione non ha funzionato. Sebbene tutto vada bene con il codice Python originale.Sfera di trama con Julia e PyPlot

Ho cercato di adattarsi demo2 da matplotlib trama doc superficie come MWE:

using PyPlot 
u = linspace(0,2*π,100); 
v = linspace(0,π,100); 

x = cos(u).*sin(v); 
y = sin(u).*sin(v); 
z = cos(v); 

surf(x,y,z) 

e sto ottenendo this invece di the right one.

Allora, che cosa è esattamente sbagliato nella mia implementazione Julia?

+1

Sei sicuro che non è il vostro errore di battitura non definire 'y'? – nicoguaro

+0

Grazie, mio ​​errore. Certo che è un errore di battitura. Altrimenti fallisce con un errore. – gudvinr

risposta

7

x, e devono essere matrici, non vettori, altrimenti si ha solo una curva disegnata sulla sfera, anziché la superficie stessa.

using PyPlot 
n = 100 
u = linspace(0,2*π,n); 
v = linspace(0,π,n); 

x = cos(u) * sin(v)'; 
y = sin(u) * sin(v)'; 
z = ones(n) * cos(v)'; 

# The rstride and cstride arguments default to 10 
surf(x,y,z, rstride=4, cstride=4) 

La curva inizialmente disegnata corrisponde alla diagonale di quelle matrici.

plot(diag(x), diag(y), diag(z), color="yellow", linewidth=3) 

Sphere+curve

+0

Il primo diagramma sopra non è una curva disegnata sulla sfera: ha componenti cilindrici dritti non sferici. – javadba

+0

@javadba È possibile verificare che siano effettivamente sulla sfera calcolando la distanza (quadrata) dall'origine, 'x.^2 + y.^2 + z.^2': è 1 per tutti i punti. Ciò che può essere fonte di confusione è il modo in cui Matplotlib tenta di disegnare questa curva come una superficie, usando segmenti che collegano ciascun punto al primo. –

+0

thx per mostrare quel tracciato lungo gli assi diagonali. – javadba