Я хочу проверить, является ли рука в кадре скачкообразного движения кулаком.
Обычно предлагаемый метод состоит в том, чтобы искать hand.grabStrength
со значением 1. Проблема в том, что значение прыгает до 1 даже с «Коготьподобной» рукой или чем-либо еще с очень слегка согнутыми пальцами.
Другой подход состоит в том, чтобы проверить на каждом пальце, является ли он extended
. Но у этого есть аналогичная проблема: пальцы считаются вытянутыми, только если они полностью прямые. Поэтому, даже если я проверю, что все пальцы не вытянуты, возникает та же проблема, что и выше (когтеобразные руки распознаются как схваченные).
Объединение этих двух методов также не решает проблему, что неудивительно, учитывая, что они оба страдают от одних и тех же проблем.
Теперь у нас есть все кости каждого пальца с позициями и всем остальным. Но я понятия не имею, с чего начать с математики, чтобы определить, скручен ли палец.
В основном у меня есть эта установка на данный момент:
var controller = Leap.loop(function(frame){
if(frame.hands.length>0){
//we only look at the first available hand
var hand = frame.hands[0];
//we get the index finger only, but later on we should look at all 5 fingers.
var index = hands.fingers[1];
//after that we get the positions of the joints between the bones in a hand
//the position of the metacarpal bone (i.e. the base of your hand)
var carp = index.carpPosition;
//the position of the joint on the knuckle of your hand
var mcp = index.mcpPosition;
//the position of the following joint, between the proximal and the intermediate bones
var pip = index.pipPosition;
//the position of the distal bone (the very tip of your finger)
var dip = index.dipPosition;
//and now we need the angle between each of those positions, which is where i'm stuck
}
});
Итак, как мне получить угол между двумя этими позициями (карп к мкп, мкп к зернышку, зернышку к падению)? Любые идеи?