から左右のジェスチャーを検出する方法を知っていました
ジェスチャーアップ、ダウン、サークルを検出する方法を知りたいです。
私の英語は下手です。あなたが理解できるとは思いませんが、助けてください。
から左右のジェスチャーを検出する方法を知っていました
ジェスチャーアップ、ダウン、サークルを検出する方法を知りたいです。
私の英語は下手です。あなたが理解できるとは思いませんが、助けてください。
スワイプ方向については、Gesture オブジェクトの方向プロパティの x 座標と y 座標を比較できます。Leap Motion 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 座標の符号のみを調べます。そのため、すべてのスワイプは右または左に分類されます。また、スワイプを上または下に分類するには、x 座標と y 座標の大きさを比較して、スワイプがより水平か垂直かを判断し、次に座標の符号を比較して、水平スワイプが左または垂直かどうかを判断する必要があります。右または垂直スワイプは上または下です。
円のジェスチャは別の種類のジェスチャとして報告されるため、gesture.type プロパティを確認できます。
これを説明する JavaScript を次に示します (Leap Motion SDK に含まれている Sample.html ファイルから抜粋):
// 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) + ")";
}
これを使用するには、実行される場所に配置し、HTML ドキュメントの本文に id のgestureData を持つ要素を含めます。
<div id="gestureData"></div>