【问题标题】:How to draw parametric 3d curve with smoothing in R?如何在 R 中使用平滑绘制参数化 3d 曲线?
【发布时间】:2013-03-20 23:34:30
【问题描述】:

我有参数 3d 曲线的数据:

    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
..............................

我发现 scatterplot3dplot3d 真的很酷。但我需要一个平滑的 3d 曲线。

如何在 R 中绘制它?

【问题讨论】:

  • 您是否具有生成xyz 值的t 的参数函数?但即使没有,您也想在已有的点之间进行 3d 插值 - 并且比简单的线性插值做得更好?
  • scatterplot3d 有一个type 参数,您可以将其设置为"l" 以链接您的点并形成一条曲线。
  • @Spacedman 是的,我想要比简单的线性插值更好的东西。

标签: r 3d plot curve-fitting curve


【解决方案1】:

您可以使用spline 在您的点之间进行插值并平滑曲线。

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" )

根据@Spacedman 的评论,您也可以使用rgl: 这允许您以交互方式旋转场景。

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

【讨论】:

  • 太棒了!如果可以的话,我会给予更多的信任。
  • 我猜这就是他们创造过山车的方式!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 2012-05-16
  • 1970-01-01
  • 2013-01-20
  • 2017-01-14
  • 1970-01-01
相关资源
最近更新 更多