2012-11-21 9 views
9

Piszę algorytm regresji, który próbuje "przechwycić" punkty wewnątrz pól. Algorytm stara się, aby pudełka były jak najmniejsze, więc zazwyczaj krawędzie/rogi skrzynek przechodzą przez punkty, które określają rozmiar pudełka.Wykreślanie linii między dwoma punktami w 3D

Problem: Potrzebuję graficznego wydruku pól w R. W 2D łatwo jest narysować pola z segments(), które rysuje linię między dwoma punktami. Tak więc, z 4 segmentów mogę narysować pole:

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

Następnie próbowałem zarówno pakiecie scatterplot3d i plot3d dla 3D kreślenia. W 3D polecenie segments() nie działa, ponieważ nie ma dodatkowego składnika Z. Byłem zaskoczony, że widocznie (dla mnie) nie ma odpowiedniego zastąpienia w 3D dla segments()

Czy istnieje łatwy sposób rysowania pól/linii między dwoma punktami podczas drukowania w trzech wymiarach?

+0

są na pewno wykorzystał 'pakiet plot3d'? Nie ma go w CRAN: masz na myśli funkcję 'plot3d' w pakiecie' rgl'? –

Odpowiedz

12

Funkcja scatterplot3d zwraca informacje, które pozwolą Ci do projektu (x, y, z) punktów w odpowiedniej płaszczyźnie, w następujący sposób:

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) 

Pakiet rgl inna droga, a może nawet łatwiej (zauważ, że segments3d trwa punkty w parach z wektorem)

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