2013-11-23 5 views
0

Интересно, как я мог получить правильный угол поворота ладони (вдоль оси Y) от Leap Motion (я использую последние LeapJS API)?Вращение пальца в LeapJS

Я пробовал оба метода rotationAngle(sinceFrame) и frame._rotation. Тем не менее, rotationAngle() возвращает очень маленькое значение, близкое к 0, которое, по-видимому, является углом поворота, рассчитанным на основе текущего кадра (как определить sinceFrame в Leap.loop(function(frame)){}, так как кажется, что только записывает данные из текущего кадра).

И frame._rotation возвращает матрицу 3 * 3 (о которой я понятия не имею, что это такое, поскольку она не включена в документацию API). Поэтому, интересно, есть ли способ получить правильный угол поворота оси Y из этих методов?

ответ

0

Последняя версия библиотеки leap.js включает функцию roll() в качестве члена объекта Hand. (Это также имеет высоту() и рыскания(), если рулон() не все, что вы хотите.) Функция рулет() определяется как:

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

Как и в сторону, так как вам не нужно чтобы использовать rotAngle(), чтобы получить текущие углы ладони, функция rotationAngle() дает вам поворот, который произошел между двумя кадрами. Для forFrame вы можете либо сохранить ссылку на стартовый фрейм, либо получить прошлый кадр из буфера истории, поддерживаемого объектом Controller. Хотя функция Leap.loop() не дает вам доступ к объекту Controller напрямую, вы должны иметь возможность создавать свои собственные. Обратите внимание: frame._rotation - это внутренняя переменная, которая используется при вычислении преобразований между двумя кадрами. Он не очень полезен сам по себе.

Смежные вопросы