gpt4 book ai didi

java - 给定 3d 点数组,量化方向的变化

转载 作者:行者123 更新时间:2023-11-30 07:32:32 25 4
gpt4 key购买 nike

我正在开发一个用 Java 编写的软件,它使用一些 processing.core 库类和 simpleopenni 来跟踪用户使用 XBOX Kinect 的手。

我想弄清楚的是如何确定用户的手部运动何时突然改变方向。

我目前可以使用的是一个 PVectors 数组(本质上是 x、y 和 z 坐标的 vector :3d 空间中的一个点),它记录了用户过去的手部位置30 帧左右。

我想一定有一种方法可以在给定最近记录的几个点的情况下近乎实时地获得表示方向变化量的值。也许拟合一条曲线并采取一些导数?

理想情况下,该解决方案的计算成本不应非常高,因为我正在尝试实现一个具有实时值(value)的解决方案。

如果您能提供任何指导,我们将不胜感激!

最佳答案

设现在(即0帧前)的位置为(x0, y0, z0)
让位置n帧前是(xn, yn, zn) .
让位置2n帧前是(xm, ym, zm) .

然后帧间位置的变化2nn(xn-xm, yn-ym, zn-zm) .
您可以将其视为 n 期间的平均速度框架。

以及n之间的位置变化现在是(x0-xn, y0-yn, z0-zn) .
这表示下一个 n 期间的平均速度帧。

现在您有了 n 的速度结束的帧 n帧前,你有 n 的速度刚刚结束的帧。

在上次 n 期间速度的变化 frames 必须是这两个 vector 之间的差异。对于每个坐标:

Ax = (x0-xn) - (xn-xm) = x0 -2xn + xm
Ay = (y0-yn) - (yn-ym) = y0 -2yn + ym
Az = (z0-xn) - (zn-zm) = z0 -2zn + zm

加速度的大小是|A| = sqrt( (Ax)^2 + (Ay)^2 + (Az)^2 )
如果你只关心“大”的变化并且更喜欢速度而不是准确性,你可以逃脱 A' = (Ax)^2 + (Ay)^2 + (Az)^2
甚至 A" = abs(Ax) + abs(Ay) + abs(Az)

这个想法是您希望每个组成部分都对整体有贡献,无论它是积极的还是消极的,因此您可以通过平方或取其绝对值来“强制”它为积极。

希望对您有所帮助!

关于java - 给定 3d 点数组,量化方向的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6542786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com