3

これは私のコードの要点です。

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日間だけleap motionを使っていましたが、本当にあなたの助けが必要です.

4

5 に答える 5

4
Leap.loop({enableGestures: true},function(frame) {
var gestures = frame.gestures,
    circle,
    pointable,
    direction,
    normal;
// Check if is there any gesture going on
if(gestures.length > 0) {
    // In this example we will focus only on the first gesture, for the sake of simplicity
    if(gestures[0].type == 'circle') {
        circle = gestures[0];
        // Get Pointable object
        circle.pointable = frame.pointable(circle.pointableIds[0]);
        // Reset circle gesture variables as nedded, not really necessary in this case
        if(circle.state == 'start') {
            clockwise = true;
        } else if (circle.state == 'update') {
            direction = circle.pointable.direction;
            // Check if pointable exists
            if(direction) {
                normal = circle.normal;
                // Check if product of vectors is going forwards or backwards
                // Since Leap uses a right hand rule system
                // forward is into the screen, while backwards is out of it
                clockwise = Leap.vec3.dot(direction, normal) > 0;
                if(clockwise) {
                    //Do clockwose stuff
                } else {
                    //Do counterclockwise stuff
                }
            }
        }
    }
}

});

于 2013-08-29T04:28:44.253 に答える
2

リープ Web サイトで提供されている C++ サンプルを見ると、円が時計回りであることを検出するためのコードが提供されています。

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);
}

GitHubおよびLeap Motion Developers サイトの Leap JS API からすべての情報を取得しました

->frame.pointables任意の順序で指定された pointables オブジェクトを返すように注意してください (JS API doc を参照)。このコードは、アルゴリズムを説明するためのものです

于 2013-08-02T09:44:45.013 に答える
1

これが最も簡単に調べる方法です

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

true または false を返します

于 2014-06-09T16:26:07.347 に答える
0

このページで他の回答を試してみましたが、機能しませんでした。コードを少し単純化し、最終的に機能するようになりました。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();
}
});
于 2015-03-25T16:04:06.603 に答える
-1

私は自分のプロジェクトで「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 リンク

于 2013-10-08T22:56:51.100 に答える