2012-11-21 10 views
9

Sto scrivendo un algoritmo di regressione che tenta di "catturare" i punti all'interno delle caselle. L'algoritmo cerca di mantenere le caselle il più piccole possibile, quindi di solito i bordi/angoli delle caselle attraversano i punti, il che determina la dimensione della scatola.Tracciamento di linee tra due punti in 3D

Problema: ho bisogno dell'output grafico delle caselle in R. In 2D è facile disegnare scatole con segments(), che disegna una linea tra due punti. Così, con 4 segmenti posso disegnare una casella:

plot(x,y,type="p") 
segments(x1,y1,x2,y2) 

Allora ho provato sia il pacchetto scatterplot3d e plot3d per la stampa 3D. In 3D il comando segments() non funziona, in quanto non è presente alcun componente z aggiuntivo. Mi è sembrato che non ci sia un sostituto adeguato in 3D per segments()

C'è un modo semplice per disegnare scatole/linee tra due punti quando si traccia in tre dimensioni?

+0

sei sicuro che hai usato il pacchetto 'plot3d'? Non è su CRAN: intendi la funzione 'plot3d' nel pacchetto' rgl'? –

risposta

12

La funzione scatterplot3d restituisce le informazioni che vi permetterà di proiettare i punti (x, y, z) nel piano in questione, come segue:

library(scatterplot3d) 
x <- c(1,4,3,6,2,5) 
y <- c(2,2,4,3,5,9) 
z <- c(1,3,5,9,2,2) 
s <- scatterplot3d(x,y,z) 

## now draw a line between points 2 and 3 
p2 <- s$xyz.convert(x[2],y[2],z[2]) 
p3 <- s$xyz.convert(x[3],y[3],z[3]) 
segments(p2$x,p2$y,p3$x,p3$y,lwd=2,col=2) 

Il pacchetto rgl è un altro modo di andare, e forse anche più facile (si noti che segments3d prende punti a coppie da un vettore)

plot3d(x,y,z) 
segments3d(x[2:3],y[2:3],z[2:3],col=2,lwd=2)