Обнаружение жеста смахивания с скачком движения

0

Я знал, как распознавать жест слева и справа от

это

Я хочу знать, как распознавать жест вверх, вниз и круг.

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

Теги:
gesture
leap-motion

2 ответа

2
Лучший ответ

Для направлений прокрутки вы можете сравнить координаты x и y свойства direction объекта Gesture. В JavaScript JavaScript API перехода, векторы представлены 3-элементными массивами. Так:

gesture.direction[0] is the x coordinate (left to right)
gesture.direction[1] is the y coordinate ( up, down)
gesture.direction[2] is the z coordinate (front to back)

В примере, который вы приводите, рассматривается только знак x-координаты, поэтому все прокрутки классифицируются как правые или левые. Чтобы также классифицировать swipes как вверх или вниз, вам нужно будет сравнить величину координат x и y, чтобы определить, является ли салфетка более горизонтальной или более вертикальной, а затем сравнить знак координаты, чтобы определить, осталось ли горизонтальное салфетки или правый или вертикальный салфетки вверх или вниз.

Жест жестокости сообщается как другой тип жестов, поэтому вы можете посмотреть свойство gesture.type.

Вот пример JavaScript, который иллюстрирует это (адаптировано из файла Sample.html, включенного в SDK Leap Motion):

// Store frame for motion functions
var previousFrame = null;

// Setup Leap loop with frame callback function
var controllerOptions = {enableGestures: true};

Leap.loop(controllerOptions, function(frame) {

  // Display Gesture object data
  var gestureOutput = document.getElementById("gestureData");
  var gestureString = "";
  if (frame.gestures.length > 0) {
    for (var i = 0; i < frame.gestures.length; i++) {
      var gesture = frame.gestures[i];

      switch (gesture.type) {
        case "circle":
              gestureString += "<br>ID: " + gesture.id + "<br>type: " + gesture.type + ", "
                        + "<br>center: " + vectorToString(gesture.center) + " mm, "
                        + "<br>normal: " + vectorToString(gesture.normal, 2) + ", "
                        + "<br>radius: " + gesture.radius.toFixed(1) + " mm, "
                        + "<br>progress: " + gesture.progress.toFixed(2) + " rotations"
                        + "<br>";
            break;
        case "swipe":
          //Classify swipe as either horizontal or vertical
          var isHorizontal = Math.abs(gesture.direction[0]) > Math.abs(gesture.direction[1]);
          //Classify as right-left or up-down
          if(isHorizontal){
              if(gesture.direction[0] > 0){
                  swipeDirection = "right";
              } else {
                  swipeDirection = "left";
              }
          } else { //vertical
              if(gesture.direction[1] > 0){
                  swipeDirection = "up";
              } else {
                  swipeDirection = "down";
              }                  
          }
          gestureString += "<br>ID: " + gesture.id + "<br>type: " + gesture.type + ", "
                        + "<br>direction " + swipeDirection
                        + "<br>gesture.direction vector: " + vectorToString(gesture.direction, 2) + ", "
                        + "<br>";
          break;
       }
     }
  }
  gestureOutput.innerHTML = gestureString + gestureOutput.innerHTML;

})

function vectorToString(vector, digits) {
  if (typeof digits === "undefined") {
    digits = 1;
  }
  return "(" + vector[0].toFixed(digits) + ", "
             + vector[1].toFixed(digits) + ", "
             + vector[2].toFixed(digits) + ")";
}

Чтобы использовать это, поместите его где-нибудь, он будет выполнен и будет содержать элемент с идентификатором gestureData в тексте документа HTML:

<div id="gestureData"></div>
  • 0
    Кроме того, будьте осторожны при смешивании использования двух разных типов жестов в вашем приложении. Одно может легко произойти, пока пользователь пытается выполнить другое.
  • 0
    Вы действительно помогаете мне. Большое спасибо.
1

Мой друг создал библиотеку именно для этой цели. Он проверяет swipes в 6 разных направлениях и может определить, в каком направлении движется круг.

https://github.com/L1fescape/curtsy

Его код должен быть легко читаемым, поэтому, если вы хотите увидеть, как он сделал все, что мог.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню