91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在空中控制計(jì)算機(jī)

454398 ? 來源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-11-14 11:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

第1步:所需材料

跳躍Motion支持PythonJava,C ++,C#,Javascript。在本教程中,我們將使用Java。

因此,在開始制作程序之前,我們需要查看此構(gòu)建所需的材料:

1。飛躍運(yùn)動(dòng)控制器(在此處購(gòu)買)

2。面向Java開發(fā)人員的Eclipse IDE(在此處下載)

3。 Leap Motion設(shè)置文件(在此處下載)

4。 Leap Motion SDK(在此處下載)

5。 Java SE 7(在此處下載)(下載JDK和JRE )

( * Leap Motion庫僅適用于Java 6或Java 7 )

如果您不知道如何設(shè)置eclipse,那么我推薦此Java系列入門教程:在此處觀看

好,現(xiàn)在讓我們轉(zhuǎn)到涉及的步驟創(chuàng)建程序。

步驟2:軟件設(shè)置

跳躍運(yùn)動(dòng)支持多種編程語言,例如C ++,C#,Python,Java和Javascript。

在本教程中,我們將使用Java進(jìn)行編程。

初始設(shè)置:

1。首先轉(zhuǎn)到https://www.leapmotion.com/setup并下載Leap Motion設(shè)置文件,然后安裝該應(yīng)用程序。它會(huì)安裝所有內(nèi)容,以將the動(dòng)控制器連接到您的計(jì)算機(jī)。

2。接下來轉(zhuǎn)到https://developer.leapmotion.com/(開發(fā)人員門戶)并創(chuàng)建一個(gè)帳戶。然后下載Leap Motion SDK。

3。然后將zip文件中的所有文件提取到您選擇的任何文件夾中。

配置類路徑:

在此本教程將使用面向Java開發(fā)人員的Eclipse IDE。

1。打開Eclipse,然后單擊File》 New》 Java Project。

2。為項(xiàng)目命名,并確保將執(zhí)行運(yùn)行時(shí)環(huán)境JRE設(shè)置為Java SE 1.7,如圖所示。

3。然后單擊“下一步”,打開“庫”選項(xiàng)卡,然后選擇“添加外部JAR”并導(dǎo)航到先前提取的文件夾。

4。然后打開LeapSDK文件夾并轉(zhuǎn)到libs文件夾并選擇LeapJava.jar文件。

5。接下來,單擊LeapJava.jar旁邊的三角形下拉按鈕,然后從“下拉菜單”中單擊“本機(jī)庫位置”,然后單擊“編輯”,如圖所示。

6。然后單擊“外部文件夾”,然后導(dǎo)航到LeapSDK文件夾》 lib》,然后根據(jù)您的操作系統(tǒng)選擇 x64 或 x86 文件夾,然后單擊“確定”,然后單擊“完成”。

我們現(xiàn)在在我們的項(xiàng)目中安裝了LeapMotion,現(xiàn)在開始進(jìn)行一些編碼!

第3步:跳躍運(yùn)動(dòng)監(jiān)聽器

Now that we are done importing the libraries , let us start working on the project.

初始設(shè)置:

1。首先,我們需要在源文件夾中創(chuàng)建一個(gè)新類,單擊項(xiàng)目文件夾旁邊的三角形下拉箭頭。

2。在您的項(xiàng)目文件夾中,右鍵單擊src文件夾,轉(zhuǎn)到new》,然后單擊class創(chuàng)建一個(gè)新的Java類。

3。給班級(jí)起個(gè)名字,然后單擊完成。

現(xiàn)在,讓我們從代碼開始:

1。首先,我們創(chuàng)建一個(gè)Leap Motion偵聽器:(注意:導(dǎo)入必要的庫),偵聽的偵聽器是何時(shí)將Jump Motion控制器連接到計(jì)算機(jī)的。

package starkmouse;

import java.io.IOException;

import java.awt.AWTException;

import java.awt.GraphicsDevice;

import java.awt.GraphicsEnvironment;

import java.awt.MouseInfo;

import java.awt.Point;

import java.awt.Robot;

import java.awt.event.InputEvent;

import java.awt.event.KeyEvent;

import com.leapmotion.leap.*;

import com.leapmotion.leap.Controller.PolicyFlag;

public class leapmoues {

public static void main(String[] args) throws AWTException {

Controller controller = new Controller();

controller.setPolicyFlags(PolicyFlag.POLICY_BACKGROUND_FRAMES);

SampleListener listener = new SampleListener();

controller.addListener(listener);

// controller.enableGesture(Gesture.Type.TYPE_SCREEN_TAP);

// controller.enableGesture(Gesture.Type.TYPE_SWIPE);

controller.enableGesture(Gesture.Type.TYPE_CIRCLE);

System.out.println(“Press Enter to quit.。.”);

try {

System.in.read();

} catch (IOException e) {

e.printStackTrace();

}

controller.removeListener(listener);

}

}

class SampleListener extends Listener {

boolean readyForControl = false;

int screenWidth;

int screenHeight;

boolean iBoxGet = false;

InteractionBox iBox = null;

Robot robot;

boolean isMoving = false;

boolean unGrip = false;

boolean wasFacingDown = true;

boolean wasInTabState = false;

boolean wasTabbing = false;

boolean justCircleGestured = false;

boolean isResizing = false;

public void onConnect(Controller controller) {

System.out.println(“Connected”);

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment()

.getDefaultScreenDevice();

screenWidth = gd.getDisplayMode().getWidth();

screenHeight = gd.getDisplayMode().getHeight();

System.out.println(“Screen Resolution: X: ” + screenWidth + “, H: ”

+ screenHeight);

readyForControl = true;

try {

robot = new Robot();

robot.setAutoDelay(5);

} catch (AWTException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

步驟4:幀和手勢(shì)數(shù)據(jù)

跳躍運(yùn)動(dòng)幀數(shù)據(jù),其中包括手勢(shì)(圓形,捏,掌面朝下和所有其他手勢(shì))

跳躍運(yùn)動(dòng)有兩個(gè)紅外攝像機(jī)和三個(gè)紅外LED。跳躍運(yùn)動(dòng)使用三個(gè)IR Led形成IR點(diǎn)圖案,從而形成3D數(shù)據(jù)收集,IR相機(jī)拍攝稱為幀的圖片。幀從跳躍運(yùn)動(dòng)設(shè)備發(fā)送到計(jì)算機(jī),我們可以對(duì)其進(jìn)行編程。

跳躍運(yùn)動(dòng)使用復(fù)雜的數(shù)學(xué)分析圖片和點(diǎn)定位,然后比較紅外拍攝的兩張圖片的數(shù)據(jù)相機(jī)并使用兩個(gè)2D表示形式獲得3D表示形式。

跳躍運(yùn)動(dòng)設(shè)備以300 fps的速度捕獲。然后,我們對(duì)發(fā)送到計(jì)算機(jī)的每個(gè)幀進(jìn)行處理。

代碼:

public void onFrame(Controller controller) {

Frame frame = controller.frame(); // The latest frame

// Frame previous = controller.frame(1); //The previous frame

// System.out.println(“Frame available”);

if (!iBoxGet) {

iBox = frame.interactionBox();

iBoxGet = true;

System.out.println(“Interaction box set!”);

}

// Pointable furthestFront = frame.pointables().frontmost();

Hand rightHand = frame.hands().rightmost();

Vector palmV = rightHand.palmVelocity();

// System.out.println(“Velocity: X: ” + palmV.getX() + “, Y: ” +

// palmV.getY()

// + “, Z: ” + palmV.getZ());

Vector palmN = rightHand.palmNormal();

// System.out.println(“Normal: X: ” + palmN.getX() + “, Y: ”

// + palmN.getY() + “, Z: ” + palmN.getZ());

Point mouseLoc = MouseInfo.getPointerInfo().getLocation();

int currentMouseX = mouseLoc.x;

int currentMouseY = mouseLoc.y;

if (readyForControl && rightHand.confidence() 》 .15) {

if (!isMoving && !wasInTabState && frame.hands().count() 》 1) {

Hand leftHand = frame.hands().leftmost();

if (leftHand.pinchStrength() 》 .8

&& rightHand.pinchStrength() 》 .8) {

if (!isResizing) {

System.out.println(“Resizing.。.”);

robot.keyPress(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_S);

robot.keyRelease(KeyEvent.VK_S);

robot.keyPress(KeyEvent.VK_DOWN);

robot.keyPress(KeyEvent.VK_RIGHT);

robot.keyRelease(KeyEvent.VK_DOWN);

robot.keyRelease(KeyEvent.VK_RIGHT);

isResizing = true;

}

}else{

if(isResizing){

System.out.println(“Resizing complete!”);

robot.mousePress(InputEvent.BUTTON1_MASK);

robot.mouseRelease(InputEvent.BUTTON1_MASK);

isResizing = false;

}

}

}

// System.out.println(“Confidence: ” + rightHand.confidence());

if (rightHand.grabStrength() 》 .99 && !wasInTabState && !isResizing) {

if (!isMoving && palmN.getY() 《 .8) {

robot.keyPress(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_R);

robot.keyRelease(KeyEvent.VK_R);

robot.keyPress(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_M);

robot.keyRelease(KeyEvent.VK_M);

robot.keyPress(KeyEvent.VK_DOWN);

robot.keyRelease(KeyEvent.VK_DOWN);

isMoving = true;

}

// System.out.println(rightHand.grabStrength());

}

else {

// System.out.println(“Not grabbing”);

if (isMoving) {

robot.mousePress(InputEvent.BUTTON1_MASK);

robot.mouseRelease(InputEvent.BUTTON1_MASK);

isMoving = false;

if (palmN.getX() != 0 && palmN.getY() != 0 && palmN.getZ() != 0) {

if (palmN.getY() 《 -.1 && palmN.getZ() 》 -.8) {

if (currentMouseY 《= 8) {

robot.keyPress(KeyEvent.VK_WINDOWS);

robot.keyPress(KeyEvent.VK_UP);

robot.keyRelease(KeyEvent.VK_WINDOWS);

robot.keyRelease(KeyEvent.VK_UP);

}

else {

if (screenWidth - currentMouseX 《= 12) {

robot.keyPress(KeyEvent.VK_WINDOWS);

robot.keyPress(KeyEvent.VK_RIGHT);

robot.keyRelease(KeyEvent.VK_WINDOWS);

robot.keyRelease(KeyEvent.VK_RIGHT);

} else if (currentMouseX 《= 12) {

robot.keyPress(KeyEvent.VK_WINDOWS);

robot.keyPress(KeyEvent.VK_LEFT);

robot.keyRelease(KeyEvent.VK_WINDOWS);

robot.keyRelease(KeyEvent.VK_LEFT);

}

}

} else {

System.out.println(“Normal: X: ” + palmN.getX()

+ “, Y: ” + palmN.getY() + “, Z: ”

+ palmN.getZ());

robot.keyPress(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_N);

robot.keyRelease(KeyEvent.VK_N);

}

}

}

}

if (!isMoving && !isResizing) {

if (palmN.getY() 《 -.8 && palmN.getZ() 》 -.5) {

wasFacingDown = true;

wasTabbing = false;

if (wasInTabState) {

robot.keyPress(KeyEvent.VK_ENTER);

robot.keyRelease(KeyEvent.VK_ENTER);

wasInTabState = false;

}

} else if (palmN.getY() 》= .8 && wasFacingDown

&& !wasInTabState) {

System.out.println(“Alt tabbing”);

wasFacingDown = false;

wasInTabState = true;

wasTabbing = false;

robot.keyPress(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_CONTROL);

robot.keyPress(KeyEvent.VK_TAB);

robot.delay(100);

robot.keyRelease(KeyEvent.VK_TAB);

robot.keyRelease(KeyEvent.VK_CONTROL);

robot.keyRelease(KeyEvent.VK_ALT);

try {

Runtime.getRuntime().exec(

“cmd /c start ” + “C:WindowSwitcher.lnk”);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

robot.delay(300);

} else if (wasInTabState && !wasFacingDown && !wasTabbing

&& palmN.getY() 《 .45) {

wasTabbing = true;

} else if (wasInTabState && !wasFacingDown && wasTabbing

&& palmN.getY() 》 .75) {

robot.keyPress(KeyEvent.VK_TAB);

robot.keyRelease(KeyEvent.VK_TAB);

wasTabbing = false;

}

}

/*

* if (!isMoving && !wasInTabState) { /* if(palmN.getZ() 《= -.7 &&

* rightHand.grabStrength() 《 .1){

* System.out.println(“Palm vertical velocity: ” +

* rightHand.palmVelocity().getY()); //float resultVerticalV =

* Math.round(Math.abs(rightHand.palmVelocity().getY()) - 1);

* //if(resultVerticalV 》 0){ robot.mouseWheel((int)

* Math.round(((rightHand.palmVelocity().getY()) / 500))); //}

* }else{

*/

if (!isMoving && !wasInTabState && frame.gestures().count() 》 0

&& frame.hands().count() == 1 && !isResizing) {

CircleGesture circleGesture = new CircleGesture(frame

.gestures().get(0));

// System.out.println(“Pinch strength: ” +

// rightHand.pinchStrength());

if (circleGesture.durationSeconds() 》 .5 && !justCircleGestured

&& rightHand.pinchStrength() 》 .8) {

System.out.println(“Closed a window!”);

robot.keyPress(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_F4);

robot.keyRelease(KeyEvent.VK_F4);

robot.keyRelease(KeyEvent.VK_ALT);

justCircleGestured = true;

}

} else {

justCircleGestured = false;

}

float xSpeed = (palmV.getX() / 6);

float ySpeed = (palmV.getY() / 6);

// System.out.println(“xSpeed: ” + xSpeed + “, ySpeed: ” + ySpeed);

robot.mouseMove((int) (currentMouseX + xSpeed),

(int) (currentMouseY - ySpeed));

// }

}

}

}

步驟5:完成代碼!

package starkmouse;

import java.io.IOException;

import java.awt.AWTException;

import java.awt.GraphicsDevice;

import java.awt.GraphicsEnvironment;

import java.awt.MouseInfo;

import java.awt.Point;

import java.awt.Robot;

import java.awt.event.InputEvent;

import java.awt.event.KeyEvent;

import com.leapmotion.leap.*;

import com.leapmotion.leap.Controller.PolicyFlag;

public class leapmoues {

public static void main(String[] args) throws AWTException {

Controller controller = new Controller();

controller.setPolicyFlags(PolicyFlag.POLICY_BACKGROUND_FRAMES);

SampleListener listener = new SampleListener();

controller.addListener(listener);

// controller.enableGesture(Gesture.Type.TYPE_SCREEN_TAP);

// controller.enableGesture(Gesture.Type.TYPE_SWIPE);

controller.enableGesture(Gesture.Type.TYPE_CIRCLE);

System.out.println(“Press Enter to quit.。.”);

try {

System.in.read();

} catch (IOException e) {

e.printStackTrace();

}

controller.removeListener(listener);

}

}

class SampleListener extends Listener {

boolean readyForControl = false;

int screenWidth;

int screenHeight;

boolean iBoxGet = false;

InteractionBox iBox = null;

Robot robot;

boolean isMoving = false;

boolean unGrip = false;

boolean wasFacingDown = true;

boolean wasInTabState = false;

boolean wasTabbing = false;

boolean justCircleGestured = false;

boolean isResizing = false;

public void onConnect(Controller controller) {

System.out.println(“Connected”);

GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment()

.getDefaultScreenDevice();

screenWidth = gd.getDisplayMode().getWidth();

screenHeight = gd.getDisplayMode().getHeight();

System.out.println(“Screen Resolution: X: ” + screenWidth + “, H: ”

+ screenHeight);

readyForControl = true;

try {

robot = new Robot();

robot.setAutoDelay(5);

} catch (AWTException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void onFrame(Controller controller) {

Frame frame = controller.frame(); // The latest frame

// Frame previous = controller.frame(1); //The previous frame

// System.out.println(“Frame available”);

if (!iBoxGet) {

iBox = frame.interactionBox();

iBoxGet = true;

System.out.println(“Interaction box set!”);

}

// Pointable furthestFront = frame.pointables().frontmost();

Hand rightHand = frame.hands().rightmost();

Vector palmV = rightHand.palmVelocity();

// System.out.println(“Velocity: X: ” + palmV.getX() + “, Y: ” +

// palmV.getY()

// + “, Z: ” + palmV.getZ());

Vector palmN = rightHand.palmNormal();

// System.out.println(“Normal: X: ” + palmN.getX() + “, Y: ”

// + palmN.getY() + “, Z: ” + palmN.getZ());

Point mouseLoc = MouseInfo.getPointerInfo().getLocation();

int currentMouseX = mouseLoc.x;

int currentMouseY = mouseLoc.y;

if (readyForControl && rightHand.confidence() 》 .15) {

if (!isMoving && !wasInTabState && frame.hands().count() 》 1) {

Hand leftHand = frame.hands().leftmost();

if (leftHand.pinchStrength() 》 .8

&& rightHand.pinchStrength() 》 .8) {

if (!isResizing) {

System.out.println(“Resizing.。.”);

robot.keyPress(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_S);

robot.keyRelease(KeyEvent.VK_S);

robot.keyPress(KeyEvent.VK_DOWN);

robot.keyPress(KeyEvent.VK_RIGHT);

robot.keyRelease(KeyEvent.VK_DOWN);

robot.keyRelease(KeyEvent.VK_RIGHT);

isResizing = true;

}

}else{

if(isResizing){

System.out.println(“Resizing complete!”);

robot.mousePress(InputEvent.BUTTON1_MASK);

robot.mouseRelease(InputEvent.BUTTON1_MASK);

isResizing = false;

}

}

}

// System.out.println(“Confidence: ” + rightHand.confidence());

if (rightHand.grabStrength() 》 .99 && !wasInTabState && !isResizing) {

if (!isMoving && palmN.getY() 《 .8) {

robot.keyPress(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_R);

robot.keyRelease(KeyEvent.VK_R);

robot.keyPress(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_M);

robot.keyRelease(KeyEvent.VK_M);

robot.keyPress(KeyEvent.VK_DOWN);

robot.keyRelease(KeyEvent.VK_DOWN);

isMoving = true;

}

// System.out.println(rightHand.grabStrength());

} else {

// System.out.println(“Not grabbing”);

if (isMoving) {

robot.mousePress(InputEvent.BUTTON1_MASK);

robot.mouseRelease(InputEvent.BUTTON1_MASK);

isMoving = false;

if (palmN.getX() != 0 && palmN.getY() != 0

&& palmN.getZ() != 0) {

if (palmN.getY() 《 -.1 && palmN.getZ() 》 -.8) {

if (currentMouseY 《= 8) {

robot.keyPress(KeyEvent.VK_WINDOWS);

robot.keyPress(KeyEvent.VK_UP);

robot.keyRelease(KeyEvent.VK_WINDOWS);

robot.keyRelease(KeyEvent.VK_UP);

} else {

if (screenWidth - currentMouseX 《= 12) {

robot.keyPress(KeyEvent.VK_WINDOWS);

robot.keyPress(KeyEvent.VK_RIGHT);

robot.keyRelease(KeyEvent.VK_WINDOWS);

robot.keyRelease(KeyEvent.VK_RIGHT);

} else if (currentMouseX 《= 12) {

robot.keyPress(KeyEvent.VK_WINDOWS);

robot.keyPress(KeyEvent.VK_LEFT);

robot.keyRelease(KeyEvent.VK_WINDOWS);

robot.keyRelease(KeyEvent.VK_LEFT);

}

}

} else {

System.out.println(“Normal: X: ” + palmN.getX()

+ “, Y: ” + palmN.getY() + “, Z: ”

+ palmN.getZ());

robot.keyPress(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_SPACE);

robot.keyRelease(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_N);

robot.keyRelease(KeyEvent.VK_N);

}

}

}

}

if (!isMoving && !isResizing) {

if (palmN.getY() 《 -.8 && palmN.getZ() 》 -.5) {

wasFacingDown = true;

wasTabbing = false;

if (wasInTabState) {

robot.keyPress(KeyEvent.VK_ENTER);

robot.keyRelease(KeyEvent.VK_ENTER);

wasInTabState = false;

}

} else if (palmN.getY() 》= .8 && wasFacingDown

&& !wasInTabState) {

System.out.println(“Alt tabbing”);

wasFacingDown = false;

wasInTabState = true;

wasTabbing = false;

robot.keyPress(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_CONTROL);

robot.keyPress(KeyEvent.VK_TAB);

robot.delay(100);

robot.keyRelease(KeyEvent.VK_TAB);

robot.keyRelease(KeyEvent.VK_CONTROL);

robot.keyRelease(KeyEvent.VK_ALT);

try {

Runtime.getRuntime().exec(

“cmd /c start ” + “C:WindowSwitcher.lnk”);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

robot.delay(300);

} else if (wasInTabState && !wasFacingDown && !wasTabbing

&& palmN.getY() 《 .45) {

wasTabbing = true;

} else if (wasInTabState && !wasFacingDown && wasTabbing

&& palmN.getY() 》 .75) {

robot.keyPress(KeyEvent.VK_TAB);

robot.keyRelease(KeyEvent.VK_TAB);

wasTabbing = false;

}

}

/*

* if (!isMoving && !wasInTabState) { /* if(palmN.getZ() 《= -.7 &&

* rightHand.grabStrength() 《 .1){

* System.out.println(“Palm vertical velocity: ” +

* rightHand.palmVelocity().getY()); //float resultVerticalV =

* Math.round(Math.abs(rightHand.palmVelocity().getY()) - 1);

* //if(resultVerticalV 》 0){ robot.mouseWheel((int)

* Math.round(((rightHand.palmVelocity().getY()) / 500))); //}

* }else{

*/

if (!isMoving && !wasInTabState && frame.gestures().count() 》 0

&& frame.hands().count() == 1 && !isResizing) {

CircleGesture circleGesture = new CircleGesture(frame

.gestures().get(0));

// System.out.println(“Pinch strength: ” +

// rightHand.pinchStrength());

if (circleGesture.durationSeconds() 》 .5 && !justCircleGestured

&& rightHand.pinchStrength() 》 .8) {

System.out.println(“Closed a window!”);

robot.keyPress(KeyEvent.VK_ALT);

robot.keyPress(KeyEvent.VK_F4);

robot.keyRelease(KeyEvent.VK_F4);

robot.keyRelease(KeyEvent.VK_ALT);

justCircleGestured = true;

}

} else {

justCircleGestured = false;

}

float xSpeed = (palmV.getX() / 6);

float ySpeed = (palmV.getY() / 6);

// System.out.println(“xSpeed: ” + xSpeed + “, ySpeed: ” + ySpeed);

robot.mouseMove((int) (currentMouseX + xSpeed),

(int) (currentMouseY - ySpeed));

// }

}

}

}

步驟6:運(yùn)行程序和結(jié)果:

現(xiàn)在我們已經(jīng)完成了對(duì)Leap Motion控制器的編程,我們可以在Eclipse中運(yùn)行該程序了。

責(zé)任編輯:wv

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    114

    文章

    17113

    瀏覽量

    184416
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2989

    瀏覽量

    109904
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    自動(dòng)化計(jì)算機(jī)的功能與用途

    工業(yè)自動(dòng)化是指利用自動(dòng)化計(jì)算機(jī)控制工業(yè)環(huán)境中的流程、機(jī)器人和機(jī)械,以制造產(chǎn)品或其部件。工業(yè)自動(dòng)化的目的是提高生產(chǎn)率、增加靈活性,并提升制造過程的質(zhì)量。工業(yè)自動(dòng)化在汽車制造中體現(xiàn)得最為明顯,其中許多
    的頭像 發(fā)表于 07-15 16:32 ?137次閱讀
    自動(dòng)化<b class='flag-5'>計(jì)算機(jī)</b>的功能與用途

    云端超級(jí)計(jì)算機(jī)使用教程

    云端超級(jí)計(jì)算機(jī)是一種基于云計(jì)算的高性能計(jì)算服務(wù),它將大量計(jì)算資源和存儲(chǔ)資源集中在一起,通過網(wǎng)絡(luò)向用戶提供按需的計(jì)算服務(wù)。下面,AI部落小編為
    的頭像 發(fā)表于 12-17 10:19 ?555次閱讀

    工業(yè)中使用哪種計(jì)算機(jī)

    在工業(yè)環(huán)境中,工控機(jī)被廣泛使用。這些計(jì)算機(jī)的設(shè)計(jì)可承受極端溫度、灰塵和振動(dòng)等惡劣條件。它們比標(biāo)準(zhǔn)消費(fèi)類計(jì)算機(jī)更耐用、更可靠。工業(yè)計(jì)算機(jī)控制機(jī)器、監(jiān)控流程并實(shí)時(shí)收集數(shù)據(jù)。其堅(jiān)固的結(jié)構(gòu)和
    的頭像 發(fā)表于 11-29 14:07 ?717次閱讀
    工業(yè)中使用哪種<b class='flag-5'>計(jì)算機(jī)</b>?

    量子計(jì)算機(jī)與普通計(jì)算機(jī)工作原理的區(qū)別

    ? 本文介紹了量子計(jì)算機(jī)與普通計(jì)算機(jī)工作原理的區(qū)別。 量子計(jì)算是一個(gè)新興的研究領(lǐng)域,科學(xué)家們利用量子力學(xué),制造出具有革命性能力的計(jì)算機(jī)。雖然現(xiàn)在的量子
    的頭像 發(fā)表于 11-24 11:00 ?1510次閱讀
    量子<b class='flag-5'>計(jì)算機(jī)</b>與普通<b class='flag-5'>計(jì)算機(jī)</b>工作原理的區(qū)別

    計(jì)算機(jī)控制系統(tǒng)實(shí)踐報(bào)告

    計(jì)算機(jī)控制技術(shù)實(shí)踐報(bào)告
    發(fā)表于 10-17 13:45 ?1次下載

    計(jì)算機(jī)接口位于什么之間

    計(jì)算機(jī)接口是計(jì)算機(jī)硬件和軟件之間、計(jì)算機(jī)與外部設(shè)備之間以及計(jì)算機(jī)各部件之間傳輸數(shù)據(jù)、控制信息和狀態(tài)信息的硬件設(shè)備和軟件程序。它在
    的頭像 發(fā)表于 10-14 14:02 ?1326次閱讀

    計(jì)算機(jī)存儲(chǔ)系統(tǒng)的構(gòu)成

    計(jì)算機(jī)存儲(chǔ)系統(tǒng)是計(jì)算機(jī)中用于存放程序和數(shù)據(jù)的設(shè)備或部件的集合,它構(gòu)成了計(jì)算機(jī)信息處理的基礎(chǔ)。一個(gè)完整的計(jì)算機(jī)存儲(chǔ)系統(tǒng)通常包括多個(gè)層次的存儲(chǔ)器,從高速緩存(Cache)到主存儲(chǔ)器(Mai
    的頭像 發(fā)表于 09-26 15:25 ?2548次閱讀

    計(jì)算機(jī)進(jìn)行程序控制工作的基本原理是怎樣的

    計(jì)算機(jī)程序控制計(jì)算機(jī)科學(xué)中的一個(gè)核心概念,它涉及到計(jì)算機(jī)如何根據(jù)預(yù)設(shè)的指令序列執(zhí)行任務(wù)。 1. 計(jì)算機(jī)硬件基礎(chǔ) 在深入程序
    的頭像 發(fā)表于 09-04 16:57 ?1541次閱讀

    簡(jiǎn)述計(jì)算機(jī)總線的分類

    計(jì)算機(jī)總線作為計(jì)算機(jī)系統(tǒng)中連接各個(gè)功能部件的公共通信干線,其結(jié)構(gòu)和分類對(duì)于理解計(jì)算機(jī)硬件系統(tǒng)的工作原理至關(guān)重要。以下是對(duì)計(jì)算機(jī)總線結(jié)構(gòu)和分類的詳細(xì)闡述,內(nèi)容將涵蓋總線的基本概念、內(nèi)部結(jié)
    的頭像 發(fā)表于 08-26 16:23 ?5193次閱讀

    計(jì)算機(jī)中總線的作用是什么

    計(jì)算機(jī)中,總線(Bus)扮演著極其重要的角色,它是計(jì)算機(jī)內(nèi)部各功能部件之間傳送信息的公共通信干線。總線不僅連接了計(jì)算機(jī)的各個(gè)核心組件,還確保了數(shù)據(jù)、指令和控制信號(hào)的高效、準(zhǔn)確傳輸。
    的頭像 發(fā)表于 08-26 15:57 ?3705次閱讀

    晶體管計(jì)算機(jī)和電子管計(jì)算機(jī)有什么區(qū)別

    晶體管計(jì)算機(jī)和電子管計(jì)算機(jī)作為計(jì)算機(jī)發(fā)展史上的兩個(gè)重要階段,它們?cè)诙鄠€(gè)方面存在顯著的區(qū)別。以下是對(duì)這兩類計(jì)算機(jī)在硬件、性能、應(yīng)用以及技術(shù)發(fā)展等方面區(qū)別的詳細(xì)闡述。
    的頭像 發(fā)表于 08-23 15:28 ?3624次閱讀

    微處理器如何控制計(jì)算機(jī)系統(tǒng)

    微處理器,作為計(jì)算機(jī)系統(tǒng)的核心部件,承擔(dān)著控制整個(gè)計(jì)算機(jī)系統(tǒng)運(yùn)行的重要任務(wù)。它不僅是計(jì)算機(jī)的運(yùn)算中心,還是控制中心,負(fù)責(zé)執(zhí)行程序指令、處理數(shù)
    的頭像 發(fā)表于 08-22 14:21 ?988次閱讀

    簡(jiǎn)述計(jì)算機(jī)的I/O控制方式

    計(jì)算機(jī)的I/O(輸入/輸出)控制方式是計(jì)算機(jī)系統(tǒng)中至關(guān)重要的部分,它決定了CPU與外設(shè)之間數(shù)據(jù)交換的方式和效率。隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,I/O控制
    的頭像 發(fā)表于 08-20 10:55 ?2378次閱讀

    計(jì)算機(jī)系統(tǒng)的組成和功能

    計(jì)算機(jī)系統(tǒng)是一個(gè)復(fù)雜而龐大的概念,它涵蓋了計(jì)算機(jī)硬件、軟件以及它們之間相互作用的所有元素。為了全面而深入地探討計(jì)算機(jī)系統(tǒng),本文將從定義、組成、功能、發(fā)展歷程以及未來趨勢(shì)等方面進(jìn)行詳細(xì)闡述。
    的頭像 發(fā)表于 07-24 17:41 ?2414次閱讀

    DRAM在計(jì)算機(jī)中的應(yīng)用

    DRAM(Dynamic Random Access Memory,動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器)在計(jì)算機(jī)系統(tǒng)中扮演著至關(guān)重要的角色。它是一種半導(dǎo)體存儲(chǔ)器,用于存儲(chǔ)和快速訪問數(shù)據(jù),是計(jì)算機(jī)主內(nèi)存的主要組成部分。以下是對(duì)DRAM在計(jì)算機(jī)中的
    的頭像 發(fā)表于 07-24 17:04 ?3027次閱讀
    主站蜘蛛池模板: 男人的网址 | 狠狠色成人综合首页 | 五月婷婷色网 | 亚洲天堂网站在线 | 国产在线精品一区二区夜色 | 一级毛片免费不卡在线视频 | 夜夜操天天爽 | 亚洲综合第一区 | 四虎永久免费网站免费观看 | 成年人看的黄色 | 日韩中文字幕电影 | 在线视频人人视频www | 四虎永久在线视频 | 女人张开腿双腿让男人桶 | 男女视频在线观看免费高清观看 | 久久这里只有精品免费播放 | 夜色321看片资源站 夜色sese | 视频免费播放 | 插插插操操操 | 色系视频在线观看免费观看 | 免费网站直接看 | 欧美67194| 婷婷精品视频 | 日本在线观看高清不卡免v 日本在线观看永久免费网站 | 久久综合欧美 | 色中色综合网 | 亚洲黄色三级网站 | 亚洲综合在线观看一区www | se色综合视频 | 亚洲精品456人成在线 | 能看的黄网 | 成人在线免费电影 | 欧美日韩精品一区二区在线线 | 色老板女色狠xx网 | 人人乳乳香蕉大免费 | 卡1卡2卡3精品推荐老狼 | 日本三级网站在线观看 | 日毛片| 免费看黄在线 | 97久久天天综合色天天综合色 | 国产美女久久久 |