我正在处理动作捕捉数据,并希望在3D中绘制两个骷髅(从两个不同系统获得的动作捕捉数据)。
我已设法绘制并标记关节,但我无法弄清楚如何将关节与线连接。
对以下样本数据集中使用的缩写的简短解释:
RA和LA(左右脚踝)
RK和LK(右膝和右膝)
RH和LH(左右臀部)
CG(重力中心)
简化数据集:
$HOME/.bashrc
到目前为止,我的代码用于绘制和标记两个系统中的关节:
df <- data.frame(
Joint = c("LA", "RA", "LK", "RK", "LH", "RH", "CG", "LA", "RA", "LK", "RK", "LH", "RH", "CG"),
system = c("A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B"),
x = c(0, 10, 0, 10, 0, 10, 5, 0, 10, 0, 10, 0, 10, 5),
y = c(0,0,0,0,0,0,0, 20,20,20,20,20,20,20),
z = c(0, 0, 20, 20, 40, 40, 50, 0, 0, 20, 20, 40, 40, 50))
你能帮我连接关节吗?
答案 0 :(得分:1)
使用segments3d
功能绘制线段。这需要平常
x
,y
,z
坐标,并加入点对。因此,您需要确定哪些关节已连接,并绘制这些关节之间的线段。
如果关节总是按照你给出的顺序,它将是这样的:
segs <- c(1, 3, 2, 4, 3, 5, 4, 6, 5, 7, 6, 7)
segments3d(df[segs, 3:5])
(这只是system
A段。)
编辑添加:回应第一条评论:你需要告诉R脚踝连接到膝盖等,但你可以这样做。例如:
segs <- c()
for (s in unique(df$system)) {
seg <- with(df, c(which(system == s & Joint == "LA"),
which(system == s & Joint == "LK"))
if (length(seg) == 2)
segs <- c(segs, seg)
seg <- with(df, c(which(system == s & Joint == "LK"),
which(system == s & Joint == "CG"))
if (length(seg) == 2)
segs <- c(segs, seg)
# etc for the other side
}
segments3d(df[segs, 3:5])
如果您以某种方式将连接排列在R对象中,则可以将其全部压缩。我会把它交给你解决。