2015-12-31 26 views
11

Czy możesz mi pomóc zrobić fabułę podobną do tej w R?Punkty wydruku na kuli w R

enter image description here

chciałbym mieć to interaktywne, takie, że mogę obrócić kulę. Chyba powinienem użyć rgl. Znalazłem przykład podobny do tego, czego potrzebuję here, jednak nie mogłem znaleźć sposobu na narysowanie siatki zamiast wypełnionej sfery.

UPD: Powtarzalny zbiór danych, które mogłyby pomóc w odpowiedzi na pytanie (wziąłem go z here):

u <- runif(1000,0,1) 
v <- runif(1000,0,1) 
theta <- 2 * pi * u 
phi <- acos(2 * v - 1) 
x <- sin(theta) * cos(phi) 
y <- sin(theta) * sin(phi) 
z <- cos(theta) 
library("lattice") 
cloud(z ~ x + y) 

Odpowiedz

17

start z

library("rgl") 
spheres3d(0,0,0,lit=FALSE,color="white") 
spheres3d(0,0,0,radius=1.01,lit=FALSE,color="black",front="lines") 

stworzyć "szkieletowy" kulę (I "Trochę oszukuję tutaj, rysując dwie sfery, jedną nieco większą od drugiej ... może być lepszy sposób na zrobienie tego, ale nie mogłem łatwo/szybko to rozgryźć".

z Wolfram web page on sphere point picking (źródło obrazu) otrzymujemy

Podobnie możemy odebrać u = cos (phi) mają być rozmieszczone równomiernie (więc mamy du = sin phi dphi) i uzyskaniem punkty x = sqrt(1-u^2)*cos(theta); y = sqrt(1-u^2)*sin(theta); z=u z theta w [0,2pi] iu w [-1,1], które są równomiernie rozłożone na S^2.

Więc:

set.seed(101) 
n <- 50 
theta <- runif(n,0,2*pi) 
u <- runif(n,-1,1) 
x <- sqrt(1-u^2)*cos(theta) 
y <- sqrt(1-u^2)*sin(theta) 
z <- u 
spheres3d(x,y,z,col="red",radius=0.02) 

Sfery zająć trochę więcej wysiłku do renderowania, ale są ładniejsze niż wyniki points3d() (płaskie kwadraty) ...

enter image description here

+0

notatkę dla Użytkownicy Mavericks + Mac. Jeśli skompilujesz ze źródła bieżącej wersji: rgl_0.95.1435, możesz uzyskać lepsze wyniki niż przy wersji binarnej na CRAN. –

+0

Czy można uniknąć pokazywania tylnych punktów kuli? Aby nie było przezroczyste? – desa