首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >制作时间序列的3D渲染图

制作时间序列的3D渲染图
EN

Stack Overflow用户
提问于 2011-11-16 22:10:48
回答 3查看 3.3K关注 0票数 1

我有一组3D坐标(如下所示-仅针对3D空间中的单个点):

代码语言:javascript
复制
x <- c(-521.531433, -521.511658, -521.515259, -521.518127, -521.563416, -521.558044, -521.571228, -521.607178, -521.631165, -521.659973)
y <- c(154.499557, 154.479568, 154.438705, 154.398682, 154.580688, 154.365189, 154.3564, 154.559189, 154.341309, 154.344223)
z <- c(864.379272, 864.354675, 864.365479, 864.363831, 864.495667, 864.35498, 864.358582, 864.50415, 864.35553, 864.359863)
xyz <- data.frame(x,y,z)

我需要用3D渲染来制作这个点的时间序列图(这样我就可以旋转这个图,等等)。该图将显示上述点在时间上的轨迹(例如,以实线的形式)。我使用了带有plot3d方法的'rgl' package,但我不能绘制时间序列(下面,仅绘制时间序列中第一帧的单个点):

代码语言:javascript
复制
require(rgl)    
plot3d(xyz[1,1],xyz[1,2],xyz[1,3],axes=F,xlab="",ylab="",zlab="") 

我找到了this post,但它并不能真正处理实时渲染的3D绘图。如果有任何建议,我将不胜感激。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-18 02:41:57

解决方案比我想象的要简单,问题是我没有对我的数据使用as.matrix。当我简单地尝试使用plot3d绘制整个数据集时,我得到了错误(list) object cannot be coerced to type 'double' (找到了此here的解决方案)。因此,如果你需要绘制一组坐标的时间序列(在我的例子中,两个角色的运动捕捉数据),这里是我的完整解决方案(只适用于下面的数据集!):

将上述数据

  • download example data set
  • read成表:

data <- read.table("Bob12.txt",Bob12.txt,Bob12.txt)

X <- as.matrix(子集(data,select=seq(1,88,3)y <- as.matrix(子集(data,select=seq(2,89,3)z <- as.matrix(子集(data,select=seq(3,90,3)))

  • plot select=seq(1,88,3)z<-as.matrix(子集(数据,使用'rgl' package

需要(Rgl) plot3d(x1:nrow(x),,y1:nrow(y),,z1:nrow(z),,axes=F,xlab="",ylab="",zlab="")

你应该会得到类似于下图的东西(但你可以旋转它等等)--希望你能认识到那里有人们的联合中心。我仍然需要调整它以使其在视觉上更好-将第一帧作为点(以清楚地看到演员的关节),然后是可见的中断,然后是其余的帧作为线。

票数 2
EN

Stack Overflow用户

发布于 2011-11-16 22:16:10

如果你阅读help(plot3d),你可以看到如何绘制线条:

代码语言:javascript
复制
require(rgl)    
plot3d(xyz$x,xyz$y,xyz$z,type="l")

这是你想要的吗?

票数 3
EN

Stack Overflow用户

发布于 2011-11-16 22:42:05

这个怎么样?它使用rgl.pop()来删除一点和一条线,并将它们绘制为轨迹-更改睡眠参数以控制速度:

代码语言:javascript
复制
ts <- function(xyz,sleep=0.3){
  plot3d(xyz,type="n")
  n = nrow(xyz)
  p = points3d(xyz[1,])
  l = lines3d(xyz[1,])
  for(i in 2:n){
    Sys.sleep(sleep)
    rgl.pop("shapes",p)
    rgl.pop("shapes",l)
    p=points3d(xyz[i,])
    l=lines3d(xyz[1:i,])
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8152987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档