0

我想知道如何从 Leap Motion(我正在使用最新的LeapJS API )获得正确的手掌旋转角度(沿 Y 轴)?

我已经尝试过rotationAngle(sinceFrame)方法和frame._rotation. 但是,rotationAngle()返回一个非常小的值接近0,这似乎是根据当前帧计算的旋转角度(如何定义sinceFramein Leap.loop(function(frame)){},因为它似乎只记录当前帧的数据)。

并且frame._rotation返回一个 3*3 矩阵(我不知道它是什么,因为它不包含在 API 文档中)。因此,我想知道是否有任何方法可以从这些方法中获得正确的 Y 轴旋转角度?

4

1 回答 1

0

最新版本的leap.js 库包含一个roll() 函数作为Hand 对象的成员。(它也有 pitch() 和 yaw(),如果 roll() 不是你想要的。) roll() 函数定义为:

Hand.prototype.roll = function() {
  return Math.atan2(this.palmNormal[0], -this.palmNormal[1]);
}

顺便说一句,由于您不需要使用 rotationAngle() 来获取当前的手掌角度,因此 rotationAngle() 函数可以为您提供两帧之间发生的旋转。对于 sinceFrame,您可以存储对起始帧的引用,也可以从 Controller 对象维护的历史缓冲区中获取过去的帧。虽然 Leap.loop() 函数不能让您直接访问它的 Controller 对象,但您应该能够创建自己的。请注意,frame._rotation 是一个内部变量,用于计算两帧之间的转换。它本身并没有多大用处。

于 2013-11-24T23:09:48.493 回答