2016-01-15 12 views
7

Ostatnio próbowałem wykreślić kulę za pomocą PyPlot/Julia i niestety było to trudniejsze, niż myślałem. Prawdopodobnie jest coś nie tak z generowaniem punktów, ale nie mogę zrozumieć, dlaczego moja implementacja nie zadziałała. Chociaż wszystko jest w porządku z oryginalnym kodem Pythona.Kula działki z Julią i PyPlot

Starałem się dostosować demo2 z matplotlib powierzchni działki doc jak 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) 

A ja dostaję this zamiast the right one.

Tak, to jest dokładnie to źle w moim realizacji Julia?

+1

Czy jesteś pewien, że nie jest twoim typo nie definiując 'y'? – nicoguaro

+0

Dzięki, mój błąd. Oczywiście, że to typo. W przeciwnym razie błąd kończy się niepowodzeniem. – gudvinr

Odpowiedz

7

x, y i z powinny być macierzami, nie wektorami - w przeciwnym razie na powierzchni sfery zamiast samej powierzchni rysuje się tylko krzywa.

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) 

Narysowana początkowo krzywa odpowiada przekątnej tych macierzy.

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

Sphere+curve

+0

Pierwszy diagram powyżej NIE jest krzywą narysowaną na kuli - ma proste cylindryczne niesferyczne komponenty. – javadba

+0

@javadba Możesz sprawdzić, czy rzeczywiście są na kuli, obliczając odległość (do kwadratu) do początku, 'x.^2 + y.^2 + z.^2': to 1 dla wszystkich punktów. To, co może być mylące, to sposób, w jaki Matplotlib próbuje narysować tę krzywą jako powierzchnię, używając segmentów łączących każdy punkt z pierwszym. –

+0

thx za pokazanie tego wykresu wzdłuż osi ukośnych. – javadba