Как определить направление жеста круга?

Это суть моего кода.

Leap.loop({enableGestures: true}, function(frame) {
var gestures = frame.gestures;

for (var i = 0; i < gestures.length; i++) { 
  // I want to do something when draw circle with one pointable 
   if (gesture.type == "circle" && gesture.state == "stop" && gesture.pointableIds.length == 1) {
    var isClockWise = ? ;//  how to know the direction of circle ?
  }
}
} );

Как узнать, что круг по часовой стрелке или против часовой стрелки с объектом жеста?

Я использовал прыжок всего 2 дня и очень нуждаюсь в вашей помощи.


person jziwenchen    schedule 02.08.2013    source источник
comment
Я получаю неожиданный токен. когда я использую Leap.Loop()? Почему?   -  person Kala J    schedule 01.11.2014


Ответы (5)


Глядя на образец C ++, приведенный на веб-сайте скачка, дается фрагмент кода, чтобы определить, находится ли круг по часовой стрелке.

Код С++:

if (circle.pointable().direction().angleTo(circle.normal()) <= PI/4)
   {
      clockwiseness = "clockwise";
   }
   else
   {
      clockwiseness = "counterclockwise";
   }

Я не использовал Javascript API, но я думаю, что это может быть что-то эквивалентное. Этот код не тестировался, но в Javascript это может быть что-то вроде:

// considere your gesture is a circle, and there is at least one pointable object.
if (gesture.type == "circle" && gesture.state == "stop" && gesture.pointableIds.length >= 1)
{
  var dir = frame.pointables[gesture.pointableIds[0] ].direction; // get direction of the Pointable used for the circle gesture
  var angle = dir.AngleTo (circle.normal);
  var isClockWise =  angle <= (3.14 / 4);
}

Получил всю информацию от Leap JS API с GitHub и Сайт разработчиков Leap Motion

-> Будьте осторожны, frame.pointables возвращайте объекты pointables, заданные в произвольном порядке (см. документ JS API). Этот фрагмент кода предназначен только для объяснения алгоритма.

person Marcassin    schedule 02.08.2013
comment
на самом деле, функция angularTo() устарела в новой версии библиотеки jumpjs. developer.leapmotion.com/forums/forums/10/topics/ вместо этого используется функция equal. - person jziwenchen; 07.08.2013
comment
Хорошо, спасибо за подсказку, еще один метод AngleTo находится в документации класса Vector в LeapJS на github (leapmotion. github.io/leapjs). - person Marcassin; 07.08.2013

Это самый простой способ узнать

var isClockwise = (circleGesture.normal[2] <= 0);

Он вернет true или false

person user2827958    schedule 09.06.2014

Пробовал другие ответы на этой странице и не смог заставить его работать, немного упростил код и, наконец, заработал. PointableID регистрирует нормальный как отрицательный/положительный в зависимости от направления жеста круга.

function pageScrollDown() {
   window.scrollBy(0,10);
};
function pageScrollUp(){
   window.scrollBy(0,-15);
};

$(window).bind('circle', function(e, gesture){

var circle = gesture;

circle.pointable = circle.pointableIds[0];
direction = gesture.normal[1];

    if(direction < 0 ) {
      pageScrollDown();
      } else {
        pageScrollUp();
}
});
person Avery Thomas    schedule 25.03.2015

Я использовал «библиотеку Leap Cursor» для своего проекта, и это действительно здорово. С помощью этой библиотеки очень просто определить жест круга на элементе.

var circleTrackElements = document.querySelectorAll(".myDOMElements");
for (var i = 0; i < allTiles.length; i++) {
    circleTrackElements[i].addEventListener("leap-circle-stop", function(e) {
        console.log("CIRCLE DETECTED");
    });
};
LeapManager.init({
    maxCursors : 1,
    interactiveSelector : ".myDOMElements"
}); 

ссылка GITHUB для библиотеки

person Srikanth    schedule 08.10.2013
comment
-1, так как это не касается фактического вопроса, который касался направления рисуемого круга. - person Charles Ward; 21.11.2013

person    schedule
comment
Это более эффективно, чем принятый ответ (обычно angularTo необходимо вычислять точечный продукт по пути). - person Charles Ward; 21.11.2013