2012-11-25 9 views
5

Ho un'equazione di una rettaAggiunta di un aereo per uno scatterplot3d

y = sqrt (c + x^2)

e voglio aggiungere un aereo per una dispersione 3d, tale che il mio aereo è perpendicolare al piano xy e la linea sopra indicata è la linea di intersezione dei due piani.

Come posso fare? Non capisco perfettamente come funziona plane3d. Ho letto http://svitsrv25.epfl.ch/R-doc/library/scatterplot3d/html/scatterplot3d.html

Ma ancora non capisco.

+0

correlati, ma non un duplicato: http://stackoverflow.com/q/6774777/636656 –

risposta

4

Questo potrebbe essere quello che stai cercando:

library(scatterplot3d) 
# y=sqrt(a+x^2) with x in (-0.5,0.5), z in (0,1) and a=0 
a <- 0 
x <- rep(seq(-0.5, 0.5, length = 200), each = 200) 
y <- sqrt(a + x^2) 
z <- rep(seq(0, 1, length = 200), 200) 
scatterplot3d(x, y, z, highlight.3d = TRUE, pch = 20) 

enter image description here

Edit: che sarebbe utile per vedere come hai fatto si aggiungono questi altri punti, ma prendiamo il secondo esempio da ?scatterplot3d

temp <- seq(-pi, 0, length = 50) 
    x2 <- c(rep(1, 50) %*% t(cos(temp))) 
    y2 <- c(cos(temp) %*% t(sin(temp))) 
    z2 <- c(sin(temp) %*% t(sin(temp))) 

Ora combinando x ingegno h x2 e fare lo stesso con gli altri otteniamo:

scatterplot3d(c(x,x2), c(y,y2), c(z,z2), highlight.3d = TRUE, pch = 20) 

enter image description here

+0

Come potrei aggiungere che cosa a un grafico a dispersione già esistente, con punti su di esso? – user1760348

+0

@ user1760348, risponde la domanda ora? – Julius

1

Oltre alla risposta precedente, una volta che si costruisce un grafico a dispersione 3-D, è possibile aggiungere un aereo ad essa con la creazione di un modello e analizzandolo utilizzando una funzione annidata nel contenitore scatterplot3d(). Dovrebbe essere qualcosa di simile:

plot3d <- scatterplot3d(x, y, z, ...) 
model <- lm(y ~ sqrt(c + x^2) + z) 
plot3d$plane3d(model) 

E 'una sintassi molto strano avere una funzione all'interno di un contenitore simile, ma funziona, dandovi qualcosa di simile (il piano tratteggiata-line è visibile vicino al centro di il cubo):

3-D scatterplot with plane through the center

Se si vuole creare uno o più piani manualmente, vorrei utilizzare il metodo di Uwe che ho ri-postato here:

spd <- scatterplot3d(1:10, 1:10, 1:10) 

# xy 
spd$plane3d(0.3549896,0,0,lty="dotted") 

# yz 
x0 <- 5 
xyz1 <- spd$xyz.convert(rep(x0, 6), rep(0, 6), seq(0, 10, by=2)) 
xyz2 <- spd$xyz.convert(rep(x0, 6), rep(10, 6), seq(0, 10, by=2)) 
segments(xyz1$x, xyz1$y, xyz2$x, xyz2$y, lty="dotted") 

xyz1 <- spd$xyz.convert(rep(x0, 6), seq(0, 10, by=2), rep(0, 6)) 
xyz2 <- spd$xyz.convert(rep(x0, 6), seq(0, 10, by=2), rep(10, 6)) 
segments(xyz1$x, xyz1$y, xyz2$x, xyz2$y, lty="dotted") 

# zx 
y0 <- 6 
xyz1 <- spd$xyz.convert(rep(0, 6), rep(y0, 6), seq(0, 10, by=2)) 
xyz2 <- spd$xyz.convert(rep(10, 6), rep(y0, 6), seq(0, 10, by=2)) 
segments(xyz1$x, xyz1$y, xyz2$x, xyz2$y, lty="dotted") 

xyz1 <- spd$xyz.convert(seq(0, 10, by=2), rep(y0, 6), rep(0, 6)) 
xyz2 <- spd$xyz.convert(seq(0, 10, by=2), rep(y0, 6), rep(10, 6)) 
segments(xyz1$x, xyz1$y, xyz2$x, xyz2$y, lty="dotted") 

Questo produce gli aerei attraverso la specificazione manuale:

enter image description here

Problemi correlati