2013-03-30 22 views
6

mam dane, które są parametryczne 3D krzywa:Jak narysować parametryczną krzywą 3d z wygładzaniem w R?

t  x  y  z 
0.000 3.734 2.518 -0.134  
0.507 2.604 9.059 0.919 
0.861 1.532 11.584 -0.248 
1.314 1.015 1.886 -0.325 
1.684 2.815 4.596 3.275 
1.938 1.359 8.015 2.873 
2.391 1.359 8.015 2.873 
.............................. 

znalazłem scatterplot3d i plot3d naprawdę cool. Ale potrzebuję gładkiej krzywej 3d.

Jak mogę wykreślić to w R?

+0

Czy masz parametryczną funkcję 't' które wygenerowało' wartości xyz'? Ale nawet jeśli nie, chcesz interpolować w 3d pomiędzy punktami, które już masz - i czy lepiej niż prosta liniowa interpolacja? – Spacedman

+1

'scatterplot3d' ma argument" typ ", który można ustawić na' "l" ', aby połączyć punkty i utworzyć krzywą. –

+0

@Spacedman Tak, chcę czegoś lepszego niż prosta liniowa interpolacja. – midas

Odpowiedz

10

Możesz użyć spline, aby interpolować punkty i wygładzić krzywą.

d <- read.delim(textConnection(
"t x y z 
0.000 3.734 2.518 -0.134 
0.507 2.604 9.059 0.919 
0.861 1.532 11.584 -0.248 
1.314 1.015 1.886 -0.325 
1.684 2.815 4.596 3.275 
1.938 1.359 8.015 2.873 
2.391 1.359 8.015 2.873" 
), sep=" ") 
ts <- seq(from = min(d$t), max(d$t), length=100) 
d2 <- apply(d[,-1], 2, function(u) spline(d$t, u, xout = ts)$y) 
library(scatterplot3d) 
p <- scatterplot3d(d2, type="l", lwd=3) 
p$points3d(d[,-1], type="h") 

Smoothed curve

Zgodnie użytkownika @ Spacedman komentarza, można też użyć rgl: ten pozwala interaktywnie obracać scenę.

library(rgl) 
plot3d(d2, type="l", lwd=5, col="navy") 
points3d(d[,-1]) 
spheres3d(d[,-1], radius=.1, col="orange") 
segments3d(matrix(t(cbind(d[,-1], d[,2:3], 0)), nc=3, byrow=TRUE)) 
planes3d(0,0,1,0, col="yellow", alpha=.5)  # Plane z=0 

enter image description here

+0

Bravo! Dałbym temu więcej wiary, gdybym mógł. –

+1

Czy wypróbowałeś pakiet rgl dla działek 3D? – Spacedman

+0

Sądzę, że tak tworzą karuzele! – PascalVKooten

Powiązane problemy